10个数排序

Email144 2009-04-30 01:34:45
DATA SEGMENT
buffer db 23,12,45,32,127,3,9,58,81,72
MIN db ?
buffer2 db 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,10
MOV SI,0
NEXT1:
MOV AL,[buffer+SI]
MOV MIN,AL
MOV DH,10
MOV DI,0
NEXT2:
MOV AL,[buffer+DI]
CMP MIN,AL
JGE XCHG1
DEC DH
INC DI
JNZ NEXT2
MOV DL,MIN
MOV [buffer2+SI],DL
INC SI
LOOP NEXT1
MOV CX,10
MOV SI,0
NEXT3:
MOV DL,[buffer2+SI]
MOV AH,2
INT 21H
INC SI
LOOP NEXT3
XCHG1:
XCHG MIN,AL
CODE ENDS
SSEG SEGMENT STACK
DW 100 DUP(?)
SSEG ENDS
END START
打印不出来,请问高高手们哪里错了
...全文
280 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu568581185 2011-10-31
  • 打赏
  • 举报
回复
学习了
╮(╯▽╰)╭
高手太多了
呵呵
Email144 2009-05-07
  • 打赏
  • 举报
回复
太深奥了,看不懂
goodider 2009-05-03
  • 打赏
  • 举报
回复
有意思的帖子进来学习下。还有栈不定义没关系系统会自己分配一个的。
mengcheng8487 2009-05-02
  • 打赏
  • 举报
回复
搞得这么复杂。。。学习下。。。
BAYNPU 2009-05-01
  • 打赏
  • 举报
回复
楼上,你这个怎么没定义堆栈?、
我写的没堆栈会出错 ;没有定义堆栈也没关系呀,操作系统会自动安排好堆栈空间.
array020 2009-05-01
  • 打赏
  • 举报
回复
呵呵 你把你的代码贴出来看看咯
Email144 2009-05-01
  • 打赏
  • 举报
回复
楼上,你这个怎么没定义堆栈?、
我写的没堆栈会出错


BAYNPU 2009-05-01
  • 打赏
  • 举报
回复
;去看看吧:
DATA SEGMENT
buffer dw 23,12,45,32,127,3,9,58,81,72
MIN dw ?
info db 'please input a key 1 for continue 0 for exit,other for again!'
printn db 30 dup(?),13,10,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,ss:SSEG
START:
MOV AX,DATA
MOV DS,AX
MOV si,10
MOV bx,0
AGAIN:
MOV DX,OFFSET info
MOV AH,9
INT 21H
mov AH,1
INT 21H
CMP AL,'0'
JE EXIT
CMP AL,'1'
JNE AGAIN
PUSH SI
PUSH CX
CALL SORT
POP CX
POP SI
sort:
mov ax,buffer[bx]
mov dx,0
mov cx,10
lea di,buffer
next:
cmp ax,[di]
jg no_count
inc dx
no_count:
add di,2
loop next
mov min[bx],dx
dec dx
mov di,dx
add di,dx
add di, dx
mov cl,10
div cl
add al,30H
add ah,30H
mov printn[di],al
inc di
mov printn[di],ah
inc di
mov printn[di],20H
add bx ,2
dec si
jne SORT
lea dx,printn
mov ah,09
int 21H
pop ax
pop ds
exit:mov ax,4c00h
int 21h
SSEG SEGMENT STACK
DW 100 DUP(?)
SSEG ENDS
code ends
end start




Email144 2009-05-01
  • 打赏
  • 举报
回复
DATA SEGMENT
buffer db 23,12,45,32,127,3,9,58,81,72
MIN db ?
info db 'please input a key 1 for continue 0 for exit,other for again!'
db 0ah,0Dh,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,10
MOV SI,0
AGAIN:
MOV DX,OFFSET info
MOV AH,9
INT 21H
mov AH,1
INT 21H
CMP AL,'0'
JE EXIT
CMP AL,'1'
JNE AGAIN
PUSH SI
PUSH CX
CALL SORT
POP CX
POP SI
NEXT3:
MOV DL,[buffer+SI]
MOV AH,2
INT 21H
INC SI
LOOP NEXT3
EXIT:
HLT
SORT PROC
NEXT1:
MOV AL,[buffer+SI]
MOV MIN,AL
MOV DH,10
AND DX,00FFH
SUB DX,SI
MOV DI,0
MOV BX,SI
NEXT2:
MOV AL,[buffer+DI+BX]
CMP MIN,AL
JGE XCHG1
BB:
INC DI
DEC DH
JNZ NEXT2
MOV DL,MIN
XCHG [buffer+SI],DL
INC SI
LOOP NEXT1
RET
XCHG1:
XCHG MIN,AL
JMP BB
SORT ENDP
CODE ENDS
SSEG SEGMENT STACK
DW 100 DUP(?)
SSEG ENDS
END START

我的选择排序,究竟哪里出问题了,求救啊
array020 2009-04-30
  • 打赏
  • 举报
回复
作业刚好有一个选择排序的题目,做好了发你吧


;>>>>>>>>>>>>>>assume伪指令>>>>>>>>>>>>>>>>>>>>>>
assume cs:codesg,ds:datasg
;>>>>>>>>>>>>>>datasg段>>>>>>>>>>>>>>>>>>>>>>>>>>>
datasg segment
array db 3,2,5,6,1,9,7,4,0,8
LEN equ $-array
info db 'Please Input a Key,0 for asc,1 for desc,other for again!'
db 0ah,0dh,'$'
datasg ends
;>>>>>>>>>>>>>>codesg段>>>>>>>>>>>>>>>>>>>>>>>>>>>>
codesg segment
start:
mov dx,datasg
mov ds,dx
again:
mov dx,offset info ;显示提示信息
mov ah,9
int 21h

mov ah,1 ;从键盘输入一个字符,放在al中
int 21h

cmp al,'0' ;判断,输入为0或1就排序,否则重新输入
je sort
cmp al,'1'
je sort
mov ah,2 ;打印一个回车换行
mov dl,0ah
int 21h
mov dl,0dh
int 21h
jmp again
sort:
lea bx,array ;送入数组首地址在数据段的偏移
mov cx,LEN-1 ;送入数组长度减1
call selectionSort
inc cx ;恢复数组长度
mov si,0 ;si做变址寻址
mov ah,2 ;打印一个回车换行
mov dl,0ah
int 21h
mov dl,0dh
int 21h
show:
mov dl,[bx + si] ;把数组一个分量送dl
add dl,30h ;转换为ASCII码
int 21h
mov dl,20h ;输出一个空格
int 21h
inc si
loop show

mov ax,4c00h
int 21h
;>>>>>>>>>>>>>>>>>>选择排序子程序>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>输入参数cx:要排序的长度-1>>>>>>>>>>>>>
;>>>>>>>>>>>输入参数bx:数组首地址偏移>>>>>>>>>>>>
;>>>>>>>>>>>al为0则升序,al为1则降序>>>>>>>>>>>>>>>>
selectionSort proc
push bx
push si
push dx
push cx

cmp al,'0'
jne s00
s0:
mov si,1
push cx
s1:
mov dl,[bx]
cmp dl,[bx + si]
jbe next1
xchg dl,[bx + si]
mov [bx],dl
next1:
inc si
loop s1
inc bx
pop cx
loop s0
jmp exit
s00:
mov si,1
push cx
s11:
mov dl,[bx]
cmp dl,[bx + si]
jge next2
xchg dl,[bx + si]
mov [bx],dl
next2:
inc si
loop s11
inc bx
pop cx
loop s00
exit:
pop cx
pop dx
pop si
pop bx

ret
selectionSort endp

codesg ends
end start
Jarrys 2009-04-30
  • 打赏
  • 举报
回复
如果你只要按顺序输出的话,建议你使用选择法吧,每次找到最大的一个,输出后再把这数置0,接着再找最大的一个,循环cx次就全部输出了。。
nanlingcg 2009-04-30
  • 打赏
  • 举报
回复
起泡法。。。
不难。。。
没构思好。。。
重新来过。。。
^-^
pla_007 2009-04-30
  • 打赏
  • 举报
回复
他要的应该没这么高级吧?应该是打印到屏幕上。

[Quote=引用 2 楼 BAYNPU 的回复:]
没有INT17H中断打印服务指令,能打印吗?
[/Quote]
BAYNPU 2009-04-30
  • 打赏
  • 举报
回复
没有INT17H中断打印服务指令,能打印吗?
pla_007 2009-04-30
  • 打赏
  • 举报
回复
JGE XCHG1 ;第一次执行完后,就会跳转到XCHG1处

XCHG1:
XCHG MIN,AL ;执行完此处后,因为没有跳转指令,也没有结束指令,程序肯定跑飞掉。


所以,这个程序是你自己思路不清的,交换完2个数后应该继续执行什么操作?

而且冒泡排序也不是你这样的,建议再去看下冒泡排序的算法描述,明白整个排序过程后再来写这个程序。
源码链接: https://pan.quark.cn/s/a4b39357ea24 ### Ubuntu 用户磁盘空间分配与 Linux 硬盘分区方案深入剖析 #### 标题与描述中的核心知识要点说明 本文件将系统性地阐释在 Ubuntu 操作系统中如何为用户科学地分配磁盘空间,并深入分析适用于 Linux 的硬盘分区策略。文件不仅会介绍基础的目录结构及其功能,还会提供具体的分区指导以及在实际操作过程中需要留意的事项。 #### 目录结构及其功能说明 - **/bin**:系统常用基础命令的存储位置。 - **/boot**:包含启动时所需文件,例如内核镜像和初始化脚本等。 - **/dev**:存放设备文件。 - **/etc**:存储系统配置信息。 - **/home**:用户个人目录,每个用户拥有独立的子目录。 - **/lib**:存放运行二进制文件所需的共享库。 - **/mnt**:用于临时挂载其他文件系统的目录,可用于挂载软盘或 CD-ROM 设备。 - **/proc**:虚拟文件系统目录,存储当前运行内核的相关信息。 - **/root**:超级用户(root)的主目录。 - **/sbin**:系统管理程序的存放位置。 - **/tmp**:临时文件存储的目录。 - **/usr**:存放只读据,包括应用程序的可执行文件和文档等。 - **/var**:存储可变据文件,例如日志文件和邮件队列等。 - **/X11R6**:X Window 系统的安装路径。 #### 硬盘分区策略分析 文件中强调,在 Linux 环境下进行硬盘分区时需要综合考量多个因素,以确保系统的稳定运行和性能表现。以下是一些关键的分区建议: 1. **/boot ...

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧