📜  8086程序打印一个16位十进制数

📅  最后修改于: 2021-06-28 15:54:24             🧑  作者: Mango

问题:编写8086程序以打印16位十进制数。

例子:

Input: d1 = 655
Output: 655

Input: d1 = 234
Output:234 

解释:

  1. 将存储的值加载到寄存器中
  2. 将该值除以10
  3. 将其余部分推入堆栈
  4. 增加数量
  5. 重复这些步骤,直到寄存器的值大于0
  6. 直到计数大于零
  7. 弹出堆栈
  8. 将48添加到顶部元素以将其转换为ASCII
  9. 使用中断打印字符
  10. 减少计数

程序:

ALP
;8086 program to print a 16 bit decimal number
.MODEL SMALL
.STACK 100H
.DATA
d1 dw 655
.CODE
MAIN PROC FAR
    MOV AX,@DATA
    MOV DS,AX    
      
    ;load the value stored
    ; in variable d1
    mov ax,d1       
      
    ;print the value 
    CALL PRINT      
                     
    ;interrupt to exit               
    MOV AH,4CH
    INT 21H
  
MAIN ENDP 
PRINT PROC           
      
    ;initilize count
    mov cx,0
    mov dx,0
    label1:
        ; if ax is zero
        cmp ax,0
        je print1      
          
        ;initilize bx to 10
        mov bx,10        
          
        ; extract the last digit
        div bx                  
          
        ;push it in the stack
        push dx              
          
        ;increment the count
        inc cx              
          
        ;set dx to 0 
        xor dx,dx
        jmp label1
    print1:
        ;check if count 
        ;is greater than zero
        cmp cx,0
        je exit
          
        ;pop the top of stack
        pop dx
          
        ;add 48 so that it 
        ;represents the ASCII
        ;value of digits
        add dx,48
          
        ;interuppt to print a
        ;character
        mov ah,02h
        int 21h
          
        ;decrease the count
        dec cx
        jmp print1
exit:
ret
PRINT ENDP
END MAIN


输出:

655

注意:该程序无法在在线编辑器上运行,请使用MASM运行该程序,并使用dos框运行MASM,您可以使用任何8086仿真器运行该程序