参考书籍《汇编语言》王爽 著/清华大学出版社
一、基础知识
1、汇编指令是机器指令的助记符,同机器指令一一对应
2、每一种CPU都有自己的汇编指令集
3、CPU可以直接使用的信息在存储器中存放
4、在存储器中指令和数据没有任何区别,都是二进制信息
5、存储单元从零开始顺序编号
6、一个存储单元可以存储8个bit, 即8位二进制数
7、1Byte = 8bit ; 1KB = 1024B ; 1MB = 1024KB ; 1GB = 1024MB
8、CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行下面3类信息的交互:
9、那么CPU是通过什么将地址、数据和控制信息传到存储器芯片中的呢?电子计算机能处理、传输的信息都是电信号,电信号当然要用导线传送。
在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。
总线从物理上来讲,就是一根根导线的集合。根据传送信息的不同,总线从逻辑上又分为3类:地址、控制、数据
每一个CPU芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。
一个CPU可以引出3种总线的宽度标志了这个CPU的不同方面的性能。
10、做个小练习
答案:
1、一个CPU 的寻址能力为8KB,那么它的地址总线的宽度为__13__
2、8080,8088,80286,80386 的地址总线宽度分别为16根,20根,24根,32根.那么他们的寻址能力分别为多少__64__KB, __1__MB,__16__MB,__4__GB
3、8080,8088,8086,80286,80386 的数据总线宽度分别为8根,8根,16根,16根,32根.那么它们一次可以传输的数据为:__1__B,__1__B,__2__B,__2__B,__4__B
4、从内存中读取1024字节的数据,8086至少要读__512__次,80386至少要读取__256__次.
二、寄存器
1、从物理结构来讲,CPU包括运算逻辑部件、寄存器部件和控制部件等
2、对程序员来说,CPU中最主要部件是寄存器,可以通过改变寄存器的内容来实现对CPU的控制;
不同的cpu,寄存器的个数、结构是不同的。比如8086是16位结构的cpu,
8086有14个16位的寄存器,每个可以存放2个字节。
3、通用寄存器的作用
举例说明,在内存中有块红色内存空间的值是3,现在想把它的值加1,并将新的计算结果存储到蓝色内存空间,如图所示
那么这个在cpu的执行步骤是怎样的呢?
1)、cpu首先会将红色内存空间的值放到AX寄存器中:mov ax, 红色内存空间
2)、然后让AX寄存器与1相加:add ax, 1
3)、最后将值赋值给内存空间:mov 蓝色内存空间,ax
4、数据寄存器的兼容:
5、汇编指令举例
接下来看一下CPU执行下图中的每条指令后,对寄存器中的数据进行的改变:
说明,假设原AX中的值:0000H, 原BX中的值:0000H
为什么程序段中最后一条指令 add ax,bx, 在执行前ax和bx中的数据都为8226H, 相加后所得值为044CH, 而不是:1044CH ?
因为ax为16位寄存器,只能存放4位16进制的数据,所以最高位的1不能在ax中保存,ax最后保存的数据为:044CH
再来看一段程序段的指令,注意高位和低位寄存器的计算
最后一个指令 add al,93H后AX中的数据为0058H, 为啥?
执行前,al中的数据为C5H, 相加93H为158H, 但是al为一个独立8位寄存器,和ah没有关系,CPU在执行这条指令时认为ah和al时两个不相关的寄存器。
所以只能存放两位十六进制的数据,所以最高位的1丢失。
另外,在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的,例如下图这些是正确的指令:
----------------------------------------
而下面的指令等都是错误的指令