2016-04-17 1 views
2

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 
+0

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

+0

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) –

Répondre

1

Dans votre CODE SEGMENT, il vous manque un coma pour séparer les déclarations du segment avec ASSUME (à la ligne 10). Changez pour:

ASSUME DS:DATA, CS:CODE