我无法运行以下代码。它编译但只是给出一个空白输出。我试图取HEX_OUT的值,删除尾随零,然后使用寄存器dx的值,以便HEX_OUT的值现在是dx的值。任何帮助将不胜感激。
谢谢,
灰
; prints the value of DX as hex.
print_hex:
pusha
mov ax, HEX_OUT ; ax = 0x00000
shr ax, 1 ; remove trailing 0
and ax, dx ; and registers and store in ax
; TODO :manipulate chars at HEX_OUT to reflect DX
mov bx, ax ; print the string pointed to
call print_string ; by BX
popa
ret
; global variables
HEX_OUT : db '0x0000',0
答案 0 :(得分:0)
HEX_OUT
不是二进制数;它是字符串的地址(恰好是数字的十六进制表示)。 shr ax,1
不会操纵字符串;它不会改变角色。它操纵二进制数;它会移动位。
最简单的方法是完全避免使用字符串:
HEX_OUT: dw 0000h ; or whatever number you like
我希望你有print_number
这样的功能可供你使用:
mov bx, ax ; or whatever register is the input for that function
call print_number ; or whatever is the name of that function
因为否则您必须编写(或find)代码以将二进制数转换为其十六进制字符串表示形式,以便您可以将其提供给print_string
。