汇编复习1--十进制输出的两种方式

以十进制输出ax的值(0-65535)
1.方法一:通过堆栈来实现
入栈:
ax每次除以10,将余数压栈,商就保存在ax里,并用cx计入栈个数。当商不为0时,继续循环;否则开始出栈
出栈:

将刚刚保存的余数分别出栈,变为对应的ASCII值后输出


dec_out1 proc near
    push ax
    push bx
    push cx
    push dx

    
    mov bx,10
    mov cx,0

yazhan:
    mov dx,0
    div bx
    
    push dx
    inc cx
    
    cmp ax,0
    jz chuzhan
    
    jmp yazhan
    
chuzhan:
    pop dx
    add dl,30h
    mov ah,2            
    int 21h
           
    loop chuzhan
    
    pop dx
    pop cx
    pop bx
    pop ax
    
    ret
dec_out1 endp


2.方法二:利用除法
ax先除以10000,输出商。余数除以1000,再输出商。余数除以100 ,再输出商。余数除以10,再输出商。余数除以1,再输出商。


dec_out2  proc  near 
	 mov bx,ax
         mov   cx, 10000d
         call  dec_div
         mov   cx, 1000d
         call  dec_div
         mov   cx, 100d
         call  dec_div
         mov   cx, 10d
         call  dec_div
         mov   cx, 1d
         call  dec_div
         ret

dec_out2  endp

dec_div  proc  near
         mov   ax, bx
         mov   dx, 0
         div   cx
         mov   bx, dx		;将每次的余数保存在bx中
         mov   dl, al
         add   dl, 30h
         mov   ah, 2
         int   21h
         ret
dec_div  endp

两种方法的比较:

我认为第一种方式更好,因为第二种方法如果不够10000,也会输出前面的0。而且第一种方法利用了堆栈的先进后出的特点,比较巧妙。

你可能感兴趣的:(x86汇编)