com文件,tiny内存模式下如何jmp
com文件内,从外面读取 一小段程序到一个内存地址(比如0600),没有预定义空间,
而是直接利用int13中断,读入到一个起始地址(这个地址可以直接给嘛??)。
那么如何跳转到
这个地址呢?
我将mov bx,0600
jmp bx
结果出错了啊?
[解决办法]
可以将目标地址 push 压栈,然 ret 指令转去;也可以将目标地址给个变量,然后 jmp 间接转移过去
[解决办法]
学习.........
[解决办法]
com 不需要你定义堆栈空间的,缺省的就是所在段的最后。所以,只有程序不是特别大到几近 64K-100h,或对段末有数据安排,就可以使用堆栈指令。
在源程序级,jmp 到一个数据变量,最后的指令是以该变量的值为目标地址:
var_to dw ?
...
mov var_to, bx
jmp var_to ; 这样也可以了
[解决办法]
呃,这个帖子怎么在各个板块间不停地游走?
内存地址如何定义,什么意思?如果觉得特殊需要,使用变量比较困难的话,就用 push-ret 的方法吧:
mov bx, 0600
push bx
retn
[解决办法]
jmp bx其实是 jmp cs:bx
应该是需要注意 cs
[解决办法]
jmp far ptr 600
or
jmp dword ptr 变量,也可
[解决办法]
mov cs,ax
没有这样的指令,cs不能用mov指令赋值。
如果要跳转到0:600,可以用
push 0
push 600h
retf
如果用8086指令可以改为
xor ax,ax
push ax
mov ax,600h
push ax
retf
引导程序应加载到0:7c00h,否则很可能出错。
[解决办法]
ORIGIN EQU 0100H ; .386.model tiny.codeORG ORIGINstart: MOV AL,'B' MOV BL,03H MOV AH,0EH INT 10H xor ax,ax mov cs,ax mov bx,0100H JMP bx end start
[解决办法]