资源描述
-/
微机重点总结
第一章
计算机中数的表示方法:真值、原码、反码(-127—+127)、补码(-128—+127)、BCD码,1000的原码为-0,补码为-8,反码为-7。
ASCII码:7位二进制编码,空格20,回车0D,换行0A,0-9(30-39),A-Z(41-5A),a-z(61-7A)。
模型机结构介绍
1、 程序计数器PC:4位计数器,每次运行前先复位至0000,取出一条指令后PC自动加1,指向下一条指令;
2、 存储地址寄存器MAR:接收来自PC的二进制数,作为地址码送入存储器;
3、 可编程只读存储器PROM
4、 指令寄存器IR:从PROM接收指令字,同时将指令字分别送到控制器CON和总线上,模型机指令字长为8位,高4位为操作码,低4位为地址码(操作数地址);
5、 控制器CON:(1)每次运行前CON先发出CLR=1,使有关部件清零,此时PC=0000,IR=0000 0000;(2)CON有一个同步时钟输出,发出脉冲信号CLK到各部件,使它们同步运行;(3)控制矩阵CM根据IR送来的指令发出12位控制字,CON=CPEPLMER LIEILAEA SUEULBIO;
6、 累加器A:能从总线接收数据,也能向总线送数据,其数据输出端能将数据送至ALU进行算数运算(双态,不受E门控制);
7、 算数逻辑部件ALU:当SU=0时,A+B,当SU=1时,A-B;
8、 寄存器B:将要与A相加或相减的数据暂存于此寄存器,它到ALU的输出也是双态的;
9、 输出寄存器O:装入累加器A的结果;
10、 二进制显示器D。
中央处理器CPU:PC、IR、CON、ALU、A、B;存储器:MAR、PROM;输入/输出系统:O、D。
执行指令过程:指令周期(机器周期)包括取指周期和执行周期,两者均为3个机器节拍(模型机),其中,取指周期的3个机器节拍分别为送地址节拍、读存储节拍和增量节拍。
控制器:环形计数器(RC)、指令译码器(ID)、控制矩阵(CM)、其他控制电路。
微型计算机硬件基本结构:算术逻辑单元ALU、控制器、存储器、输入/输出设备。
微型机工作原理:存储程序,按地址顺序执行。
第二章
微处理器基本结构和功能:
1、内部寄存器阵列(通用寄存器和专用寄存器);
2、算数逻辑运算单元;
3、控制器(指令寄存器、指令译码器和各种定时与控制信号产生电路);
4、现代微处理器中还集成了浮点运算部件及高速缓冲寄存器cache。
8086/8088微处理器结构:
8086/8088
CPU
总线接口单元BIU(完成取指令和存取数据)
执行单元EU(负责分析指令和执行指令)
段寄存器(CS、SS、DS、ES)
指令指针寄存器IP
地址加法器
指令队列
内部控制逻辑
输入/输出控制电路
算术逻辑单元ALU
寄存器组
标志寄存器FR
暂存器
执行部件EU的组成:
1、ALU(算术逻辑单元);
2、寄存器组:
(1)通用寄存器:4个16位通用寄存器(AX、BX、CX、DX)或8个8位寄存器(AL、AH、BL、BH、CL、CH、DL、DH),其中AX为累加器,BX为基址寄存器,CX为计数寄存器,DX为数据寄存器;
(2)专用寄存器:两个16位指针寄存器SP和BP,两个16位变址寄存器SI和DI,其中,SP是堆栈指针寄存器,由它和堆栈段寄存器SS一起来确定堆栈在内存中的位置,BP是基址指针寄存器,通常用于存放基地址,SI是原变址寄存器,DI是目的变址寄存器,都用于指令变址寻址方式;
AX
BX
CX
DX
AH
AL
BH
通用寄存器
BL
CH
CL
DH
DL
SP
专用寄存器
BP
SI
DI
(3)标志寄存器FR:为16位寄存器,其中7位未使用,使用的9个标志位可分为两类:状态标志(CF、PF、AF、ZF、SF、OF),控制标志(TF、IF、DF),
15-12
11
10
9
8
7
6
5
4
3
2
1
0
OF
DF
IF
TF
SF
ZF
AF
PF
CF
① CF—进位标志位:做加法最高位有进位或减法最高位有借位时为1,反之为0;
② PF—奇偶标志位:运行结果低8位中1的个数为偶数时为1,反之为0;
③ AF—半进位标志位:低四位有向高四位的进位或借位时为1,反之为0;
④ ZF—零标志位:运算结果为0时置1;
⑤ SF—符号标志位:与运算结果最高位相同;
⑥ OF—溢出标志位:字节运算结果范围超过-128~+127或者字运算结果范围超出-32768~+32767时置1,溢出判断:同符号数相加,结果的符号位与之不同(符号位发生变化);
⑦ TF—陷阱标志位:置1时8086/8088进入单步工作方式,通常用于程序调试;
⑧ IF—中断允许标志位:置1时处理器响应可屏蔽中断;
⑨ DF—方向标志位:置1时串操作指令的地址修改为自动减量方向。
总线接口部件BIU的组成:
1、段寄存器:4个16位段寄存器DS(数据段寄存器)、CS(代码段寄存器)、ES(附加段寄存器)、SS(堆栈段寄存器);
2、16位指令寄存器IP:CPU每取一个指令字节,IP自动加1,IP总是指向下一条要取出的指令代码的首地址;
3、20位地址加法器;
4、6字节(8088为4字节)指令队列缓冲器。
BIU与EU的动作协调原则:BIU和EU是并行工作的,按流水线技术原则管理
1、当8086指令队列中有两个空字节(8088中一个)时,BIU自动把指令取到队列中;
2、EU从指令队列取指,执行,执行过程中如要访问存储器或I/O,而此时BIU正在取指,完成取指后响应EU的总线请求;
3、指令队列已满,EU又没有总线访问,BIU进入空闲状态;
4、执行转移、调用和返回指令时,指令队列中的原有内容自动消除,BIU往指令队列中装入另一程序段中的指令。
存储器组织:
1、物理地址:
物理地址=段地址16+偏移量
任何一个存储单元的20位实际地址称为物理地址,又称绝对地址,同一物理地址可以有不同的段地址和偏移量。
2、逻辑地址:
段地址:偏移地址
程序中出现的地址,由段地址和段内偏移量组成,段地址和段偏移量都是16位二进制数。
3、一般程序存放在代码段中,段地址来源于代码段寄存器CS,偏移地址来源于指令指针寄存器IP;当涉及一个堆栈操作时,段地址在堆栈段寄存器SS中,偏移地址来源于栈指针寄存器SP;当涉及一个操作数时,则数据段寄存器DS或附加段寄存器ES作为段寄存器,而偏移地址由16位的偏移量得到,16位的偏移量取决于指令的寻址方式。
4、采用段寄存器的优点:
(1)、解决了16位寄存器如何访问大于64KB内存空间的问题;
(2)、可以实现程序的重定位。
总线:总线是传送信息的公共导线,一般由地址总线、数据总线和控制总线组成;
1、地址总线(AB),一般是单向总线,传送CPU发出的地址信息;
2、数据总线(DB),是双向总线,可以从CPU传送数据信息到外设和主存,也可以从主存和外设向CPU传送数据;
3、控制总线(CB),其中每根线上的方向是一定的,它们分别传送控制信息、时序信息和状态信息。
8086/8088微处理器的工作模式:
1、最小工作模式MN/MX=VCC:(单CPU系统)系统中只有一个8086/8088微处理器,所有的总线控制信号都直接由8088/8086产生。
2、最大工作模式MN/MX=GND(多CPU系统):8086/8088要通过总线控制器8288来形成各种总线周期,控制信号由8288供给。
指令周期、总线周期、时钟周期:
1、指令周期:执行一条指令所需要的时间,执行每一条指令的时间不同;
2、总线周期:访问一次总线的时间,CPU从存储器或I/O端口存取一次所需要的时间,一个基本的总线周期由4个T状态T1、T2、T3、T4组成,基本总线周期包括存储器的读或写,输入/输出的读或写,中断响应,若存储器或外设速度较慢,不能及时送上数据(T3状态数据没准备好),则通过READY线通知CPU,CPU在T3前沿检测READY,若READY=0,则在T3结束后自动插入1个或几个TW,并在每个TW的前沿处检测READY,等到RAEDY变高后,自动脱离TW进入T4;
3、时钟周期:T状态,是微机系统工作的最小时间单位,取决于系统的主频率,系统完成任何操作所需要的时间均是时钟周期的整数倍。
8086/8088引脚信号和功能:8086/8088都有16位数据线,20位地址线,直接寻址能力为1MB,引脚数为40,其中32个引脚在两种工作模式下的名称和功能是相同的,还有8个引脚在不同的工作模式下,具有不同的名称和功能。双功能引脚的功能转换,一是通过分时复用,即同一引脚在总线的不同时钟周期内其功能不同;二是根据工作模式定义引脚的功能。
两种模式下,名称和功能相同的32个引脚:
1、VCC、GND:单一+5V电源,两个地;
2、AD15~AD0:地址/数据复用总线,双向,三态(8088中A15~A8不复用,输出,三态);
3、A19/S6~A16/S3:地址/状态线复用,输出,三态;
4、NMI:非屏蔽中断,输入,高电平有效,
INTR:可屏蔽中断,输入,高电平有效;
5、RD:读信号,输出,三态,低电平有效;
6、CLK:时钟信号,输入;
7、RESET:复位信号,输入(至少保持4个时钟周期的高电平),复位信号输入后,CPU立即停止操作,清FR、DS、ES、SS、IP及指令队列,同时置CS为0FFFFH,当RESET变为低电平时,CPU从FFFF0单元开始启动;
8、READY:“准备好”信号,输入;
9、TEST:测试信号,输入,低电平有效;
10、MN/MX:最小/最大模式控制引脚,输入,MN/MX=VCC时为最小工作方式(单CPU),MN/MX=GND时为最大工作方式(多CPU);
11、BHE/S7:高8位数据线允许/状态信息复用引脚,输出。
最小工作模式的24~31引脚(括号中是最大工作模式下的引脚功能):
1、INTA(QS1):中断响应,输出,三态,低电平有效,该信号为两个连续负脉冲;
2、ALE(QS0):地址锁存允许信号,输出,三态,高电平有效;
3、DEN(S0):数据允许信号,输出,三态,低电平有效;
4、DT/R(S1):数据发送/接收控制,输出,三态;
5、M/IO(S2):存储器/IO控制,输出,三态(8088中为M/IO);
6、WR(LOCK):写信号,输出,三态,低电平有效;
7、HOLD(RQ/GT0):请求占用总线信号,输入,高电平有效(总线保持请求信号);
8、HLDA(RQ/GT1):同意让出总线信号,输出,高电平有效(总线保持响应信号)。
最大工作模式的24~31引脚:
1、QS1和QS2,指令队列状态信号,输出
2、S2、S1、S0:总线周期状态信号,输出,三态;
3、LOCK:总线封锁信号,输出,三态,低电平有效;
4、RQ/GT1、RQ/GT0:双向总线请求/允许信号,双向。
总线空操作:CPU与存储器或I/O端口之间没有数据传送,总线空操作并不意味着CPU不工作,只是总线接口部件BIU不工作,总线执行部件EU仍在工作,实质上,总线空操作期间是BIU对EU的一种等待。
地址线为什么需要锁存:由于8086系统的地址的低16位与数据引脚公用,地址信号与数据信号是分时复用这些引脚的。这样先送出的地址信号可能被后送出的数据信号所代替,因此要有一个地址锁存器来保存先送出来的地址信息。锁存器主要用来锁存地址的低16位。
第三章
机器指令:
1、操作码—表示该指令所要完成的操作(二进制代码);
2、地址码—操作数或操作数的地址。
8086/8088汇编语言指令:
[标号] 指令助记符 [操作数表] [;注释]
指令的寻址方式:
1、顺序寻址方式;2、跳转寻址方式。
8086/8088操作数的寻址方式:
1、立即数寻址:
MOV AL,80H MOV AX,1090H
操作数就包含在指令当中,紧跟在操作码之后;立即数为常量,常量可以是二进制数、十进制数、十六进制数(以A~F开头则要加0)、字符串(用单或双引号括起的字符,表示对应的ASCII码值,如’A’=41H),还可以是标识符表示的符号常量、数值表达式等;立即数可以是8位、16位;立即数只能是整数,不能是小数、变量或其它类型数据;立即数只能作原操作数。
2、寄存器寻址:
INC CX ROL AH,1
MOV AX,BX MOV AX,1090H
寄存器寻址方式的操作数存放在CPU内部的寄存器中,它可以是8位寄存器AH/AL/BH/BL/CH/CL/DH/DL,也可以是16位寄存器AX/BX/CX/DX/SI/DI/BP/SP,另外,操作数还可以存放在4个段寄存器CS/DS/SS/ES中;因为操作数存放在CPU内部,取操作数时不需要访问存储器,因而执行速度较快;在一条指令中,可以对源操作数采用寄存器寻址,也可以对目标操作数采用寄存器寻址,还可以两者都采用寄存器寻址方式;在双操作数指令中,操作数之一必须是寄存器寻址,汇编语言在表达寄存器寻址时使用寄存器名。其实质就是指它存放的内容(操作数)。
3、存储器寻址:操作数存放在主存储器中,指令中给出的是有关操作数所在存储器单元的地址信息。
(1)直接寻址:
MOV AX,DS:[2000H]; 等价于MOV AX,[2000H]
MOV ES,ES:[3000H]; 物理地址=(ES)16+3000H
操作数地址的16位偏移量(有效地址)直接包含在指令中,它与操作码一起存放在代码段区域,操作数一般存放在数据段区域,系统默认DS为数据段寄存器;8086/8088中允许段超越,还允许操作数放在代码段、堆栈段或附加段中,此时要在指令中,指明段超越,格式为
段寄存器:[偏移地址]
与立即数寻址不同的是,直接寻址的地址要放在方括号内。
(2)寄存器间接寻址:操作数在存储器中,但是操作数的有效地址包含在SI、DI、BP、BX四个寄存器中,如没有特殊说明,用寄存器SI、DI和BX间接寻址时,对应的段寄存器是DS,如:
MOV AX,[SI]
假设(SI)=2000H,原操作数物理地址=(DS)16+(SI)=32000H;
如果用寄存器BP间接寻址时,对应的段寄存器是SS,如:
MOV AX,[BP]
原操作数物理地址=(SS)16+(BP);
寄存器间接寻址指令中也可以使用段超越,如:
MOV AX,DS:[BP]
原操作数物理地址=(DS)16+(BP);
(3)寄存器相对寻址:操作数在存储器中,由指定的寄存器内容,加上指令中给出的8位或16位偏移量作为操作数的有效地址,即带位移量的寄存器间接寻址;可以作为寄存器相对寻址的四个寄存器是SI、DI、BX、BP(同寄存器间接寻址),若用SI、DI和BX作寄存器相对寻址,则操作数默认在数据段,如:
MOV AX,[SI+4000H]
原操作数物理地址=(DS)16+(SI)+4000H;
指令中可以使用段超越,若用BP作为寄存器相对寻址,则SS为默认的段寄存器地,如:
MOV AX,COUNT[BP]
原操作数物理地址=(SS)16+(BP)+COUNT。
(4)基址加变址寻址:把BX和BP看作基址寄存器,把SI、DI看作变址寄存器,把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容,作为操作数的有效地址,即为基址加变址寻址方式,如:
MOV AX,[BX+SI]
原操作数物理地址=(DS)16+(BX)+SI;
当基址寄存器为BP时,默认的段地址寄存器为SS,如:
MOV AX,[BP][SI]
(5)相对基址变址寻址:基址加变址寻址加上一个相对位移量,如:
MOV AX,MASK[BX][SI]
MOV BH,4[DI][BP]
MOV BH,[BP+DI+4]
常用语法规则:
立即数不能作目的操作数;
代码段寄存器CS不能作目的操作数;
两个操作数不能同时是存储器寻址;
堆栈操作都是十六位的操作;
两个操作数的类型必须匹配;
8086/8088寄存器间接寻址地址是BX、BP、SI、DI之一;
数据传送类指令:
1、通用数据传送指令:
MOV OPRD1,OPRD2
功能:把一个字节或一个字从源操作数PORD2送至目的操作数OPRD1,源操作数不改变;
注意事项:
(1)原和目的操作数的类型要一致,即同时为字节或同时为字;
(2)不允许对IP进行操作,CS不能作为目的操作数;
(3)两个操作数中,除立即寻址外必须有一个为寄存器寻址,即两个存储器操作数之间不允许直接进行信息传送;
(4)两个段寄存器之间不能直接传递信息,也不允许用立即数寻址方式为段寄存器负初值;
(4)目的操作数不能用立即寻址方式;
MOV可以实现的传送:
立即数 寄存器
立即数 存储单元
寄存器 寄存器
寄存器 存储器
寄存器 段寄存器
存储器 段寄存器
2、交换传送指令:
XCHG OPRD1,OPRD2
功能:操作数OPRD1的内容与操作数OPRD2的内容交换;
OPRD1和OPRD2可以是通用寄存器和存储单元(两个操作数不能同时为存储单元),可以采用除立即数寻址外的各种寻址方式,但段寄存器和立即数不能作为交换指令的一个操作数。
3、堆栈操作指令(后进先出)
(1)入栈指令:
PUSH OPRD
功能:SP-2→SP,将原操作数OPRD的16位数据压入堆栈;
步骤:SP-2→SP;操作数低8位送至SP所指向的堆栈单元;操作数高8位送至SP+1所指向的堆栈单元;
注意事项:OPRD可以是CPU内部的16位通用寄存器、段寄存器(CS除外)和内存操作数(所有寻址方式),入栈操作对象必须是16位数。
(2)出栈指令:
POP OPRD
功能:从堆栈中弹出16位数据到目的操作数OPRD ,SP+2→SP;
步骤:SP所指向的堆栈单元的内容送至操作数低8位;SP+1所指向的堆栈单元的内容送至目的操作数高8位;SP+2→SP。
4、有效地址传送指令:
LEA REG,OPRD
功能:把操作数的有效地址传送到操作数REG寄存器(REG为16位通用寄存器);
LEA与MOV的区别是为:LEA传送原操作数的有效地址,MOV传送原操作数的内容。
5、换码指令:
XLAT
功能:完成一个字节的查表转换;
表的内容预先已经存在,表的首地址存放于BX寄存器,AL存放相对于表首地址的位移量,该指令执行后(BX+AL)单元的内容送至AL。
6、标志寄存器传送指令
(1)读取标致指令:
LAHF
功能:将标志寄存器中的低8位(包括SF、ZF、AF、PF、CF)传送至AH寄存器的指定位,空位没有定义。
(2)设置标志指令:
SAHF
功能:将寄存器AH的内容送至标志寄存器FR的低8位,根据AH的内容,影响标志位SF、ZF、AF、PF和CF,对OF、DF、IF无影响。
(3)标志寄存器入栈指令:
PUSHF
功能:堆栈指针SP-2→SP,将标志寄存器压入堆栈顶部(SP指向的单元),不影响标志位。
(4)标志寄存器出栈指令:
POPF
功能:将堆栈顶部(SP指向单元)的一个字,传送到标志寄存器,堆栈SP+2→SP。
7、输入/输出数据传送指令:
(1)输入指令:
IN 累加器,端口地址
功能:从一个端口读取一个字节或一个字,传送到AL或AX;
注意事项:端口地址可以直接给出或由DX寄存器间接给出;外部设备最多可有65536个I/O端口(0000~FFFFH),只有前256个端口可在指令中直接给出(00~FFH),若端口地址超过255时,则必须用DX保存端口地址。
(2)输出指令:
OUT 端口地址,累加器
功能:将AL中的一个字节或AX中的一个字输出到指定端口;
传送类指令不影响标志位;与I/O端口打交道的寄存器有累加器AX,寄存器DX,AX存放与外部设备交换的数据,DX存放端口地址。
算数运算类指令:
1、加法指令
(1)加法指令:
ADD OPRD1,OPRD2
功能:OPRD1←OPRD1+OPRD2,完成两个操作数相加,结果送至目的操作数OPRD1,原操作数不变;
指令的运行结果对标志位CF、OF、PF、SF和AF产生影响。
(2)带进位加法指令:
ADC OPRD1,OPRD2
功能:OPRD1←OPRD1+OPRD2+CF,ADC指令主要用于多字节运算中。
(3)增量指令:
INC OPRD
功能:操作数OPRD的内容加1,结果送回OPRD;
此指令主要用于在循环程序中修改地址指针和循环次数等,该指令执行的结果影响标志位AF、OF、PF、SF和ZF,不影响进位标志CF。
2、减法指令
(1)减法指令:
SUB OPRD1,OPRD2
功能:OPRD1←OPRD1-OPRD2,目的操作数减去原操作数,结果送到目的操作数,原操作数不变,本指令对标志位AF、CF、OF、PF、SF和ZF都有影响。
(2)带借位的减法指令:
SBB OPRD1,OPRD2
功能:OPRD1←OPRD1-OPRD2-CF,目的操作数减去原操作数,同时还要减去借位(进位)标志CF的现行值,结果送到目的操作数,原操作数不变,本指令对标志位AF、CF、OF、PF、SF和ZF都有影响。
(3)减量指令:
DEC OPRD
功能:操作数OPRD的内容减1,并把结果送回OPRD,执行结果不影响CF,但影响其它五个状态标志。
(4)取补指令:
NEG OPRD
功能:对操作数取补码,将结果送回操作数OPRD中,实际上是用0减去操作数,执行结果影响标志位AF、CF、OF、PF、SF和ZF,一般总是使标志位CF=1,除非在操作数为0时,才使CF=0。
(5)比较指令:
CMP OPRD1,OPRD2
功能:操作数OPRD1减去OPRD2,运算结果不送到OPRD1,不影响两个操作数,但影响状态标志。
3、乘法和除法指令
(1)无符号数乘法指令MUL和带符号数乘法指令IMUL:
MUL OPRD IMUL OPRD
功能:如果OPRD是字节操作数,则AL的内容与OPRD相乘的16位结果送到AX中;如果OPRD是字操作数,则AX的内容与OPRD相乘32位的结果送到DX和AX中,DX中是高16位,AX中是低16位。
注意事项:如果乘积结果的高半部分(字节相乘时为AH,字相乘时为DX)不等于零,则标志CF=1,OF=1;否则CF=0,OF=0,对其它标志(该指令无定义),所以,如果CF=0,OF=0,表示AH或DX中的结果数无效。
(2)无符号数除法指令DIV和带符号数除法指令IDIV:
DIV OPRD IDIV OPED
功能:如果OPRD是字节操作数,则AX的内容除以OPRD8位的商送到AL中,8位余数送到AH中;如果OPRD是字操作数,则DX中(高16位)和AX中(低16位)的内容除以OPRD,16位的商送到AX中,16位的余数送到DX中。
注意事项:除法指令对标志位的影响无定义;如果除数为0,或者8位数除时商超过8位,或者16位除时商超过16位,则认为是溢出,引起0号中断。
(3)符号扩展指令
①字节扩展指令CBW:寄存器AL中的符号扩展到寄存器AH。若AL的最高有效位为0,则AH=0,否则AH=0FFH;
②字扩展指令CWD:寄存器AX中的符号扩展到寄存器DX。若AX的最高有效位为0,则DX=0,否则DX=0FFFFH。
逻辑运算与移位指令:
1、逻辑运算指令
(1)逻辑“与”指令:
AND OPRD1,OPRD2
功能:两个操作数进行按位的逻辑“与”运算,结果送到目的操作数OPRD1,CF=0,OF=0,结果影响ZF、SF、PF;对自身的“与”操作作用是清标志位CF和OF,自身内容不变。
(2)逻辑“或”指令:
OR OPRD1,OPRD2
功能:两个操作数进行按位的逻辑“或”运算,结果送到目的操作数OPRD1,CF=0,OF=0,结果影响ZF、SF、PF。
(3)逻辑“非”指令:
NOT OPRD
功能:把操作数OPRD按位取反,结果送回OPRD,对标志位没有影响。
(4)逻辑“异或”指令:
XOR OPRD1,OPRD2
功能:两个操作数进行按位的逻辑“异或”运算,结果送到目的操作数OPRD1,CF=0,OF=0,结果影响ZF、SF、PF。
(5)逻辑测试指令:
TEST OPRD1,OPRD2
功能:两个操作数进行按位的逻辑“与”运算,结果不送到目的操作数OPRD1,仅仅影响标志位,通常用于检测某位是否为1,但又不改变原来值的场合。
2、移位指令
(1)算数/逻辑移位指令:
SAL OPRD,CNT ;算数左移
SHL OPRD,CNT ;逻辑左移
SAR OPRD,CNT ;算数右移
SHR OPRD,CNT ;逻辑右移
CNT为移位位数,可以是1或寄存器CL,当需要移多位时,移位位数需存放在CL寄存器中。
算数/逻辑左移
(2)循环移位指令:
ROL OPRD,CNT ;循环左移
ROR OPRD,CNT ;循环右移
RCL OPRD,CNT ;带进位循环左移
RCR OPRD,CNT ;带进位循环右移
CNT为移位位数,可以是1或寄存器CL,当需要移多位时,移位位数需存放在CL寄存器中。
控制转移类指令:
1、无条件转移指令:
JMP OPRD
2、调用和返回指令:
CALL DST
……
RET
3、条件转移指令:
(1)标志位转移指令;
JC
进位位为1
JNC
进位位为0
JO
溢出
JNO
不溢出
JNP/JPO
奇偶位为0(奇)
JP/JPE
奇偶位为1(偶)
JNS
符号位为0(非负)
JS
符号位为1(负)
JE/JZ
结果为0
JNE/JNZ
结果不为0
(2)无符号数比较转移指令;
JA/JNBE
大于/不小于等于
JAE/JNB
大于等于/不小于
JB/JNAE
小于/不大于等于
JBE/JNA
小于等于/不大于
(3)有符号数比较转移指令;
(4)测试转移指令;
注意事项:条件转移不影响标志位;条件转移指令的目的地址必须在线性的代码段(CS)内,并且以当前指针寄存器IP内容为基准,其位移必须在-128~+127的范围内。
4、循环控制指令:
LOOP OPRD
功能:寄存器CX的值减1,如果结果不等于0,则循环置OPRD,否则顺序执行。
第四章
表达式:
1、算术运算符、逻辑运算符和关系运算符
(1)算术运算符
+、-、*、/、MOD、SHL、SHR;
(2)逻辑运算符
AND、OR、NOT、XOR
按位运算;
(3)关系运算符
EQ(等于)、NE(不等于)、LT(小于)、LE(小于等于)、GT(大于)、GE(大于等于)
关系运算结果总是一个数值,若关系式不成立,则结果为0,若关系成立,则结果为0FFFFH。
2、分析运算符
(1)SEG 变量或标号
计算段地址;
(2)OFFSET 变量或标号
计算偏移地址;
(3)TYPE 变量或标号
计算符号类型。
3、组合运算符(属性操作符)
(1)定义符号名为新类型PTR
<类型> PTR <符号名>
用于指定或零时改变变量或标号的类型;
(2)指定新类型THIS
THIS <类型>
为某个符号名建立新类型,如BYTE(字节)、WORD(字)、DWORD(双字)。
伪指令:
1、数据定义(变量定义)
[变量名] 助记符 <初值表>
功能:根据定义类型不同,为变量分配存储单元,并且把其后的初值表中的各项值存入连续的指定存储单元中,或者置分配单元而不存入确定的值。初值表中的各项可以是数值、字符串、标号名或变量名,表达式。
DB:定义字节,即初值表中的每个数据占1个字节单元;
DW:定义字,即初值表中的每个数据占1个字单元(2个字节),且低字节存放在低地址单元,高字节存放在高地址单元;
DD:定义双字,即初值表中每个数据占两个字单元(4个字节),且低字节存放在低地址单元,高字节存放在高地址单元;
DQ:定义4字长,即每个数据项占8个字节;
DT:定义10个字节长。
当一个定义的存储区内的每个单元要防止同样的数据时,可用DUP重复操作符
COUNT DUP(?)
COUNT为重复次数,“()”中为要重复的数据,?表示空出一个单元,没有存放初值,DUP可以嵌套使用。
2、符号常量定义伪指令
(1)等价语句
<常量名> EQU <表达式>
功能:将表达式的值赋给符号常量,表达式可以是常数、数值表达式、字符串、存储器符号等;
(2)等号语句
<符号常量名> = <表达式>
功能:将表达式的数值赋给符号常量,表达式为数值表达式。
注意:等价语句的符号常量名不能被重新赋值,等号语句可以重新赋值。
3、段定义伪指令SEGMENT和ENDS
<段名> SEGMENT [定位类型][组合类型][类别]
……(段体)
<段名> ENDS
注意:开始的段名与结束的段名必须相同,段的长度不能超过64KB,SEGMENT后面的参数是可选的,但段名是不可默认的。
4、设定段寄存器伪指令ASSUME
ASSUME 段寄存器:段名[,段寄存器:段名]
功能:告诉汇编程序在汇编时,段寄存器CS、DS、SS、ES应具有的符号段基址,但是段寄存器的实际值(CS除外)还要由传送指令在执行程序时赋值。
5、ORG伪指令
ORG <表达式>
功能:规定了在某一段内,程序或代码存放的起始偏移地址。
6、汇编结束伪指令END
END [表达式]
功能:告诉汇编程序源文件结束,并给出执行程序的入口地址,表达式为程序的启动地址。
7、过程定义伪指令PROC和ENDP
<过程名> PROC [过程类型]
……
RET
<过程名> ENDP
过程类型:段间为FAR,段内为NEAR。
汇编语言程序的基本框架:
STACK SEGMENT STACK ;定义堆栈段
……
STACK ENDS
DATA SEGMENT ;定义数据段
……
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA,SS:STACK
START MOV AX,DATA
MOV DS,AX ;数据段段地址送DS
……
MOV AH,4CH ;程序结束返回DOS
INT 21H
CODE ENDS ;代码段结束
END START
系统功能调用:
1、调用方法:
(1)准备入口参数;
(2)功能调用号送AH寄存器;
(3)软中断指令INT 21H。
2、常用系统功能调用
(1)从键盘接收一个字符(01H功能)
MOV AH,1
INT 21H
功能:从键盘读一个字符,并将该字符回显在显示器上;
入口参数:无;
出口参数:AL=读到字符的ASCII码;
如果读到的字符是Ctrl+c或Ctrl+Break则结束程序。
(2)从键盘接收一串字符(0AH号功能)
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H
入口参数:DS:DX=缓冲区首址,缓冲区的第一个字节放缓冲区最大容量数;
出口参数:接收到的字符串在缓冲区中第三个字节开始;
注意:
① 缓冲区第二个字节存放实际读入的字符数;
② 字符串以回车结束;
③ 如果输入字符串超过了缓冲的区容量, 超出的部分丢失,同时响铃;
④ 如果在输入时按Ctrl+C或Ctrl+Break,则结束程序。
(3)显示一个字符(02H功能)
MOV DL,’A’
MOV AH,02H
INT 21H
功能:寄存器DL中的字符从屏幕上显示输出;
入口参数:DL=要输出字符的ASCII码;
出口参数:无。
(4)显示一串字符(09H功能)
BUF DB ‘good bye $’
……
MOV DX,OFFSET BUF
MOV AH,09H
INT 21H
功能:将指定缓冲区中的字符串从屏幕上显示输出;
入口参数:DS:DX=要输出字符的首址,字符串以字符,$为结束标志;
出口参数:无。
(5)返回操作系统(4CH号功能)
MOV AH,4CH
INT 21H
功能:结束当前正在执行的程序,并返回操作系统,回到DOS提示符下C:>;
入口参数:无;
出口参数:无。
汇编文件类型:
编辑程序输出的文件为.asm;
汇编程序输出的文件有.obj、.lst;
连接程序输出的文件为.exe。
第五章
存储器容量的扩展方法:
1、位扩展
位扩展只是在位数方向扩展(加大字长),而芯片的字数和存储器的字数是一致的,位扩展的连接方式是将各存储芯片的地址线、片选线和读/写线相应地并联起来,而将各芯片的数据线单独列出,例如用64K1bit的DRAM芯片组成64K8bit的存储器。
2、字扩展
字扩展是指仅在字数方向扩展,而位数不变,字扩展将芯片的地址线、数据线、读/写线并联,由片选信号来区分各个芯片,例如用16K8bit的SRAM芯片组成64K8bit的存储器。
地址译码的方法:
1、线选法
高位地址线直接(或经反相器)接至各个存储芯片的片选端,当某条地址线信息为“0”时,就选中与之对应的存储芯片,这些片选地址线每次寻址只能有一位有效,保证每次只选中一个(或组)芯片。
2、全译码法
用除了片内寻址外的全部高位地址线作为地址译码器的输入,把经过译码器译码后的输出作为各芯片的片选信号,将它们分别接到存储芯片的片选端,以实现对存储芯片的选择。
3、部分译码
用除了片内寻址外的高位地址的一部分来译码产生片选信号,在系统中如果不要求提供CPU可直接寻址的全部存储单元,则可采用线选法和全译码法相结合的方法,这就是部分译码法。
第六章
接口的作用:
接口的作用总的来说就是要能够根据CPU的要求对外设进行管理与控制,实现信号逻辑及工作时序的转换,保证CPU与外设之间能可靠而有效地进行信息交换。具体地说,接口应该具备以下功能:
1
展开阅读全文
相关搜索