汇编语言
@[toc]
汇编语言
- 汇编语言的主体是汇编指令
操作
- 寄存器bx的内容送到ax中
机器指令
- 1000100111011000
汇编指令
- 汇编语言的核心是汇编指令,它决定了汇编语言的特性.
- 形式:
mov ax,bx
- 指令组成:
1.汇编指令:机器码的助记符,有一一对应的机器码
2.伪指令:没有对应的机器码,有编译器执行,计算机不执行
3.其他符号:如+,-,*,/等,由编译器识别,没有的对应的机器码
寄存器
- 寄存器:CPU中可以存储数据的器件,一个CPU中有多个寄存器.
-
ax,bx为寄存器的代号
在这里插入图片描述
指令和数据
- 在内存或者磁盘中,指令和数据没有任何区别,都是二进制信息
如 内存中的二进制信息 1000100111011000 计算机可以看作大小为89D8H的数据,也可以看作指令mov ax,bx
1000100111011000 -> 89D8H
1000100111011000 ->mov ax,bx
存储单元
- 存储器被划分成若干个存储单元
如一个存储器有128个存储单元
在这里插入图片描述
编号:0~127
- 计算机的存储器容量以字节为最小单位
- 一个存储单元 ->一个字节(Byte) ->8个二进制位(bit)
- 对于拥有128个存储单元的存储器,容量为128个字节
- 大容量的存储器一般用以下单位来计量容量
1KB = 1024B, 1MB = 1024KB, 1GB = 1024MB, 1TB = 1024GB
CPU对存储器的读写
- 读数据->指定存储单元的地址
在读写数据时指明哪种操作,读还是写
- 读写时与外部器件的信息交互:
存储单元的地址(地址信息);
器件的选择,读会写的命令(控制信息);
读或写的数据(数据信息);
总线
在这里插入图片描述地址总线
- CPU是通过地址总线来指定存储器单元的.
- 寻址能力:
一根导线可以传送两种:高电平,低电平,二进制表示为1,0
在这里插入图片描述
如:10根地址总线
则为 210 = 1024 最小为0 最大为1023
一个CPU有N个地址总线->地址总线的宽度为N->寻址能力则为2N
控制总线
- CPU对外部器件的控制是通过控制总线来进行的.
- 有多少根控制总线,意味着CPU提供了对外部器件的多少种控制
数据总线
-
CPU与内存或其他器件之间的数据传送是通过数据总线进行的.
-
数据总线的宽度决定了CPU和外界数据传递的速度.
-
8根数据总线一次可以传送8个bit(一个字节)
在这里插入图片描述 -
16根数据总线一次可以传递16个bit(两个字节)
在这里插入图片描述 -
读数据:
CPU通过地址总线将信息3发出.
CPU通过控制总线发出读取内存命令.
存储器将3号单元的数据8通过数据线送入CPU. -
写数据
CPU通过地址总线将地址信息3发出.
CPU通过控制总线发出写入内存命令.
CPU通过数据总线将26送入内存的3号单元中. -
命令计算机读写数据的汇编指令:
mov ax,[3]
检测点
- (1) 1个CPU的寻址能力为8KB,那么它的地址总线的宽度为多少?
N根的寻址能力为2N 一根地址总线寻址为21=2 10根地址总线就是210=1024byte=1KB 13根就是213=8KB 所以寻址能力为8KB的CPU,那么它的地址总线宽度为13根。
公式: 8 * 1024 = 2N = 23 * 210 = 2(3+10) => N = 13 - (2) 1KB的存储器有多少个存储单元.存储单元的编号从多少到多少?
1024个存储单元,从0开始
0 ~ 1024-1
=>0 ~ 1023
- (3) 1KB的存储器可以存储多少个bit.多少个Byte.
1KB = 1024多少个Byte * 1KB * 8bit = 8192bit = 1024Byte
- (4) 1GB、1MB、1KB分别是多少Byte.
1KB=1024Byte
1MB=1024 * 1024Byte
1GB=1024 * 1024 * 1024Byte
- (5) 8080、8088、 80286、 80386 的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为多少(KB)多少(MB)、多少 (MB)、多少 (GB)。
一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。
16根 216 = 64K
20根 220 = 1MB
24根 224 = 16MB
32根 232 = 4GB - (6) 8080、 8088、8086、 80286、 80386的数据总线宽度分别为8根、8根、16根、16
根、32根。则它们一次可以传送的数据为:多少(B)、多少(B)、多少 (B)、多少(B)、多少 (B)?8根数据总线一次可以传送8位二进制数据(即一个字节)。
80808bit = 1B
80888bit = 1B
808616bit = 2B
8028616bit = 2B
8038632bit = 4B
- (7) 从内存中读取1024字节的数据,8086至少要读 多少次,80386至少要读多少次?
8086的数据总线宽度为16根 一次最多可传送16个bit数据, 1024字节有1024 * 8个bit数据,所以需要读 1024 * 8/16 = 512次
80386的数据总线宽度为32根 一次最多可传送32个bit数据, 1024字节有1024 * 8个bit数据,所以需要读 1024 * 8/32 = 256次 - (8) 在存储器中,数据和程序以什么形式存放?
在存储器中指令和数据没有任何区别,都是二进制信息。
内存空间地址
在这里插入图片描述- 所有的物理存储器被看做一个由若干存储器组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,叫一段地址空间.CPU在这段地址空间中读写数据,实际上就是在对应的物理存储器中读写数据.
- 内存地址空间大小受CPU地址总线宽度的限制.8086CPU的地址总线宽度为20.可以传送 2020 个不同的地址信息(大小从0 ~ 2020 - 1)
- 不同的计算机的内存地址空间的分配情况是不同的.
- 对CPU来说,系统中的所有存储器的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制,这个逻辑存储器即是内存地址空间.
寄存器
- 在CPU上
运算器进行信息处理;
寄存器进行信息存储;
控制器控制各种器件进行工作;
内部总线连接各种器件,在它们之前进行数据传送; - 不同的CPU,寄存器的个数,结构是不同的,每个寄存器都有一个名称,这些寄存器是:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW.
通用寄存器
-
8086CPU的所有寄存器都是16位的.可以存放两个字节.AX,BX,CX,DX这4个寄存器通常来存放一般性数据,成为通用寄存器.
image - 8086CPU的上一代CPU中的寄存器为8位,为了向上兼容,8086的4个通用寄存器可以拆分成两个独立使用的8位寄存器
AX => AH AL
在这里插入图片描述
BX => BH BL
CX => CH CL
DX => DH DL
在这里插入图片描述
字在寄存器中的存储
- 8086CPU可以一次性处理两种尺寸的数据
字节:Byte 一个字节由8个bit组成,可以存放8位寄存器中.
字:word 一个字由两个字节组成,分别称为高位字节,低位字节.
在这里插入图片描述
几条汇编指令
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
- 问题2.1
指令执行后AX中的数据是多少?
因为AX为16位寄存器,只能存放4位十六进制的数据,所以最高的位的1不能放在AX中保存,ax中的数据为:044CH
- 问题2.2
指令执行后AX中的数据为多少?
程序段中的最后一条指令 add al,93H ,执行前 al中的数据为C5H,相加所得的值为:158H,但是al为8位寄存器,只能存放两位十六进制的数据,所以最高为的1 丢失,ax中的数据为:0058H
注意:此时的al是作为一个独立的8位寄存器来使用,和ah没有关系,CPU在执行这条命令时认为ah和al是两个不相关的寄存器
如果执行add ax,93H,低8位的进位会存储在ah中,CPU在执行这条指令认为只有一个16位寄存器ax,进行的是16位运算.
在进行数据传送或者运算时,要注意指令的两个操作对象的位数应该是一致的 如mov ax,bx mov bx,cx mov ax,18H mov al,18H add ax,bx add ax,20000
错误的指令为
cpp mov ax,bl ;在8位寄存器和16位寄存器中传送数据 mov bh,ax ;在16位寄存器和8位寄存器中传送数据 mov al,20000 ;8位寄存器最大可放的值为255的数据 add al.100H ;将一个高于8位的数据加到一个8位的寄存器中
检测点
- (1) 写出每条汇编指令执行后相关寄存器中的值。
mov ax,62627 AX=? ;转换为十六进制:F4A3H mov ah,31H AX=? ;将高8位值覆盖:31A3H mov al,23H AX=? ;将低8位值覆盖:3123H add ax,ax AX=? ;值相加:6246H mov bx,826CH BX=? ;赋值:826CH mov cx,ax CX=? ;ax赋值给cx:6246H mov ax,bx AX=? 826CH add ax,bx AX=? 04D8H mov al,bh AX=? 0482H mov ah,bl AX=? 6C82H add ah,ah AX=? D882H add al,6 AX=? D888H add al,al AX=? D810H mov ax,cx AX=? 6246H