学习前置知识第十七天
今天要做什么?
1:深入了解主引导扇区的内存布局
2:编译运行测试文件
3:使用标号计算跳转的偏移地址
4:已经编写了主引导扇区程序,使用和认识另一种跳转指令:绝对间接近跳转
5:使用相对偏移量的短跳转和近跳转
操作指令汇总:
xp
xp /512xb 0x7c00(从物理地址7c00处显示 512个字节)
xp /要查看的字节(512) 要查看的方式x(以十六进制显示)b(byte以字节为单位显示)
要查看的地址 0x7c00,最好先将调试地址设置到0x7c00处
sreg 显示寄存器详细信息
r 显示所有的通用寄存器
s 单步执行,执行后的内容不会立即显示到屏幕上
u 连续的反汇编指令,默认一条,u/16 显示16条
c不间断执行指令,如果我们设置了断点,他就会从断点出停下来
xp /要查看的字节(512) 要查看的方式x(以16进制显示)b (byte以字节为单位显示)例如:xp /512xb 0x7c00
b 设置断点,指令 所谓断点,这是一个内存指令,当处理器执行到这个地址时,指令停止
先输入b 0x7c00(要到达的地址)
在输入c 执行到此位置暂停
1:
主引导扇区加载地址
用7c00 +5f 到地址 7c5f
如果修改 jmp 0x0000:0x7c5f 即是 不停的的跳转到自己的位置
测试一下,修改文件 后 重新生成bin文件,然后重新写入磁盘
nasm exam.asm -f bin -o exam.bin
3:
从0000: 0000到0000: FFFF是一个64KB的段地址
0x0000:0x7c00-7c5F
计算地址 可以用原先的三种方式,也可以直接引用标号的方式
可以使用多种方式标号
使用下图方式的地址计算,还是无限跳自己
4:绝对间接近跳转
绝对间接进跳转:跳转到不太远的地方,不是直接给出的跳转地址,是用通用寄存器bx间接给出的。给出的地址是目标位置的实际偏移地址。
不同的跳转指令,操作码是不一样的
因为这条指令的段地址本身没有变化,变化的只是偏移地址,不改变段寄存器CS的内容,只改变了指令指针寄存器IP的内容,所以是一个段内跳转指令,绝对间接近跳转指令。
5:
使用相对偏移量的跳转是因为,标号和要跳转的地方所相差的偏移地址是不变的。
跳转的组成:
Jmp start(jmp short start);跳转标号 ;EB 8位的相对偏移量,8位是一个字节,可以表示的数介于(128)-(-127) 我们称这样的跳转为相对短跳转