鱼C论坛

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

汇编的小问题

[复制链接]
发表于 2012-3-9 12:55:02 | 显示全部楼层 |阅读模式
1鱼币
修改指令段和偏移地址直接JUP CS IP 就行了。。但是单独修改IP的时候为啥要通过JUP AX来修改呢。。不是更麻烦吗?为啥直接修改不行呢?

最佳答案

查看完整内容

jmp Segment:Offset可以, 王爽的汇编语言说的是:可以通过合法的寄存器来赋值。 在debug中,直接jmp offset也是完全可以的。。。 实际上ip的跳转是通过相对当前位置的向量来实现,并非一个具体的offset地址, 所以呢。。。。写程序的时候不要直接jmp offset, debug中可以,是因为知道具体的地址,但是dos加载程序的时候,你就不知道具体地址了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-9 12:55:03 | 显示全部楼层
本帖最后由 arkhe 于 2012-3-9 18:00 编辑

jmp Segment:Offset可以,
王爽的汇编语言说的是:可以通过合法的寄存器来赋值。
在debug中,直接jmp offset也是完全可以的。。。

实际上ip的跳转是通过相对当前位置的向量来实现,并非一个具体的offset地址,
所以呢。。。。写程序的时候不要直接jmp offset,
debug中可以,是因为知道具体的地址,但是dos加载程序的时候,你就不知道具体地址了。


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

使用道具 举报

发表于 2012-3-9 13:51:37 | 显示全部楼层
我也才学几天,但基础知识中,写明了..段地址不可以直接写入,必须用寄存器代入....
也就是开头学的
mov ax,1
mov es,ax
这样的...:loveliness:
不知道自己说的对不对,但应该是这样的......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-9 14:07:25 | 显示全部楼层
但是修改CS 和IP的时候不是可以JUP CS IP吗?修改IP 的时候为啥要用AX来放IP。比如不可以JUP IP 吗?而是要MOV AX 16  然后再JUP IP。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-9 16:08:12 | 显示全部楼层
本帖最后由 1020232499 于 2012-3-9 16:09 编辑

ax只是代表一个代码段的偏移地址
相当于cs:【ax】
直接修改ip不是更麻烦
mov ip,0000
jup ip
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-9 18:07:04 | 显示全部楼层
首先 是 JMP no  JUP   
然后   jmp ip 这个IP你填写的是数据么?那就相当于  jum 数据
   数据要用什么存放?当然是寄存器了  
包括你上面的   jmp cs:ip   
其实 也是 jmp 数据:数据  也就是 jmp 寄存器:寄存器
你用的debug 中所有的数据都是在寄存器中存放的 cs是表示代码段地址ds表示数据段地址 ip表示ip地址     同时这些也是数据 当需要改变的时候都需要用寄存器来传输  将改变的数据替换原来的数据
所以也就有了 这样的语句
mov ax,0123h   ;将0123h赋给ax寄存器
mov cs,ax    ;将代码段地址设置为0123h
jmp ax ; 跳转     段地址保持不变   ip 地址改变为ax寄存器内数据处
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-19 20:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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