[英]Why is my register-constant comparison not working in NASM Assembly?
[英]Why am I unable to print my number constant in NASM Assembly?
在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? 而且,为什么我的上述建议无效?
要使用int 0x80
和代码4
打印,您需要ECX
作为要打印的字节的地址。 在调用print
例程之前,您在ECX
的num
地址中添加了'0'
,因此它是内存中其他地方的地址。
您可能想要这样的东西。 我创建了一个单独的区域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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.