assembly - TASM 中的 "Near jump or call to different CS"错误

标签 assembly binary-search dos tasm x86-16

我一直在尝试使用汇编来理解二进制搜索算法,但每当我尝试汇编代码时,都会遇到错误 Near jump or call to different CS。错误出现在我使用 JMP 或其变体指令之一的行中。我正在使用 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

最佳答案

在您的 CODE SEGMENT 中,您缺少用 ASSUME 分隔段声明的逗号(第 10 行)。将其更改为:

ASSUME DS:DATA, CS:CODE

关于assembly - TASM 中的 "Near jump or call to different CS"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36678622/

相关文章:

multithreading - 使用原子交换实现原子增量?

assembly - 如何从CUDA C调用ptx函数?

objective-c - 为什么二进制搜索找不到我的字符串?

java - 在 Java 中查找 ArrayList 中满足条件列表的所有对象

windows - 创建批处理文件以识别事件的 Internet 连接

c++ - GMP 如何在任意数量的字节上存储它的整数?

c - 我的 Assembly 实现中的段错误

algorithm - 二分查找相关的编程难题

c - 写入 0xb8000000 会在屏幕上产生输出,而无需任何打印语句,例如 `printf`

assembly - 如何在程序集 8086 中输出存储在变量中的值?