前言
很久没写东西了,今晚下班抽空写写。
这部分的内容很简单,但是对刚接触的同学来说可能比较难理解。今天讲8位的和16位的通用寄存器。
在十一课中,我们知道了32位的通用寄存器。分别是EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI。
今天讲的16位寄存器分别为:AX、CX、DX、BX、SP、BP、SI、DI。
对比32位和16位寄存器的名称,会发现其实16位的寄存器只是少的一个字母E。
今天讲的8位的寄存器分别为:AL、CL、DL、BL、AH、CH、DH、BH。
下面的内容可能对刚入门的同学比较难理解一点。
首先说明一点,这些8位、16位、32位的寄存器,并不是相互独立的。8位寄存器在16位寄存器中,而16位寄存器在32位寄存器中。或者说:32位寄存器中,取0到15位的部分组成16位寄存器,16位寄存器对半分,成为8位寄存器。不明白的看下图。
可能还有同学不明白,下面以EAX为例讲讲它们的关系。看下图,32位寄存器EAX,占用0到31位。把EAX从中间分开,取0到15,就是16位寄存器AX。再从AX中间分开,低位0到7位为8位寄存器AL;高位8到15位为8位寄存器AH。
在OD中测试寄存器之间的关系
用OD随便打开一个exe。(OD的使用请看上节课),往EAX中写满A。输入:mov eax,0xAAAAAAAA
往16位寄存器AX中写满B,输入:mov ax,0xBBBB。
往8位寄存器AL中写满C,输入:mov al,0xCC。
往8位寄存器AH中写满D,输入:mov ah,0xDD。
写完上面的内容开始测试运行结果,按F8。可以看到32位寄存器EAX写满A。
再按F8单步运行,可以看到16位寄存器AX写满B,(即EAX中的低16位)。
再按F8,可以看到8位寄存器AL写满C,(即EAX中的0到7位)。
再按F8,可以看到8位寄存器AH写满D,(即EAX中的8到15位)。
通过上面的讲解应该是了解了。
写于2020.4.21 22:59