简单的装配功能不起作用

时间:2014-01-29 17:02:38

标签: assembly operating-system

我无法运行以下代码。它编译但只是给出一个空白输出。我试图取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

1 个答案:

答案 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