鱼C论坛

 找回密码
 立即注册
查看: 3374|回复: 5

[已解决]jmp改变cs和ip问题

[复制链接]
发表于 2020-2-4 11:59:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么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
最佳答案
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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 13:40:29 | 显示全部楼层
本帖最后由 jackz007 于 2020-2-4 13:42 编辑

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

        当然,你只能用 debug 把它加载进去看,不能实际运行,否则,这条长跳转指令足以使你的程序失控!
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 14:20:22 | 显示全部楼层
大佬啊,这是什么啊,居然还能运行;
我想知道的是jmp 1000:3这种汇编指令,为什么编译器会报错,是什么原因?
是只有我报错,还是有很多这种情况?想不出来,脑袋疼。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-2-4 17:48:13 | 显示全部楼层
感谢大佬的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 03:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表