J'ai essayé de comprendre un algorithme de recherche binaire en utilisant assembly, mais j'ai reçu une erreur Near jump or call to different CS
chaque fois que j'essaye d'assembler le code. L'erreur est sur les lignes où j'ai utilisé un JMP ou l'une de ses instructions variantes. J'utilise TASM, et mon code est:Erreur "Near jump ou appel à CS différent" dans TASM
DATA SEGMENT
ARR DW 0000H,1111H,2222H,3333H,4444H,5555H,6666H,7777H,8888H,9999H
LEN DW ($-ARR)/2
KEY EQU 7777H
MSG1 DB "KEY IS FOUND AT "
RES DB " POSITION",13,10," $"
MSG2 DB "KEY NOT FOUND!!!.$"
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV BX,00
MOV DX,LEN
MOV CX,KEY
AGAIN: CMP BX,DX
JA FAIL
MOV AX,BX
ADD AX,DX
SHR AX,1
MOV SI,AX
ADD SI,SI
CMP CX,ARR[SI]
JAE BIG
DEC AX
MOV DX,AX
JMP AGAIN
BIG:JE SUCCESS
INC AX
MOV BX,AX
JMP AGAIN
SUCCESS: ADD AL,01
ADD AL,'0'
MOV RES,AL
LEA DX,MSG1
JMP DISP
FAIL: LEA DX,MSG2
DISP: MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
Prenez l'habitude de commenter vos chaînes de montage. Dans 3 mois vous ne vous souviendrez plus de * ce que fait le programme ni * comment *. – Seki
Ce code aurait fonctionné avec EMU8086 parce que sa syntaxe est moins pointilleuse, mais la réponse fournie par @Seki devrait la corriger pour TASM (et MASM) –