2016-04-17 2 views
2

Я пытаюсь понять алгоритм бинарного поиска, используя сборку, но получал ошибку Near jump or call to different CS всякий раз, когда я пытаюсь собрать код. Ошибка в строках, где я использовал JMP или одну из его вариантов инструкций. Я использую TASM, и мой код:Ошибка при скачке или вызов другой CS в 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

Соберитесь, чтобы прокомментировать ваши сборочные линии. Через 3 месяца вы не будете помнить *, что * программа не делает * как *. – Seki

+0

Этот код работал бы с EMU8086, потому что его синтаксис менее придирчив, но ответ, предоставленный @Seki, должен исправить его для TASM (и MASM) –

ответ

1

В вашем CODE SEGMENT, вам не хватает комы, чтобы отделить объявления сегмента с ASSUME (в строке 10). Измените его на:

ASSUME DS:DATA, CS:CODE 
Смежные вопросы