0

在 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到这样的位置。但我得到一个错误说

操作码和操作数的无效组合

所以基本上,为什么程序不打印 5?还有,为什么我上面的建议无效?

4

1 回答 1

1

要使用int 0x80和代码打印,4您需要ECX是要打印的字节的地址。你在调用例程之前添加'0'了那个的地址,所以它是内存中某个地方的其他东西的地址。numECXprint

你可能想要这样的东西。我创建了一个单独的区域numout来保存 ASCII 版本num

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
于 2013-09-15T00:01:32.450 回答