学习汇编记录Day0——寄存器组

因为大学的时候学习汇编语言,那时候喜欢了本战争的书(王树增的),很用心的看,就没咋学,但是又一直觉得汇编语言及其伟大,感觉汇编语言的人好牛逼,但是一直也没耐下心去看,大概懂几个指令,但是觉得没什么意义,所以决定重新学习一遍,才能释怀,否则心里嘎嘎难受!

不扯了,首先了解一下必要的概念。

寄存器组,逻辑地址,物理地址,内存单元。

1,寄存器组

16bit:  4+4+2+2+1+1 = 14个(每个都是16位)

4个数据寄存器:AX, BX, CX, DX;             4个段寄存器:ES, CS, SS, DS;

2个变址和指针寄存器:SI, DI;                   2个指针寄存器:SP, BP;

1个指令指针寄存器:IP;                            1个标志寄存器:Flags;

32bit:  4+6+2+2+1+1 = 16个

4个数据寄存器:eax, ebx, ecx, edx;      6个段寄存器:es, cs, ss, ds, fs, gs; #多了两个卡楞子寄存器

2个变址和指针寄存器:esi, edi;             2个指针寄存器:esp, ebp;

1个指令指针寄存器: eip;                   1个标志寄存器: eflags;

2,通用寄存器的作用:

     必须牢记,才能运用自如啊,走马观花的看一遍就过了的,后面一定会重返工。

3,物理地址

      16bit的系统有20根地址线,20根地址线编码是1M,16bit编码范围是64k,所以采用分段方法管理,段地址每一段形式都是

xxxx0h,(其实我觉得这句话很难理解,既然段地址都是xxxx0h了,还乘16干什么?又要左移4位么?可能是把结论写出来了。所以这个教程里这么写有点混淆,而在王爽版本的教科书里,则是很明确的指出两根地址线,每个16位,举得例子里,访问123C8h的地址,是1230h(段地址)*16 + 00c8h = 123C8h,书中特意就下面的公式进行了讲解,总之理解就好,每个人都有自己的理解)

然后通过偏移来找到具体位置。也就是用2根16位的寄存器来访问1M的内存空间,一个称为段地址,一个称为偏移地址。

                                                  即  “物理地址 = 段地址 x 16 + 偏移量

                                                         PA            也叫基础地址    也叫有效地址(EA)

一个物理地址可有多个逻辑地址,毕竟两个都是变量么。

4,16位段寄存器的引用

段、段、段、段、  4个段寄存器,重要。

 

深刻理解并牢记每个寄存器间的关系。

1)取指令的段寄存器和偏移量一定是CS和IP;

2)堆栈操作所用的段寄存器和偏移量一定是SS和SP;

3)串操作的目标操作数所用的段寄存器和偏移量一定是ES和DI;

其他,除了默认引用的寄存器,还可以强行改变为其他寄存器。

*****   一共5种模式,3个是定格的。

5,存储单元的内容

     大端小端的问题。以及字节,字的表示方法。牢记“高高低低”原则。

6,32位的内存管理模式

   提供了两种不同的工作方式:实模式和保护模式

实模式:32位与16位的内存管理是一致的。

保护模式:段地址可以长达32位,其值可以不是16的倍数,每个段的最大容量可达4G。段寄存器的值是表示段地址的“选择器”(Selector),用该“选择器”可从内存中得到一个32位的段地址,存储单元的物理地址就是该段地址加上段内偏移量,这与16位微机的物理地址计算完全不同。(我觉得越是不经意的,越是要理解)

猜你喜欢

转载自blog.csdn.net/WeiLuckyStrike/article/details/89323733
今日推荐