从汇编 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 值并将其打印出来。
我正在尝试做一个非常简单的汇编练习:对位于连续存储单元中的 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 值并将其打印出来。