——请先在复习资料栏找寻资料,若需其他课程复习资料(计算机专业相关),可邮件至[email protected]
汇编语言基本概念知识汇总
1、8086/8088 CPU的寄存器组中,8位的寄存器有8个:
ALAH BL BH CL CH DL DH。 P21
2、8086/8088 CPU的寄存器组中,16位的寄存器有14个:
AXBX CX DX DS CS SS ES FS GS DI SI BP SP。P21
3、当使用BP作编程地址时,此时使用的是SS段。P21
4、影响标志位:
①、SAHF,POPF根据计算情况影响标志位。P58
②、ADD,ADC,XADD,SUB,SBBCMP,NEG等影响条件标志位。
ADD指令对OF标志位影响:若两操作数相同且结果符号与之相反,则OF=1,反之OF=0。 P59
OF表示有符号溢出,CF表述无符号溢出。
③、乘法指令对除CF,OF以外的条件码位无定义。
④、AND,OR,XOR,TEST将使CF和OF位为0。
⑤、移位指令会影响CF,OF,具体见书73页倒数第一段。
5、不影响标志位:
①、MOV指令不影响标志位。
②、PUSH和POP指令不影响标志位。
③、INC,DEC不影响CF位。
④、除法指令对条件码位均无定义。
⑤、NOT指令不影响标志位。
⑥、所有的跳转指令都不影响条件码。
⑦、循环指令不影响条件码。
⑧、CALL和RET指令都不影响条件码。
6、双操作数指令的两个操作数中除源操作数为立即数的情况外,必须有一个操作数在寄存器中。单操作数指令不允许使用立即数方式。
我们也可以理解为双操作数不允许有两个[]。
7、CS指令不允许使用MOV指令。
8、DX不能作为间接寻址的寄存器。
9、有效地址=(BX/BP)+(SI/DI)。即二选一,不能同时存在。
基址寄存器 变址寄存器
10、如JMP指令采用段间间接寻址,那么由4个相邻字节单元中存放有转移地址,其中前两个字节存放的是IP, 后两个字节存放的是CS。
段间转移时进行入栈操作时先存放CS再存放IP,并且SP每次减2。
11、Loop指令执行原则为先执行循环体CX再减一。
12、SP=返回的字节+IP的2个字节(由于是段内返回)。
13、寄存器操作数: 存放在4个通用寄存器(AX、BX、CX、DX 8位或16位)、 4个专用寄存器(SI、DI、BP、SP 只能是16位)或4个段寄存器(CS、DS、ES、SS 只能是16位)中的操作数。
14、不允许将立即数传送到段寄存器。
15、一般不允许两个操作数同时为存储器操作数。
16、8086的寻址方式
①、立即数寻址:操作数直接包含在指令中
例:MOV AX,3102H
立即数只能是8或16位整数,通常用于双操作数指令中,只能作为源操作数。
②、寄存器寻址:操作数包含在寄存器中
例:MOV DX,AX
对16位操作数,寄存器可以为AX、BX、CX、DX、SI、DI、SP、BP、CS、DS、SS、ES
对8位操作数,寄存器可以为AH、AL、BH、BL、CH、CL、DH、DL
可以对源操作数、目标操作数或两者都采用寄存器寻址方式
当指令中的源操作数和目标操作数均为寄存器时,必须采用同样长度的寄存器
两个操作数不能同时为段寄存器
目标操作数不能是代码段寄存器CS
③、直接寻址:有效地址在指令中直接给出
例:MOV AX, [2000H]
EA = 基址 + 变址 + 偏移量
默认段寄存器为DS,若操作数在其它段,则必须使用段超越前缀指明
④、寄存器间接寻址:有效地址 = 寄存器内容
例:MOV AX, [BX]
EA = 基址 + 变址 + 偏移量
只有SI、DI、BX(段基址默认在DS中)和BP(段基址默认在SS中)可做间址寄存器,段基址可使用段超越前缀更改
⑤、寄存器相对寻址(直接变址寻址):有效地址 = 寄存器内容 + 偏移量
例:MOVAX,[BX+1000H]
⑥、基址变址寻址:有效地址 = 基址寄存器内容+变址寄存器内容
例:MOV AX, [BX+SI]
MOV AX, [BP][DI]
⑦、相对基址变址寻址:有效地址 = 基址寄存器内容 +变址寄存器内容 + 偏移量
例:MOV AX,BASE [SI] [BX]
MOV AX,[BX+BASE] [SI]
存储器寻址小结:
17、串操作的源操作数在DS段,目的操作数在ES段。
18、MOV指令:
19、PUSH、POP指令:
20、XCHG指令:
21、有效地址送寄存器指令: LEA REG, SRC
不影响标志位
REG 不能是段寄存器
SRC 必须为存储器寻址方式
22、类型转换指令:
22、ADD指令:
23、SUB指令:
24、乘法指令:
25、除法指令:
26、调整指令:
27、逻辑运算指令:
逻辑非指令:NOT OPR OPR不能为立即数
28、移位指令:
29、串操作指令:
30、伪操作:汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。
31、地址计数器 $ :保存当前正在汇编的指令的地址。
32、子程序调用:隐含使用堆栈保存返回地址。
33、NEAR属性:调用程序和子程序在同一代码段中(段内调用);
FAR属性:调用程序和子程序不在同一代码段中(段间调用)。
34、宏:源程序中一段有独立功能的程序代码。
宏指令:用户自定义的指令。在编程时,将多次使用的功能用一条宏指令来代替。
35、CPU与外设交换的信息分为三种:控制、状态信息;数据信息;命令信息;控制与状态信息都是为了正确地获得数据信息。
36、接口一般就由控制逻辑部件和一系列的寄存器构成,每个接口设备内部的寄存器数量不一样。但都可以分为三类:状态寄存器,数据寄存器;命令寄存器。
数据寄存器:存放外设和主机间传送的数据
状态寄存器:保存外设或接口的状态信息
命令寄存器:保存CPU发给外设或接口的控制命令
38、中断源:引起中断的事件
外中断(硬中断):
外设的 I/O 请求 —— 可屏蔽中断
电源掉电 / 奇偶错 —— 非屏蔽中断
内中断(软中断):
INT 指令 / CPU 错(除法错、溢出)/
为调试程序设置的中断
39、存储器:
存储器以字节(8bit)为编程单位
每个字节单元都有唯一的地址编码
地址用无符号整数来表示(编程用十六进制表示)
一个字要占用相继的两个字节
低位字节存入低地址,高位字节存入高地址
字单元地址用它的低地址来表示
机器以偶地址访问(读 / 写)存储器
40、CPU组成:算术逻辑部件ALU、控制器、寄存器。
41、寄存器与存储器:
42、外部设备与主机( CPU 和存储器)的通信是通过外设接口(Interface)进行的,每个接口包括一组寄存器。
43、外设中每个寄存器有一个端口(Port)地址,构成一个独立于内存的 I / O 地址空间:0000H ~ FFFFH。