下面程序为什么不行??jmp指令不能越段转移吗??有什么方法越段呢??

来源:百度知道 编辑:UC知道 时间:2024/07/16 06:32:34
assume cs:code

code segment
start:
jmp far ptr sss
mov ax,4c00h
int 21h
code ends

code2 segment
sss:mov ax,3

code2 ends
end start

可以放一个段的,但是你忘了有一条伪指令:ASSUME。更改后的如下:
code segment
assume cs:code
start:
jmp far ptr sss
exit:mov ax,0200h
int 21h
mov ax,4c00h
int 21h
code ends

code2 segment
assume cs:code2
sss:mov dl,3
add dl,30h
jmp far ptr exit
code2 ends
end start
还有跳到code2执行后,没有和DOS接口的指令了,必须有jmp far ptr exit,回到code中,执行那里的和DOS接口的指令。
另外,其它增加和改变的指令只是为了让你验证用的,不改没有关系。

能越段转移
你写的不规范而以
JMP FAR PTR label 远转移(far jump)
执行操作:(IP) ← label的段内偏移地址
(CS) ← label所在段的段地址
远转移实现的是段间的跳转,即从当前代码段跳转到另一个代码段中,这意味着指令执行后,不仅要改变IP的值,CS也会得到一个新的段地址。在汇编指令中,远转移的目标地址也可以使用除立即寻址方式外的任何寻址方式来表示。

干吗要2个code段呢?你放一个段里不行么?2个子程序就行了呗~
另外,段间转移说的是不同的数据段之间转移吧,不是代码段

你要实现段间转移需要分别编2个程序,并且用LINK连接成EXE文件(COM文件不允许远程调用)

第四个回答的很好

这样写不规范吧