我试图在汇编中做一个非常简单的练习:将N个数字加在连续的存储单元中。这是我的实际代码:
global _start section .data array: DD 300,10,20,30,40,50 ; Allocate the numbers arrayLen: EQU $-array ; Get the quantity of numbers section .text _start: mov ecx, 0 ; The counter mov ebx, 0 ; The Accumulator loop: add ebx, DWORD [array+ecx] ; get the i-th word and add it to the accumulator add ecx, 4 cmp ecx, arrayLen jne loop mov eax, 1 int 0x80
程序已正确编译和执行但返回的值不正确。结果应该是450,而不是我获得194。
我注意到194是与450相同的比特流,但省略了第9位。 调试我的程序我认为,出于某种原因,当我阅读
时,我无法理解[array+ecx]
虽然我指定了关键字DWORD,但它只读取了8位。
有人能帮助我吗? 提前致谢
答案 0 :(得分:4)
程序正确地汇总了数组。问题在于返回结果。
[答案已更正,感谢Jester。]
您将返回值传递给sys_exit()
(这是mov eax, 1; int 0x80
所做的)。
sys_exit()
只返回the lower 8 bits的返回值(其他位用于某些标志)。
这就是第9位丢失的地方。
Shell观察到已截断的返回值并将其打印出来。