【发布时间】:2014-01-29 17:02:38
【问题描述】:
我无法运行以下代码。它编译但只给出一个空白输出。我试图取 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
【问题讨论】:
-
您收到什么错误消息?你用的是什么汇编程序?
print_string定义在哪里? -
打印字符串在另一个 .asm 文件中定义,两者都是“主”文件的一部分。使用 nasm 编译没有错误,但是当你运行它时,它只是给出空白输出
-
另外,如果我注释掉 shr 行和 and 行,它会显示 0x0000 ....所以它必须与这两行有关
-
想想你在这些方面做了什么。
mov ax,HEX_OUT将您的字符串0x0000的地址 放入ax。随着shr和and被注释掉,接下来发生的事情是使用print_string打印ax指向的字符串。如果您取消注释这些行,您将在ax中获取0x0000的地址并对其进行操作(除以2 和and-ing 谁知道dx中的内容)并获得一些新地址这指向...什么?谁知道呢,但可能不太好。在这种情况下,您操作的是地址,而不是值。