0

我正在解决这个组装问题,我正在循环遍历每个元素array1并存储该数组的索引,其中条目为“F”。

我将 MASM 用于 x86 英特尔处理器。汇编语言

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 中时会出错?错误说,必须是索引或基址寄存器

4

1 回答 1

2

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

参见英特尔软件开发人员手册中的图 3-11 。

于 2013-12-04T19:31:34.167 回答