返回列表 发帖

[分享] 汇编基础一日一学习1

因为汇编指令,寄存器,标志位等我觉得没什么必要给大家在列成一节课程去讲,即使去讲。也没什么成效。因为一节课程,大家根本就不可能消化掉。。

   我想到了一个方法。那就是每天我给大家讲解一个汇编指令。每天大家只需几分钟的时间上论坛来消化掉一个,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]
   
   
   不要觉得简单,问题很多往往处在简单的一瞬间。。。

   记得把写完后的答案。回到论坛的帖子中。。。



   翻到这里不要往下翻了。。。    呵呵,不然就看到别的同学的答案了。。 记住一定要学会自觉,只有这样技术才有提高。。。


答案回复可见

本帖隐藏的内容需要回复才可以浏览
希望做站长本人的学生请点击
http://www.3ast.com/viewthread.php?tid=13841
QQ790653916只负责SEO以及收费教学等方面联系,他人勿扰

于智者同行,你会不同凡响;与高人为伍,你会登上巅峰

每天学习。。(*^__^*) 嘻嘻……

TOP

我想的是:就第3个是对的吧!

TOP

来学习一下啊!!

TOP

TOP

1错,嘎嘎,看看对不对
缘起缘落,淡看苍生,谁人与我笑红尘?是对是错,不置乾坤,无人伴我逐星辰!

TOP

第二个 是错的吧

TOP

我是来学习的。

TOP

1.2好像是错的吧。

TOP

学些学习······

TOP

学习学习

TOP

1.错。2.错。3.对

TOP

没学懂咦。。。

TOP

学习了  谢谢

TOP

see 一下下啦

TOP

1、3正确,2错误是因为50H是立即数

TOP

谢谢老师,答案是3

TOP

1,2是错的,3是对的
1,2错在源操作数不是存储单元
不过有个疑问:8个寄存器算存储单元吗?
如果说寄存器也是存储单元的话,那么1也是正确的

TOP

我要看看哈。

TOP

学习~!~!~!~!~!

TOP

返回列表