Lab 1 : Part 1 exercise 2
Lab 1 : Part 1 - exercise 2
这部分是使用 gdb 的 si
命令去追踪几条指令,试着分析一下指令的实现
8088 处理器介绍
8088处理器的地址线是 20 ,可访问的地址空间为 \(2^{20} B\);而8088处理器的寄存器的大小仅为 \(16 bit\),故寻找下一个需要执行的指令的地址时,需要进行计算。
计算方法为:CS << 4 + IP
指令分析
[f000:fff0] 0xffff0: ljmp $0xf000,$0xe05b
[f000:e05b] 0xfe05b: cmpl $0x0,%cs:0x6ac8
[f000:e062] 0xfe062: jne 0xfd2e1
[f000:e066] 0xfe066: xor %dx,%dx
ljmp
是跳转指令,指令后面的两个地址分别是段地址和偏移地址,即该指令执行后应跳转到 0xf000 << 4 + 0xe05b = 0xfe05b
。
第二条指令 cmpl
的地址为 0xfe05b
证实了上述分析,该指令将立即数0x0
和 cs:0x6ac8
里的内容进行比较,并对处理器的标志寄存器(PSW)进行相应的设置(具体怎么设置我也不太清楚了,汇编忘得差不多了)
jne
(应该是叫做 jump not equal)若 ZF 位为 0 则跳转,该指令结合了上一条指令配合使用(说明上条指令若相等则 ZF 置 0)
xor
是异或,这条指令是把 dx 寄存器清零,至于为啥这么做我也不太晓得了。
后面的指令大概看了一下,理解起来有些困难,就不往下看了。大家有兴趣的话可以继续往下读。