pengshao 发表于 2020-2-4 11:59:05

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

pengshao 发表于 2020-2-4 12:08:34

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:40:29

本帖最后由 jackz007 于 2020-2-4 13:42 编辑

      把这一句
    jmp 0020:0020
      替换为:
    db 0eah , 20h , 00h , 20h , 00h
      试试看呢

      当然,你只能用 debug 把它加载进去看,不能实际运行,否则,这条长跳转指令足以使你的程序失控!
   

pengshao 发表于 2020-2-4 14:20:22

大佬啊,这是什么啊,居然还能运行;
我想知道的是jmp 1000:3这种汇编指令,为什么编译器会报错,是什么原因?
是只有我报错,还是有很多这种情况?想不出来,脑袋疼。

jackz007 发表于 2020-2-4 17:10:05

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

pengshao 发表于 2020-2-4 17:48:13

感谢大佬的解答
页: [1]
查看完整版本: jmp改变cs和ip问题