Assembly 我试图在8086 masm中的数组中实现二进制搜索,但是我得到了一个错误,如;通过之间的相位误差;

Assembly 我试图在8086 masm中的数组中实现二进制搜索,但是我得到了一个错误,如;通过之间的相位误差;,assembly,x86,binary-search,masm,Assembly,X86,Binary Search,Masm,这是我的asm代码。在语句CMP[SI+CI],SEARCH .MODEL SMALL .STACK 100H .DATA MATR1 DW 0001H,0002H,0003H,0004H,0005H,0006H,0007H,0008H,0009H,000AH SEARCH DW 0003H LOWER DW 0000H HIGHER DW 000AH MID DW 0000H TEM

这是我的asm代码。在语句
CMP[SI+CI],SEARCH

.MODEL SMALL

.STACK 100H

.DATA

        MATR1 DW 0001H,0002H,0003H,0004H,0005H,0006H,0007H,0008H,0009H,000AH

        SEARCH DW 0003H

        LOWER DW 0000H

        HIGHER DW 000AH

        MID DW 0000H

        TEMP DW 0000H

    CI DW 0000H

        MSG1 DB 'NUMBER FOUND','$'

        MSG2 DB 'NUMBER NOT FOUND','$'

.CODE

MAIN PROC FAR

        MOV AX,@DATA

        MOV DS,AX

        MOV BX,0002H

        LEA DI,MATR1

        LEA SI,MATR1+0014H

NEXT:   MOV AX,LOWER

        MOV DX,HIGHER

        CMP AX,DX

        JGE TERM2

        MOV AX,0

        MOV DX,0

        MOV AX,LOWER

        ADD AX,HIGHER

        DIV BX

        MOV SI,0000H

        MOV SI,AX

        ;MOV AL,SEARCH

    MOV CI,AX

    MUL BX

    MOV CX,AX

    MOV AX,CI

    MOV CI,CX

        CMP [SI+CI],SEARCH

        JGE AGAIN

        MOV HIGHER,AX

        JMP NEXT

AGAIN:  MOV SI,0000H

        MOV SI,AX

        MOV DX,AX

    MOV CI,AX

    MUL BX

    MOV CX,AX

    MOV AX,CI

    MOV CI,CX

    MOV AX,0

        CMP [SI+CI],SEARCH

        JE TERM

        MOV LOWER,DX

        JMP NEXT

TERM:   LEA DX,MSG1

        MOV AH,09H

        INT 21H

        MOV AH,4CH

        INT 21H

TERM2:  LEA DX,MSG2

        MOV AH,09H

        INT 21H

        MOV AH,4CH

        INT 21H

MAIN ENDP

END

您的
CI
是内存中的一个值,
SEARCH
也是内存中的一个值。同样地,
CMP[SI+CI],SEARCH
被赋予两个内存操作数,这在x86汇编中不受支持。您可以通过先将一个操作数加载到寄存器中,然后继续比较来解决该问题,例如:

MOV CX, [SI+CI]
CMP CX, SEARCH