【发布时间】:2015-03-09 09:19:34
【问题描述】:
我正在尝试在汇编中做一个非常简单的练习:将位于连续存储单元中的 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
程序已正确编译和执行,但返回的值不正确。结果应该是 450,而不是我得到 194。
我注意到 194 与 450 是相同的比特流,但省略了第 9 位。 调试我的程序时,我争辩说由于某种原因,我在阅读时无法理解
[数组+ecx]
虽然我指定了关键字 DWORD,但它只能读取 8 位。
有人可以帮助我吗? 提前致谢
【问题讨论】:
-
你在哪里看到 8 位读取?
ebx增加了一个 4 字节(dword)值,没关系。也许你在看BL,而不是EBX? -
当我在终端执行程序时,它返回 ebx 中的值。要查看这个返回值,我输入 echo $?
标签: assembly x86 sum nasm 32-bit