繁体   English   中英

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

[英]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例程之前,您在ECXnum地址中添加了'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM