为什么我无法在NASM程序集中打印我的数字常量?

时间:2013-09-14 23:53:59

标签: linux ubuntu assembly nasm 32-bit

在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?而且,为什么我的建议无效?

1 个答案:

答案 0 :(得分:1)

要使用int 0x80和代码4进行打印,您需要ECX作为要打印的字节的地址。在您调用'0'例程之前,您已将num添加到ECXprint的地址,因此它是内存中其他内容的地址。

你可能想要这样的东西。我创建了一个单独的区域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