将Word数组复制到DoubleWord阵列NASM程序集

时间:2015-09-27 22:31:08

标签: assembly x86 nasm cpu-registers

%include 'Functions.asm'
section .data
wordArray dw 0, 1, 2, 3, 4, 5
length equ $-wordArray
ddArray dd 0, 1, 2, 3, 4, 5
section .text
global main

main:
mov ebp, esp; for correct debugging
mov esi, wordArray
mov edi, ddArray
mov ecx, 0

convert:
mov bx, [esi + ecx * 2]
movzx edi, bx
inc ecx
cmp ecx, length
jne convert

mov eax, ddArray
call intLineFeed
call exit

我试图用循环将所有元素从无符号字(16位)数组复制到无符号双字(32位)数组中。但是,我不认为我正确地做到了。

输出我收到134520880

1 个答案:

答案 0 :(得分:3)

您正在覆盖输出指针edi,而不是写入输出数组。而不是:

mov bx, [esi + ecx * 2]
movzx edi, bx

你可以尝试:

movzx ebx, word [esi + ecx * 2]
mov [edi + ecx * 4], ebx

另请注意,您需要将length除以2,因为您已将其声明为字节数,因此您需要cmp ecx, length / 2

PS:您的输出数组已包含正确的数据。

PPS:不确定mov eax, ddArray; call intLineFeed应该做什么,我猜这是打印数组的地址,这就是为什么你得到134520880作为输出。