21,459
社区成员
发帖
与我相关
我的任务
分享
.model small
.stack 100h
.data
num dw 2601
ten db 10
.code
start:
mov ax, @data
mov ds, ax
mov bx, num
call print_number
mov ax, 4c00h
int 21h
print_number proc near
;输出一个十进制数,参数:BX
push ax
push bx
push cx
push dx
cmp bx,0 ;如果num==0,直接输出'0'后结束
jz zero
;从个位开始,逐位压入堆栈,然后出栈,即可从高位到地位输出
digs DB 0 ;用来记录num有几位数
;ten DB 10 ;除法时的除数
lable1:
mov ax,bx
div byte ptr ten ;除以10,余数为最低位,保存在ah中
xchg ah,al ;余数送到al
xor ah,ah ;ah清零,以判断余数和bx是否相等
cmp ax,bx
jz lable2 ;bx%10==bx ,只剩下一位了,可以直接压栈
mov ax,bx
div byte ptr ten
mov dx,0
mov dl, ah
inc digs
push dx
mov ah,0
mov bx,ax
jmp lable1
lable2:
inc digs
push ax
mov cl,digs
mov ch,0
next:
pop ax
mov dl,al
add dl,30h
mov ah,2
int 21h
loop next
jmp exit
zero:
mov dl,'0'
mov ah,2
int 21h
exit:
pop dx
pop cx
pop bx
pop ax
ret
print_number endp
end start