如何在 8086 汇编中打印 BYTE 大小的数字

How to print a BYTE size number in 8086 assembly

这里是如何打印字号的数字。我不能让它适用于字节大小的数字。

.model  small
.stack   100h
.data
num  dw  300   ; <----- See below
numS db  6 dup(' '),'$'**

.code
    mov ax, @data
    mov ds, ax
    mov ax, num
    mov bx, 10         
    mov si, offset numS+5
    
    cmp ax,0
    jge next
    neg ax
 next:  
    mov dx,0
    div bx
    add dl, 48
    mov [si],   dl
    dec si
    cmp ax, 0
    jne next
    
    cmp num,0
    jge sof
    mov byte ptr[si],   '-'
    dec si
    
sof:
    inc si
    mov ah, 9
    mov dx, si
    int 21h
    .exit
end

我将 num dw 更改为 num db 但是我尝试更改 bx 的代码有问题..
任何人都可以更改操作数类型以匹配,因为程序说这是问题所在。我需要此代码不使用其他方法,如 poppushret.

好消息 是您可以继续使用现有的转换。如果将 num dw 300 行更改为 num db 36 之类的内容,您只需在代码中修改如何加载 AX 寄存器。您现在写 mov al, num cbw 而不是 mov ax, num。 (您显然期待签名的数字!)


全字节解决方案是可行的:

    mov ax, @data
    mov ds, ax
    mov al, num
    mov bl, 10         
    mov si, offset numS+5
    
    cmp al,0
    jge next
    neg al
 next:  
    mov ah, 0
    div bl        ; Calculates AX / BL --> AL is quotient, AH is remainder
    add ah, 48
    dec si
    mov [si], ah
    cmp al, 0
    jne next
    
    cmp num, al      ; AL == 0
    jge sof
    dec si
    mov byte ptr [si], '-'
sof:
    mov dx, si
    mov ah, 09h      ; DOS.PrintString
    int 21h