将寄存器值移动到数组中

时间:2013-12-04 19:04:05

标签: assembly x86 masm irvine32

我正在处理这个程序集问题,我在array1中循环遍历每个元素并存储该数组的索引为“F”。

我正在使用MASM for x86 intel处理器。汇编语言

INCLUDE Irvine32.inc
.data
array1 BYTE "FMMFMFMMFFMMFFFMFMFM",0
indexa1 BYTE SIZEOF array1 DUP(?)
ArraySize = ($ - array1)

.code
main PROC

mov esi,0          ; index
mov ecx,ArraySize

L1: cmp esi,ecx            ; check to continue loop
    jl  L2                 ; continue
    jmp L5                 ; exit

L2: cmp array1[esi], "F" ; Check if "F"
    je L3                ; jump if "F"
    jmp L4               ; jump to L4 if not "F"

L3: 
   mov indexa1[ah], esi   ; store index number,---- ERROR ----
   inc ah
   jmp L4

L4: inc esi ; increment loop counter
    jmp L1  ; jump to beginning

L5: movzx eax, ah
    call DumpRegs

exit    
main ENDP
END main

为什么在尝试将索引存储在indexa1中时出错? 错误说,必须是索引或基址寄存器

1 个答案:

答案 0 :(得分:2)

indexa1[ah]与x86上的任何有效寻址模式都不匹配。改为使用32位寄存器(例如eax)作为计数器。

Intel's Software Developer's Manual中的图3-11。

相关问题