8086汇编笔记——概述

来源:互联网 发布:模拟退火算法实例 编辑:程序博客网 时间:2024/06/07 22:11

   8086汇编笔记——基础概述

一、简述

这个笔记是学习王爽老师写的汇编语言以后整理得出的,这是一本非常好的书,大家有兴趣可以买来看看。

感觉在学完汇编语言以后,最大的感受就是对计算机工作的过程有个大致了解,照着另一本书,抄写了一个简单的Linux。总之汇编语言是个特别好玩的东西,所以我把我的学习笔记放到这里,希望和大家一起学习。毕竟工科,毕竟语文有限,不对的地方还希望大家指出

二、基础知识

1.说说历史

早年计算机刚出来的时候,如果要给计算机编写一个程序是非常麻烦的,那时候使用的不是键盘,而是打了孔的纸条,用是否打孔表示0 1,这种方式肯定不行,但是即使是用键盘把0 1打出来相信也很复杂吧,虽然说我们的计算机最后识别的也就是0 1,但是对于人来说,一堆0 1根本无法识别,所以才有了汇编语言,我们把这些叫做机器指令的0 1,加上助记符,汇编指令与机器指令的区别只是在表示方式上,而不是现在的高级语言,完全就不一样了。

2.汇编语言

例如我们把1000100111011000 写成mov ax, bx,就比原来的0 1序列好记忆多了,可能很多人觉得明明就有高级语言C,为啥依然没有放弃汇编呢?就我写操作系统的经验来看,至少现在操作系统的启动仍然离不开汇编。

汇编语言是ASCII写的,计算机是不认识,所以需要由编译器将这种指令翻译成0 1

3.汇编语言组成

汇编指令:机器码的助记符,比如上面的mov

伪指令:没有对应的机器码,汇编编译器执行

其他符号:例如 + , - ,* 、 /这些也是由编译器识别

4.存储器

现代的计算机,一般是由CPU内部的寄存器,高速缓存(一般买CPU上面写的L1, L2什么的),内存,硬盘或者是光盘,其实还有就是显卡或者网卡都有自己的缓存,然后是BIOS的ROM

我们在计算机中,指令和数据并没有什么区别,就比如1101001这个串,可能是一个ASCII,可以是一个整数,甚至是一个指令,主要是看我们把这个数据往CPU内部的哪个器件放,放到ALU中就是数字,放到地址加法器中就是地址,放到指令队列中就是指令。

我们的存储器,都是一个一个的小格子构成,一个小格子只能代表0或者1,但是我们实际使用中,基本不会单独使用这一个,而是8个小格子一起形成一个Byte,通常将讲就是字节,也就是8位一个字节, 1 B = 8bit,这个B,还有更大的单位例如KB,MB,GB,这下是不是就很熟悉了。

5.CPU的读写与总线

首先要说明的是存储器,有自己的地址,一般从0开始编号。当CPU进行读写操作的时候,首先是通过地址总线访问指定地址,然后通过控制总线传输读操作指令,然后通过数据总线,把得到的数据传回CPU。这里涉及到三种总线。

主要说说地址总线,8086是20位地址总线,这是什么意思呢?不急,先说说并行传输串行传输,串行传输很常见,比如USB接口,数据时一个接一个的发过去的,但是并行接口是单位时间内所有数据同时发过去,20位地址总线,单次就能发送20个0 1过去,最大就是11111.,,,111,这个数字的大小就是1MB(计算机内部最小的单位是Byte不是bit,大家可以自己计算一下),所以说我们的8086能够访问的内存大小是1M。

我们现在的电脑有32位,有64位,32位的地址总线,大小就是4GB,这就是为什么32位的计算机内存不能大于4GB的原因,因为后面的空间CPU无法找到。

当然数据总线和地址总线类似,8086的数据总线宽度为16位,

控制总线是不同于上述两种的,控制总线根数越多,CPU对外界的控制能力越强

6.内存空间简述

计算机的外设,比如键盘,如果我们要读取键盘的按键,我们需要让CPU向I/O端口发出指令(具体的以后我们通过代码来实现)

刚刚给大家说的存储器的编号从0开始,但是CPU可以访问到显存的空间,以及BIOS的空间,那么这是怎做到的?

CPU并不会完全把我们的内存条当做主存储器,而是把各种存储器,放在一起当做一个逻辑的内存,也就是CPU工作是使用的内存,并不完全是我们的内存条,还有其他地方。虽然这些存储器在物理上是独立的,但是它们都和地址总线相连,CPU读写的时候,都会对它们通过控制总线发出指令。一般来说8086CPU内部逻辑存储器的划分,如图

假设要在屏幕上输出什么,直接向显存所在的地址写入数据即可。但是显存并不在我们的内存条里面,而是显卡内部通过地址总线和CPU连在一起,一定要注意CPU寻址是逻辑存储空间。

0 0
原创粉丝点击