jmp改变cs和ip问题
为什么jmp 1000:3这样的形式会报错C:\Users\pengshao\Desktop\dos报错.png
C:\Users\pengshao\Desktop\代码.png
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,1123h
mov bx,1243h
jmp 0020:0020
MOV AH,4CH
INT 21H
CODES ENDS
END START dos报错:
Drive C mounted as local directory D: \\asm
Z:>C:
: \\>masm a.asm;
Microsoft (R) Macro Assembler Version 5.10
Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.
a. asm(16): error A2038: Left operand must have segment
50104+ 463301 Bytes symbol space free
Warning Errors
1 Severe Errors 本帖最后由 jackz007 于 2020-2-4 13:42 编辑
把这一句
jmp 0020:0020
替换为:
db 0eah , 20h , 00h , 20h , 00h
试试看呢
当然,你只能用 debug 把它加载进去看,不能实际运行,否则,这条长跳转指令足以使你的程序失控!
大佬啊,这是什么啊,居然还能运行;
我想知道的是jmp 1000:3这种汇编指令,为什么编译器会报错,是什么原因?
是只有我报错,还是有很多这种情况?想不出来,脑袋疼。 pengshao 发表于 2020-2-4 14:20
大佬啊,这是什么啊,居然还能运行;
我想知道的是jmp 1000:3这种汇编指令,为什么编译器会报错,是什么原 ...
MASM 不支持
jmp 1000:3
这种格式的 jmp 指令,必须想办法变通。这种形式的代码只能在 debug 中看到,在源代码中一定是 jmp far ptr <标号> 这种形式。
对于远程跳转
jmp 1000:3
可以这么写:
mov ax,1000h
push ax
mov ax,3h
push ax
retf
当然,也可以这么写:
db 0eah , 03h , 00h ,00h , 10h
感谢大佬的解答
页:
[1]