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 证实了上述分析,该指令将立即数0x0cs:0x6ac8里的内容进行比较,并对处理器的标志寄存器(PSW)进行相应的设置(具体怎么设置我也不太清楚了,汇编忘得差不多了)

jne (应该是叫做 jump not equal)若 ZF 位为 0 则跳转,该指令结合了上一条指令配合使用(说明上条指令若相等则 ZF 置 0)

xor 是异或,这条指令是把 dx 寄存器清零,至于为啥这么做我也不太晓得了。

后面的指令大概看了一下,理解起来有些困难,就不往下看了。大家有兴趣的话可以继续往下读。

猜你喜欢

转载自www.cnblogs.com/joe-w/p/12551684.html