将8位整数数组移动到32位数组汇编

时间:2014-03-01 20:07:04

标签: arrays assembly x86

我坚持你应该如何从8位BYTE数组中获取十进制整数,并以某种方式设法将它们移动到循环内的32位DWORD数组中。我知道它必须对OFFSET和Movezx做一些事情,但理解它有点令人困惑。是否有任何有用的提示让新手了解它? 编辑: 例如:

    Array1 Byte 2, 4, 6, 8, 10
   .code
    mov esi, OFFSET Array1
    mov ecx, 5
    L1:
    mov al, [esi]
    movzx eax, al
    inc esi
    Loop L1

这是正确的做法吗?或者我完全错了吗? 这是大会x86。 (使用Visual Studios)

1 个答案:

答案 0 :(得分:1)

您的代码几乎是正确的。您设法从字节数组中获取值并将它们转换为dword。现在你只需要将它们放在dword数组中(甚至没有在你的程序中定义)。

无论如何,这里是(FASM语法):

; data definitions
Array1 db 2, 4, 6, 8, 10
Array2 rd 5              ; reserve 5 dwords for the second array.

; the code
    mov esi, Array1
    mov edi, Array2
    mov ecx, 5

copy_loop:
    movzx eax, byte [esi]  ; this instruction assumes the numbers are unsigned.
                           ; if the byte array contains signed numbers use 
                           ; "movsx"

    mov   [edi], eax       ; store to the dword array

    inc   esi
    add   edi, 4     ; <-- notice, the next cell is 4 bytes ahead!

    loop  copy_loop  ; the human-friendly labels will not affect the
                     ; speed of the program.