一个汇编程序,高手帮我注释一下吧,看不懂

[复制链接]
查看11 | 回复1 | 2008-11-13 15:39:58 | 显示全部楼层 |阅读模式
一个排序题目,主要不太理解他的存储。
他不用转化的,ascii码直接比较码?
帮帮小弟
.286
.model small
;---------------------------------------------------------------
.code
start:
push cs
pop ds
push cs
pop es
mov ah,09h
mov dx,offset msg1
int 21h
;输入功能从这里开始
mov dx,offset InputBuffer
sub bx,bx
mov ah,3fh
mov cx,80h
int 21h
mov si,offset InputBuffer
mov di,offset numbers
sub ax,ax
mov cx,0ah
@InputLoop:
sub bx,bx
sub bp,bp
call Skip
cmp al,'+'
je @Positive
cmp al,'-'
jne @SignEnd
inc bp
@Positive:
mov al,[si]
inc si
@SignEnd:
@ReadBegin:
sub al,'0'
jl @ReadEnd
cmp al,9
jg @ReadEnd
imul bx,bx,0ah
add bx,ax
mov al,[si]
inc si
jmp @ReadBegin
@ReadEnd:
or bp,bp
je @SignChanged
neg bx
@SignChanged:
mov [di],bx
inc di
inc di
loop @InputLoop
;输入数字到这里结束
;排序开始,用冒泡排序
mov cx,9*2
mov si,offset numbers
@Outer:
sub bx,bx
@Inner:
mov ax,[bx+si]
cmp ax,[bx+si+02h]
jng @Changed
push [bx+si+02h]
mov [bx+si+02h],ax
pop [bx+si]
@Changed:
inc bx
inc bx
cmp bx,cx
jl @Inner
dec cx
dec cx
jg @Outer
;排序结束
;输出数字开始
mov ah,09h
mov dx,offset msg2
int 21h
mov di,offset numbers
mov cx,0ah
mov bp,cx
@OutputLoop:
sub si,si
mov ax,[di]
mov bx,ax
inc di
inc di
cmp ax,0
jnl @PushNumber
neg ax
@PushNumber:
sub dx,dx
div bp
add dl,'0'
push dx
inc si
or ax,ax
jne @PushNumber
cmp bx,0
jnl @PopNumber
push '-'
inc si
@PopNumber:
pop dx
mov ah,02h
int 21h
dec si
jnz @PopNumber
mov ah,02h
mov dl,' '
int 21h
loop @OutputLoop
;输出数字到这里结束
mov ah,4ch
int 21h
;---------------------------------------------------------------
Skip proc near
@Skip: ;Skip blank and table
mov al,[si]
inc si
cmp al,' '
je @Skip
cmp al,09h
je @Skip
ret
Skip endp
;---------------------------------------------------------------
msg1 db '请输入10个数字:$'
msg2 db '排列后的数字如下:$'
numbers dw 0ah dup(?)
InputBuffer db 80h dup(?)
;---------------------------------------------------------------
end start

回复

使用道具 举报

千问 | 2008-11-13 15:39:58 | 显示全部楼层
程序已经把ACSII转成十进制了,看这一段 ;输入功能从这里开始 mov dx,offset InputBuffer sub bx,bx mov ah,3fh mov cx,80h int 21h mov si,offset InputBuffer mov di,offset numbers sub ax,ax mov cx,0ah @InputLoop: sub bx,bx sub bp,bp call Skip ;如果遇到空格符(20h)或者(09h)则忽略并继续读下一字符 ;---------------------------------------------...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行