最近在读王爽版的《汇编语言》,把需要记录的内容记录在这里。
第一章 基础知识
- 编译器:将汇编指令转换成机器指令的翻译程序。
- 一个CPU可以引出3种总线的宽度标志了这个CPU的不同方面的性能:
- 地址总线的宽度决定了CPU的寻址能力;
- 数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量;
- 控制总线的宽度决定了CPU对系统中的其他器件的控制能力。
- CPU对外部设备不能直接控制,直接控制这些设备进行工作的是插在扩展插槽上的接口卡。CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。
-
存储器分为两类:随机存储器(RAM)和只读存储器(ROM)。
随机存储器可读可写,但是必须带电存储,关机后存储的内容丢失;
只读存储器只能读取不能写入,关机后其中的内容不丢失。
第二章 寄存器
- 8086cpu所有寄存器都是16位的。
- 进行数据传送或运算时,指令的两个操作对象的位数应该是一致的。
- 地址加法器将两个16位的段地址和偏移地址合成一个20位的物理地址,物理地址=段地址16+偏移地址*。
- 段寄存器:CS、DS、SS、ES。
- CS为代码段寄存器,IP为指令指针寄存器。8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。读取一条指令后,IP中的值自动增加,以使CPU可以读取下一条指令。
- 在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。
- 修改CS:IP,使用jmp 段地址:偏移地址;修改IP,使用某一合法寄存器
第三章 寄存器(内存访问)
- 字单元:存放一个字型数据(16位)的内存单元,起始地址为N的字单元简称为N地址字单元。
- DS寄存器通常用来存放要访问的数据的段地址。
mov bx, 1000H
mov ds, bx
mov al, [0] ;将10000H(1000:0)中的数据读到al中
- 8086CPU不支持将数据直接送入段寄存器,需要寄存器进行中转。
- 段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。任何时刻,SS:SP指向栈顶元素。
- 8086CPU中,入栈时,栈顶从高地址向低地址方向增长。
- 栈空,SS:SP指向栈空间最高地址单元的下一个单元。
- push ax的时候,CPU先将SP=SP-2,使得SS:SP指向新的栈顶单元,然后再将寄存器中的数据送入SS:SP指向的内存单元处;pop ax是先读取SS:SP处的数据,后改变SP=SP+2。
- 如果使用10000H~1FFFFH这段空间当作栈段,初始状态是空的,此时SS=1000H,SP=0。
因为当栈中只有一个元素的时候SS=1000H,SP=FFFEH(2的倍数,8086CPU的入栈和出栈操作都是以字为单位进行的),唯一一个元素出栈后,SP=SP+2,SP=0。 - 一个堆栈最大为64KB,因为SP的范围是0~FFFFH,从栈空时候SP=0,再到栈满SP=0。