【发布时间】:2017-08-25 00:26:48
【问题描述】:
我在 Assembly 中遇到了简单数组的问题。这是正确的做法吗。我需要用连续的数字填充数组,在本例中为 10。代码如下:
section .data
array TIMES 10 db 0
section .text
global _start
_start:
mov eax,10 ;counter
mov ebx,0 ;start from value 0
mov ecx,array;
loop:
mov [ecx],ebx
inc ecx ;increase pointer to next array element
inc ebx ;increase inputted value
dec eax ;decrease iterator
jnz loop ;if iterator not 0 loop
mov eax,1 ;eit
int 0x80
那是正确的代码吗?
在使用 gdb 进行调试时。第 11 行(5 个循环)上的断点显示以下输出:
$1: $eax = 4
$2: $ebx = 6
$3: $ecx = 134516902
x/d $ecx-1 0x80490a5: 5
如何从整个数组中查找值?只有我 $ecx-1 的这个地方显示输入数字的正确值。我几乎可以肯定我的问题是我的代码。
亲切的问候
【问题讨论】:
-
x/10d $ecx-9 或类似?
-
只有 $ecx-1 显示输入值。这段代码有这个问题吗: mov [ecx],ebx inc ecx ?我将值放在 ecx 指向的地址中,对吗?
-
尝试将
mov ecx, array更改为lea ecx, [array]。此外,您已将数组声明为 10 个字节,但在mov [ecx], ebx语句中您放置了 32 位,您将丢弃该数组。如果您打算只放入一个字节,请将其更改为mov [ecx], bl。