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
请注意您的装配线。在3个月内,你将不会记得*该程序做了什么,也没有*如何*。 – Seki
此代码可以与EMU8086一起工作,因为它的语法不太挑剔,但@Seki提供的答案应该纠正它对于TASM(和MASM) –