2016-04-17 18 views
2

我一直在尝试使用程序集来了解二进制搜索算法,但每次尝试组装代码时都会收到错误Near jump or call to different CS。错误出现在我已经使用JMP或其一个变体指令的地方。我使用TASM,我的代码是:TASM中的“接近跳转或呼叫到不同的CS”错误

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