哪位高手能帮我改一下,是关于向显示器输出有符号十进制数的子程序
有两个错误,
.model small
.stack
.data
.startup
count = ($-array)/2
wtemp dw ?
;代码段
mov cx,count
mov bx,offset array
again: mov ax,[bx]
mov wtemp,ax ;将入口参数存放到共享变量
call write ;调用子程序,显示一个数据
inc bx
inc bx
call dpcrlf ;光标回车换行以便显示下一个数据
loop again
.exit 0
;
write proc ;显示有符号10进制数的通用子程序:
push ax ;入口参数:共享变量wtemp
push bx
push dx
mov ax,wtemp ;取出显示数据
test ax,ax ;判断数据是零、正数或负数
jnz write1
mov dl,'0' ;是零,显示“
mov ah,2
int 21h
jmp write5
write1: jns write2 ;是负数,显示“-”
mov bx,ax ;AX数据暂存于BX
mov dl,'-'
mov ah,2
int 21h
mov ax,bx
neg ax ;数据求补(绝对值)
write2: mov bx,10
push bx ;10压入堆栈,作为退出标志
write3: cmp ax,0 ;数据(余数)为零,转向显示
jz write4
sub dx,dx ;扩展被除数DX.AX
div bx ;数据除以10:DX.AX÷10
add dl,30h ;余数(0~9)转换为ASCII码
push dx ;数据各位先低位后高位压入堆栈
jmp write3
write4: pop dx ;数据各位先高位后低位弹出堆栈
cmp dl,10 ;是结束标志10,则退出
je write5
mov ah,2 ;进行显示
int 21h
jmp write4
write5: pop dx
pop bx
pop ax
ret ;子程序返回
write endp
;使光标回车的子程序
dpcrlf proc
push ax
push dx
mov ah,2
mov dl,0dh
int 21h
mov ah,2
mov dl,0ah
int 21h
pop dx
pop ax
ret
dpcrlf endp
end
小弟感激不尽~
[此贴子已经被作者于2007-6-16 19:08:21编辑过]