在 32 位 Ubuntu 中学习 NASM 汇编。我有点困惑:
在.bss
中,我为一个变量预留了一个字节:
num resb 1
后来我决定给它赋值5
:
mov byte [num],5
然后在某个时候打印出来:
mov EAX,4
mov EBX,0
mov ECX,num
add ECX,'0' ; From decimal to ASCII
mov EDX,1
int 0x80
但它没有打印任何东西。
我猜问题出在我将 num
的值设为 5
时。我本来想这样做:
mov byte num,5
因为我认为 num
指的是内存中的一个位置,所以 mov
会将 5
复制到这个位置。但是我得到一个错误提示
invalid combination of opcode and operands
所以基本上,为什么程序不打印 5?还有,为什么我上面的建议无效?
最佳答案
要使用 int 0x80
和代码 4
进行打印,您需要将 ECX
作为要打印的字节的地址。在调用 print
例程之前,您将 '0'
添加到 ECX
中的 num
地址,因此它是内存中某处其他内容的地址。
您可能想要这样的东西。我创建了一个单独的区域,numout
来保存 num
的 ASCII 版本:
numout resb 1
....
mov EAX,4
mov EBX,0
mov CL,[num]
add CL,'0'
mov [numout],CL
mov ECX,numout
mov EDX,1
int 0x80
关于linux - 为什么我无法在 NASM Assembly 中打印我的数字常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18807543/