- 帖子
- 3852
- 积分
- 13044
- 威望
- 16780
- 金钱
- 36761
- 在线时间
- 1139 小时
|
因为汇编指令,寄存器,标志位等我觉得没什么必要给大家在列成一节课程去讲,即使去讲。也没什么成效。因为一节课程,大家根本就不可能消化掉。。
我想到了一个方法。那就是每天我给大家讲解一个汇编指令。每天大家只需几分钟的时间上论坛来消化掉一个,10天就10个。100天就是100个。而且因为仅是一个,这样大家100%能记住。。而且后面我会留一些小作业。。大家写完后一定要把相应的小作业写完。。
每天多抽出一分钟,让你的人生不留遗憾......
寄存器是什么?大致说寄存器是cpu的部件(一般用于信息储存)。 也可以说寄存器是我们可以进行指令读写的部件。 我们目前80386的cpu的每个寄存器是4个字节的。也就是32位。(也可以说80386cpu有32条地址线)。8个通用寄存器 eax ebx ecx edx esp ebp esi edi 。 也就是我们cpu 每次读取内存中二进制数据的时候,每次只能读取32个二进制位的数据。因为我们cpu是通过数据总线去读取的。80386数据总线32根。。
1.lea指令。
此指令是将源操作数(也就是存储单元)的有效地址(也可以叫做偏移地址)传送到目的操作数。。 举例
lea eax, [ebp-4C]
目的操作数 源操作数
这里有两个注意的地方:
(1)源操作数必须是一个存储单元。不能是立即数。
(2)目的操作数必须是8个通用的寄存器。eax ebx ecx edx esp ebp esi edi
讲解:此示例表示的存储单元的有效地址是 ebp-4c 这个结果被传送到eax寄存器中。
课外知识: 这个指令一般被用于我们程序中子程序堆栈分配来确定存储单元的有效地址。因为我们局部变量分配内存,我们不可能确定其相应的地址,因为堆栈分配是按照你声明局部变量的大小来分配的。所以我们只能采用lea 指令来获取相应内存单元的有效地址并传送到相应的目的操作数中。
存储单元 存储单元一般应具有存储数据和读写数据的功能,一般以8位二进制作为一个存储单元,也就是一个字节。每个单元有一个地址,是一个整数编码,可以表示为二进制整数。程序中的变量和主存储器的存储单元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据。指针的内容是存储地址
在存储器中有大量的存储元,把它们按相同的位划分为组,组内所有的存储元同时进行读出或写入操作,这样的一组存储元称为一个存储单元。一个存储单元通常可以存放一个字或若干个字节;存储单元是CPU访问存储器的基本单位。
小作业:
判断是否正确
1. lea eax, edx
2. lea eax, 50H
3. lea esp, [ebp-30]
不要觉得简单,问题很多往往处在简单的一瞬间。。。
记得把写完后的答案。回到论坛的帖子中。。。
翻到这里不要往下翻了。。。 呵呵,不然就看到别的同学的答案了。。 记住一定要学会自觉,只有这样技术才有提高。。。
答案回复可见
本帖隐藏的内容需要回复才可以浏览 |
|