【发布时间】:2014-10-19 13:08:27
【问题描述】:
我对汇编非常陌生,尤其是 NASM 语法,但我想学习。我的问题是我不明白如何将寄存器中的值(在我的情况下为 edx)添加到数组中。 我有一部分代码可以打印似乎运行良好的数组:
print_array:
mov ecx,32;move array length to ecx
jmp iterate_array
iterate_array:
mov eax,[result+ecx];move value from result+ecx into eax
push ecx;save ecx on stack
push eax;push & print eax
push formatin
call printf
add esp,8 ;
pop ecx
dec ecx
cmp ecx,0 ;
jnz iterate_array
这部分代码似乎运行良好。但问题是当我试图在数组中添加一个数字时。我以同样的方式尝试过:
xor ecx,ecx
jmp loop
loop:
xor edx,edx
div ebx
mov [result+ecx],edx
inc ecx
cmp eax,0 ;compare the quotient with 0;
jnz loop
这两部分代码来自一个简单的程序,该程序应该将十进制数转换为二进制数。这个想法是在循环中我只是将 eax 划分为 ebx 并且我想将余数存储在结果数组中。 但是好像我用的方法不行!
运行程序后的结果: 如果我在循环 eax 中输入数字 2=> 是 2,二进制 0010 但结果是: 000000000000000000000000000000001 for number 3 =>in loop eax is 3, in binary 0011 但结果是: 000000000000000000000000000000001 for number 4=> in loop eax is 4, in binary 0100 但结果是: 00000000000000000000000000000001256
问题是我不明白如何将 edx 的余数添加到循环中的数组中。我认为我在 iterate_array 中使用的方法似乎工作正常(显示 32 个零的数组)应该足够了。 数组在 .data 部分中声明为:
section .data
result times 32 db 0
【问题讨论】:
-
+1 仅适用于
I'm really new to assembly, especially NASM syntax, but I want to learn. -
-1 仅表示“不起作用”而不是说它如何不起作用。不,开玩笑的。但是你真的应该告诉我们具体的问题是什么。此外,使用调试器单步执行代码。如果我不得不猜测,你的数组是整数,所以你应该做
add ecx, 4而不是inc ecx。 -
好的,我会在运行程序后用一些结果更新问题!