📜  8086程序将16位十进制数转换为八进制

📅  最后修改于: 2021-06-28 09:44:43             🧑  作者: Mango

问题:我们给了一个16位的十进制数字,我们必须以八进制格式打印该数字。

例子:

Input: d1 = 16
Output:20

Input: d1 = 123
Output: 173 

解释:

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

程序:

;8086 program to convert a 16 bit decimal number to octal
    .MODEL SMALL
    .STACK 100H
    .DATA
        d1 dw 16
    .CODE
        MAIN PROC FAR
            MOV AX,
    @DATA
        MOV DS,
    AX
  
;load the value stored;
in variable d1
    mov ax,
    d1
  
;convert the value to octal;
print the value
    CALL PRINT
  
;interrupt to exit
    MOV AH,
    4CH INT 21H
  
    MAIN ENDP
        PRINT PROC
  
;initialize count
    mov cx,
    0 mov dx, 0 label1:;
if
    ax is zero
        cmp ax,
        0 je print1
  
;initialize bx to 8 mov bx, 8
  
;divide it by 8;
to convert it to octal
    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
  
;interrupt to print a
;character
    mov ah,
    02h int 21h
  
;decrease the count
    dec cx
        jmp print1
            exit : ret
                       PRINT ENDP
                           END MAIN

输出:

20

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