汇编语言(第3版)王爽著-学习笔记

第一章【基础知识】:

机器语言是机器指令的集合,机器指令展开来说就是一台机器可以正确执行的命令。

汇编指令:MOV AX,BX

操作:寄存器BX的内容送到寄存器AX中

汇编指令:MOV AX,【3】

操作:传送3号单元的内容送到寄存器AX中

伪指令:没有对应的机器码,由编译器执行,计算机并不执行。

汇编指令:机器码的记助符,有对应的机器码。

CPU要工作必须向它提供指令和数据,指令和数据在存储器中存放,也就是我们平时说的内存,CPU不能使用磁盘上的数据。

CPU要从内存中读数据,首先要指定存储单元的地址。

存储器被划分为若干个存储单元从0开始顺序编码,例如一个存储器有128个存储单元,它可以存储128个Byte,编码从0~127。汇编语言(第3版)王爽著-学习笔记_第1张图片

最小信息单位bit(比特),也就是一个二进制位。一个存储单元可以存储8个bit,即8位二进制数。8个bit组成一个Byte,也就是一个字节。微型机存储器的存储单元可以存储一个Byte,即8个二进制位。

1KB=1024B  1MB=1024KB  1GB=1024MB  1TB=1024GB

地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址。一根导线可以传送的稳定状态只有1高电平和0低电平两种,10根导线可以传送10位二进制数据,而10位二进制数可以表示2的10次方个不同的数据。一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N,这样的CPU最多可以寻找2的N次方个存储单元。例,1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。【解析:1KB=1024B,8KB=1024B*8=2^N, N=13】

例题,8080、8088、80286、80386的地址总线宽度分别位16根、20根、24根、32根,则他们的寻址能力分别为:64(KB)、1(MB)、4(MB)、4(GB)。【解析:一个内存单 元=1Byte】

8根数据总线一次可以传送8位二进制数据(即一个字节)。例,8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根,则他们一次可以传送的数据为:1B、1B、2B、2B、4B.

例,从内存中读取1024字节的数据,8086至少读512次,80386至少读256次。【解析:8086的数据总线宽度为16根(即一次传送的数据为2B) 1024B/2B=512,同理1024B/4B=256。】

在存储器中,数据和程序以二进制形式存放。【在存储器中指令和数据没有任何区别,都是二进制信息。】

地址总线的宽度决定了CPU的寻址能力;

数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量;

控制总线的宽度决定了CPU对系统中其他器件的控制能力。

内存地址空间的大小受CPU地址总线宽度的限制,8086CPU的地址总线宽度为20,可以传送2^20个不同的地址信息,即可以定位2^20个内存单元,则8086PC的内存地址空间大小为1MB。

 

第二章【寄存器】:

2-1通用寄存器

一个典型的CPU由运算器(信息处理)、控制器(控制各种器件进行工作)、寄存器(信息存储)等器件构成,这些器件靠内部总线相连。CPU最主要的部件是寄存器,通过改变各种寄存器中的内容来实现对CPU的控制。

8086有14个寄存器,都是16位,可以存放2个字节

汇编语言(第3版)王爽著-学习笔记_第2张图片

AX的低八位(0位-7位)构成了AL寄存器,高八位(8-15)构成AH寄存器。

字:010011100(高位字节)0100000(低位字节),AX存的值为4E20H,AH存的4EH,AL存的20H。  一个字由两个字节组成。

注 0100111000100000 可表示成4(0100)、E(1110)、2(0010)、0(0000)四位十六进制数。

 

在进行数据传送或运算时,要注意指令的两个操作对象的为啥应当是一致的,如下面的指令都是错误的:

mov ax,bl    (在8位寄存器和16位寄存器之间传送数据)

mov bh,ax    (在16位寄存器和8位寄存器之间传送数据)

mov al,2000 (8位寄存器最大可存放值位255的数据)

add al,100H  (将一个高于8位的数据加到一个8位寄存器中)

 

CPU访问内存单元时,要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间,每个内存单元在这个空间都有唯一的地址,我们将这个唯一的地址称为物理地址。CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。

8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力,而8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址位16位。8086CPU采用一种在内部用两个16位地址(段地址+偏移地址)合成的方法来形成一个20位的物理地址。

汇编语言(第3版)王爽著-学习笔记_第3张图片

    物理地址=段地址SAx16+偏移地址EA   或   物理地址=基础地址+偏移地址

汇编语言(第3版)王爽著-学习笔记_第4张图片

“段地址x16”更有一种说法是左移4位(指二进制位)。一个数据的二进制形式左移1位,相当于该数据乘以2;左移N位,相当于该数据乘以2的N次方。

左移运算的理解:例,一个数据为2H,二进制形式为10B,对其进行左移运算有:

左移位数 二进制 十六进制 十进制
0 10B 2H 2
1 100B 4H 4
2 1000B 8H 8
3 10000B 10H 16
4 100000B 20H 32

段地址x16必然是16的倍数,一个段的起始地址一定是16的倍数;偏移地址为16为,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。CPU可以用不同的段地址和偏移地址形成同一个物理地址。偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻 64KB 个内存单元。

例,(1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU 的寻址范围为0010H到1000FH。【解析:物理地址=SA*16+EA,EA的变化范围为0H^ ffffH ;物理地址范围为(SA*16+0H) ~ (SA*16+ffffH)现在SA=0001H,那么寻址范围为(0001H*16+0H)' ~ (0001 H*16+ffffH)=0010H~1000fH】(2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为1001H ,最大为2000H。当段地址给定为1001H 以下和2000H 以上, CPU无论怎么变化偏移地址都无法寻到20000H单元。【解析:物理地址= SA*16+EA;20000H = SA*16+EA;SA= (20000H- EA) /16=2000H-EA/16;EA取最大值时, SA=2000H-ffffH/16=1001H;SA为最小值,EA取最小值时,SA=2000H-0H/16=2000H,SA为最大值】

2-2段寄存器(CS、DS、SS、ES)

CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。8086机中,任意时刻,CPU将 CS:IP 指向的内容当作指令执行。

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(汇编语言(第3版)王爽著-学习笔记)