从汇编 x86 中的内存中读取 16 位 NASM

Read 16 bits from memory in Assembly x86 NASM

我正在尝试做一个非常简单的汇编练习:对位于连续存储单元中的 N 个数字求和。这是我的实际代码:

全局_start
节.data

        数组:DD 300,10,20,30,40,50 ;分配号码
        arrayLen: EQU $-array ;获取数字的数量

节.text
        _开始:

        移动 ecx, 0 ;柜台
        移动 ebx, 0 ;蓄能器

循环: 添加 ebx, DWORD [array+ecx] ;获取第 i 个单词并将其添加到累加器
        添加 ecx,4
        cmp ecx,arrayLen
        循环

        移动 eax, 1
        整数 0x80

程序已正确编译和执行,但 returns 值不正确。结果应该是450,而我得到的是194。

我注意到194和450是同一个码流,只是第9位被省略了。 调试我的程序我争辩说出于某种原因,当我阅读

时我无法理解
[数组+ecx]

虽然我指定了关键字 DWORD,但它只读取 8 位。

有人可以帮助我吗? 提前致谢

程序正确总结了数组。问题在于 returning 结果。

[答案更正,感谢 Jester。]

您将 return 值传递给 sys_exit()(这就是 mov eax, 1; int 0x80 所做的)。 sys_exit() 仅保留 return 值的 the lower 8 bits(其他位用于某些标志)。

那是第 9 位丢失的地方。

Shell 观察到已经被截断的 return 值并将其打印出来。