我坚持你应该如何从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)
答案 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.