鱼C论坛

 找回密码
 立即注册
查看: 4309|回复: 7

[学习笔记] 《零基础入门学习汇编语言》第四十七讲(实验八实验九详解)

[复制链接]
发表于 2017-8-24 22:00:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 shuiyu 于 2017-8-27 15:31 编辑

越努力,越幸运。欢迎大家来看我的笔记 小白刚学,不对的请各位大佬指正,谢谢

实验八

(1)在上一讲中,我对实验八有两个疑问:
第一个疑问:s2处的机器码为什么变成了F6EB。而不是EBF6。
第二个疑问:为什么执行了一个 jmp 0000的指令。

(2)首先第一个疑问:这个问题其实是我大惊小怪了,就是高低地址存放问题 ,F6EB拿出来的话就是EBF6(因为高地址排在低地址后面

(3)第二个疑问:因为 jmp short s 是跳转一个位移的,并不是跳转到一个地址。执行到s0处时跳转到s处,而s处在前面已经赋值成jmp short s机器码为F6EB;EB就是jmp的意思,F6是跳转的位移(是一个补码等于-10),也就是往上跳10个单元。所以就显而易见了,在s处执行jmp short s往上跳10个单元刚好到 mov ax,4c00h

实验九
终于把实验九弄明白了,还是挺高兴的


(1)
话不多说上图,这个是按小甲鱼写的(三个LOOP)
1.PNG
2.PNG

为什么是add ax,0ah呢?解:这个0ah其实就是加a0h的意思,因为字母不能直接在首位,所以加一个0在前面;而a后面的那个0为什么省略掉了呢?因还记得XXXX:XXXX的表达方式要乘以16往左移一位吗?平常我们都是使前面的段地址左移一位,而现在的ax实际是B8720H,写成了B872H,故只能把偏移地址左移一位了~即a0H。

(2)这个是直接连字节属性一起循环赋值了的(两个LOOP)
3.PNG


谢谢小甲鱼带来的视频教程,感谢!!

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记 小白刚学,不对的请各位大佬指教,谢谢

评分

参与人数 2荣誉 +3 鱼币 +8 收起 理由
小甲鱼 + 5
不二如是 + 3 + 3 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-10-17 12:27:49 | 显示全部楼层
实验八s2转移到s1,为什么是ebf6啊,f6是-10,也就是上移十个字节,可是s2与s1之间的位置相差也没有十个字节啊
1
QQ图片20171017122454.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-17 12:32:03 | 显示全部楼层
灰灰灰 发表于 2017-10-17 12:27
实验八s2转移到s1,为什么是ebf6啊,f6是-10,也就是上移十个字节,可是s2与s1之间的位置相差也没有十个字 ...

这是s2与s1之间的字节,只有cd21b80000五个字节啊
QQ图片.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-17 16:10:33 | 显示全部楼层
本帖最后由 shuiyu 于 2017-10-17 16:11 编辑
灰灰灰 发表于 2017-10-17 12:32
这是s2与s1之间的字节,只有cd21b80000五个字节啊


感谢老铁的提问,看了你的问题以后我也思考了挺久(距离发帖时间间隔一个多月了)。对于占多少个字节这个问题?我的理解呢就是要把 mov ax,0 和 jmp short s1占有的字节也算上的,因为执行完jmp指令后IP是指向下一条指令了(也就是jmp指令的末尾),所以要把jmp short s1指令占有的字节算上;而对于mov指令,因为你要跳转到标号s1处,所以肯定是要把IP指向mov指令的前面,故mov指令也要算上。个人理解个人理解,但是我觉得我的这个理解应该没有错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 12:14:14 | 显示全部楼层
shuiyu 发表于 2017-10-17 16:10
感谢老铁的提问,看了你的问题以后我也思考了挺久(距离发帖时间间隔一个多月了)。对于占多 ...

我觉得不对,首先,我也注意到你说的了,到时我关注过小甲鱼的视频,确实不能算上mov和jmp'指令。其次,偏移值的计算是,目标ip值-此刻的ip值,也就是18-22=5(18.19.20.21.22),所以还是5个字节啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-18 13:02:41 | 显示全部楼层
本帖最后由 shuiyu 于 2017-10-18 13:04 编辑
灰灰灰 发表于 2017-10-18 12:14
我觉得不对,首先,我也注意到你说的了,到时我关注过小甲鱼的视频,确实不能算上mov和jmp'指令。其次, ...


首先,老哥你算错了22-18=10(这是16进制的,并不是十进制。18,19,1A,1B,1C,1D,1E,1F,20,21)。其次,你使用22-18在这里就已经把mov和jmp指令算进去了,如果不算进去的话应该是1B-20。老哥你对内存的理解不够啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-18 15:50:37 | 显示全部楼层
shuiyu 发表于 2017-10-18 13:02
首先,老哥你算错了22-18=10(这是16进制的,并不是十进制。18,19,1A,1B,1C,1D,1E,1F,20,21)。其次, ...

嗯嗯,懂了,我理解的还是不够深。。。谢谢了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-20 15:35:27 | 显示全部楼层
实验九没有必要将BX 压栈出栈,根本没有覆写BX。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 13:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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