第十三课_8位和16位通用寄存器

前言

很久没写东西了,今晚下班抽空写写。

这部分的内容很简单,但是对刚接触的同学来说可能比较难理解。今天讲8位的和16位的通用寄存器。

在十一课中,我们知道了32位的通用寄存器。分别是EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI

第十三课_8位和16位通用寄存器

今天讲的16位寄存器分别为:AX、CX、DX、BX、SP、BP、SI、DI

第十三课_8位和16位通用寄存器

对比32位和16位寄存器的名称,会发现其实16位的寄存器只是少的一个字母E

第十三课_8位和16位通用寄存器

今天讲的8位的寄存器分别为:AL、CL、DL、BL、AH、CH、DH、BH

第十三课_8位和16位通用寄存器

下面的内容可能对刚入门的同学比较难理解一点。

首先说明一点,这些8位、16位、32位的寄存器,并不是相互独立的8位寄存器在16位寄存器中,而16位寄存器在32位寄存器中。或者说:32位寄存器中,取015位的部分组成16位寄存器,16位寄存器对半分,成为8位寄存器。不明白的看下图。

第十三课_8位和16位通用寄存器

可能还有同学不明白,下面以EAX为例讲讲它们的关系。看下图,32位寄存器EAX,占用031位。把EAX从中间分开,取015,就是16位寄存器AX。再从AX中间分开,低位07位为8位寄存器AL;高位815位为8位寄存器AH

第十三课_8位和16位通用寄存器

在OD中测试寄存器之间的关系

用OD随便打开一个exe。(OD的使用请看上节课),往EAX中写满A。输入:mov eax,0xAAAAAAAA

第十三课_8位和16位通用寄存器

往16位寄存器AX中写满B,输入:mov ax,0xBBBB

第十三课_8位和16位通用寄存器

往8位寄存器AL中写满C,输入:mov al,0xCC

第十三课_8位和16位通用寄存器

往8位寄存器AH中写满D,输入:mov ah,0xDD

第十三课_8位和16位通用寄存器

写完上面的内容开始测试运行结果,按F8。可以看到32位寄存器EAX写满A

第十三课_8位和16位通用寄存器

再按F8单步运行,可以看到16位寄存器AX写满B,(即EAX中的低16位)。

第十三课_8位和16位通用寄存器

再按F8,可以看到8位寄存器AL写满C,(即EAX中的07位)。

第十三课_8位和16位通用寄存器

再按F8,可以看到8位寄存器AH写满D,(即EAX中的815位)。

第十三课_8位和16位通用寄存器

通过上面的讲解应该是了解了。​ 

写于2020.4.21 22:59