如何在 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 的代码有问题..
任何人都可以更改操作数类型以匹配,因为程序说这是问题所在。我需要此代码不使用其他方法,如 pop
、push
、ret
.
好消息 是您可以继续使用现有的转换。如果将 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
这里是如何打印字号的数字。我不能让它适用于字节大小的数字。
.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 的代码有问题..
任何人都可以更改操作数类型以匹配,因为程序说这是问题所在。我需要此代码不使用其他方法,如 pop
、push
、ret
.
好消息 是您可以继续使用现有的转换。如果将 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