我正在处理这个程序集问题,我在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中时出错? 错误说,必须是索引或基址寄存器
答案 0 :(得分:2)
indexa1[ah]
与x86上的任何有效寻址模式都不匹配。改为使用32位寄存器(例如eax
)作为计数器。
见Intel's Software Developer's Manual中的图3-11。