【问题标题】:Why am I unable to print my number constant in NASM Assembly?为什么我无法在 NASM Assembly 中打印我的数字常量?
【发布时间】:2013-09-19 09:27:57
【问题描述】:

在 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?还有,为什么我上面的建议无效?

【问题讨论】:

    标签: linux ubuntu assembly nasm 32-bit


    【解决方案1】:

    要使用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
    

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      相关资源
      最近更新 更多