导图社区 第四章 Pentium指令系统与汇编语言编程
此图是Pentium指令系统与汇编语言编程的思维导图。其中包含Pentium指令系统概述、通用整数指令及应用、汇编语言程序、常用伪指令语句、汇编语言编程入门等具体知识。
编辑于2022-04-15 11:17:47第四章Pentium指令系统与汇编语言编程
4.1Pentium指令系统概述
4.1.1Pentium指令系统特点
1.采用变字节指令格式
2.大多可采用任意的通用寄存器
3.指令操作数可以是0到3不等
4.指令的编码由5个基本字段和1个附加字段构成
操作码字段
寄存器/存储器寻址方式字段
比例-变址-基址字段
位移量字段
立即数字段
前缀字段
Pentium指令分类
数据传送类指令
算术运算类指令
逻辑运算与移位指令
控制类转移指令
4.2通用整数指令及应用
4.2.1数据传送类指令
1.通用数据传送指令
1.传送类指令MOV
1.源操作数可以为字节数,字和双字数据,但两者类型要一致
2.源操作数可以是通用寄存器,段寄存器,存储器或者立即数,目的操作数允许是通用寄存器,除CS之外的段寄存器或存储器
3.立即数不能为目的操作数
4.源操作数和目的操作数不能同时作为段寄存器
5.正确使用基址,变址寄存器
2.堆栈指令
1.压栈指令PUSH
2.弹栈指令POP
3.注意
1.PUSH和POP要成对出现
2.压栈顺序为先压搞字节,后压低字节,弹栈是先弹低字节,后弹高字节
3.地址传送指令
1.装入有效地址LEA
作用:将源操作数的有效地址送到指定的寄存器
2.装入全地址指针指令LDS/LES/LFS/LGS/LSS
作用:将全地址指针装入段寄存器和通用寄存器中
4.输入/输出指令
1.输入指令IN
功能:将指定端口中的内容传送到累加器AL/AX/EAX中
2.输出指令OUT
功能:将累加器AL/AX/EAX中的内容传送到指定8位16位或者32位I/O端口中。
4.2.2算术运算类指令
1.加/减法指令
1.不带进位的加/减法指令ADD/SUB
作用:目的操作数+/-源操作数→目的操作数
2.带进位的加/减法指令ADC/SBB
功能:目的操作数+/-源操作数+/-CF→目的操作数
3.加1/减1指令INC/DEC
功能:将目的操作数内容加1/减1,结果仍然保留在目的操作数中
4.整数变反(求补)指令NEG
功能:0-目的操作数→目的操作数
5.比较指令CMP
功能:目的操作数-源操作数(和SUB都为减法,但是不改变目的操作数)
2.乘/除法指令
1.乘法指令MUL/IMUL
介绍:MUL为无符号数指令,IMUL为有符号数指令
使用:MUL/IMUL 源操作数
源操作数为字节型:AL*源操作数→AX
源操作数为字型:AX×源操作数→DX:AX
源操作数为双字型数据:EAX×源操作数→EDX:EAX
2.除法指令DIV/IDIV
字节时:AX/源操作数,商存AL,余数存AH
源操作数为字时: (DX:AX)/(源操作数),商存AX,余数存DX
双字:(EDX:EAX)/(源操作数),商存EAX,余数存EDX
4.2.3逻辑运算和移位指令
1.AND逻辑与
作用:清零
2.OR逻辑或
作用:置位
3.XOR异或
作用:取反
4.TEST测试
作用:与AND类似,区别在于TEST不因操作改变目的操作数,而AND改变
5.NOT非
6.移位指令
1.开环移位指令
算术左移SAL
逻辑左移AHL
算术右移SAR
逻辑右移SHR
2.循环移位指令
循环左移ROL
循环右移ROR
带进位循环左移RCL
带进位循环右移RCR
4.2.4串操作符指令
4.2.5控制类转移指令
1.无条件转移指令JMP
1.段内直接短转移:格式:JMP SHORT 目标标号
2.段内直接转移:格式:JMP 目标标号
3.段间直接转移:格式:JMP FAR PTR 目标标号
4.段内间接转移:JMP 通用寄存器 JMP 寄存器
2.条件转移指令
格式:JCC 短标号/近标号 P138页
3.调用指令与返回指令
1.调用指令CALL
说明:与JMP类似,但是会保存断点和地址进栈操作
2.返回指令
RET
不带参数返回指令
RET 参数
带参数返回指令
通过弹栈操作返回调用前的IP和CS值
4.循环控制指令
LOOP
内容减一判断CX是否为0
LOOPE/LOOPZ
内容减一判断CX是否为0和零标志ZF是否为1
LOOPNE/LOOPNZ
内容减一判断CX是否为零和零标志ZF是否为0
5.中断和中断返回指令
INT n
软中断指令,产生一个八位立即数指定中断信号软中断,先将标志寄存器和断点地址压栈,并将标志位TF和IF清零,然后转向断点
INTO
溢出中断指令
IRET
中断返回指令
4.2.6处理器控制类指令
1.标志位操作指令
CLC清进位指令
STC置进位指令
CMC进位取反指令
CLD清方向标志指令
STD置方向标志指令
CLI关中断指令
STI开中断指令
2.外同步指令和空操作指令
HLT,使CPU暂停程序执行
WAIT,使CPU等待状态
ESC,交权给外部处理器
LOCK前缀命令
NOP,空操作
4.3汇编语言程序概述
4.3.1汇编语言程序的特点
介于机器语言和高级语言之间的,采用助记符表示的程序设计语言,代码精简,占内存少,执行速度快
4.3.2汇编语言程序结构
以逻辑段为基础,按段的概念来组织代码和数据
4.3.3汇编语言语句格式
伪指令语句:[名字]定义符 [操作数][;注释]
4.4常用伪指令语句
4..4.1方式选择伪指令
放头部作为源程序第一条语句,详细见P146
4.4.2逻辑段定义伪指令
1.完整段定义伪指令
1.段定义语句
格式:段名 SEGMENT [定位类型][,组合类型][,字长选择][,‘类别’]
功能:逻辑段定界语句,段名指名段基址
2.段寄存器说明语句
格式:ASSUME 段寄存器:段名[,段寄存器:段名,……]
功能:说明源程序中定义的段分别由哪个寄存器去寻址
2.简化段定义伪指令
1.段次序语句DOSSEG
功能:用于规定各逻辑段在内存的顺序按DOS段次序约定排序
2.内存模式语句.MODEL
功能:用于指定数据段和代码段允许使用的长度
3.段语句
.CODE代码段语句
.STACK堆栈段语句
.DATA初始化近程数据段语句
.DATA非初始化近程数据段语句
4.4.3数据定义伪指令
1.常数定义伪指令
1.赋值伪指令
格式:符号名 EQU 表达式
功能:用符号名代替表达式的值
2.等号伪指令
格式:符号名=表达式
2.变量定义伪指令
格式:[变量名]DB/DW/DD/DF/DQ/DT 数据项[,数据项,…,数据项]
功能:为数据项或者项表分配存储空间,给它们赋值,DB,DW,DD,DF,DQ,DT分别定义8位(字节),16位(字),32位(双字),48位(长字),64位(四字)和80位(十字节)数据
4.4.4过程与宏定义伪指令
1.过程定义伪指令
格式:过程名 PROC[属性]…… [RET]…… RET 过程名 ENDP
功能:过程由过程定义伪指令PROC和ENDP分别定义过程伪指令的开始和结束
注意问题:必须至少包含一条RET指令,允许嵌套调用
2.宏定义伪指令
格式:宏名 MACRO[形式参数表]…… ENDM
说明:一经定义就可以在源程序任何地方调用
宏调用格式:宏名[实际参数表]
注意:1.标号要用LOCAL伪指令说明为局部标号,类型要一致
3.宏和过程比较
1.宏操作能直接传递和接受参数,过程不能
2.子程序不论调用多少次都只被汇编一次,宏指令调用多少次就汇编多少次
3.引入宏操作不会在执行目标代码时增加额外的时间开销
4.5汇编语言编程入门
4.5.1汇编语言程序的开发过程
开始于需求分析,根据需求和规模等因素划分模块,进而确定各个功能模块的求解算法和数据结构
4.5.2基本结构程序设计
1.顺序程序设计
特点:顺序执行,无分支,无循环,也无转移
2.分支程序设计
1.利用比较与条件转移指令实现分支
2.利用跳转表实现分支
3.循环程序设计
1.计数控制循环程序
2.条件/状态控制循环程序
4.5.3子程序设计与调用
1.主程序与子程序的接口
2.主程序与子程序间的参数传递
1.寄存器传递参数
2.存储器传递参数
3.堆栈传递参数
4.5.4DOS/BIOS功能调用
1.DOS功能调用
1.DOS01H号功能调用
功能:从标准输入设备中输入一个字符,并将其ASCALL码值送入AL寄存器,同时将该字符显示在屏幕上
调用方式:MOV AH,01H INT 21H
出口参数:从AL中为输入字符的ASCALL码值
2.DOS02H号功能调用
功能:将DL寄存器中的字符输出到标准输出设备
入口参数:DL寄存器中存放要输出字符的ASCALL码值
调用方式:MOV AH,02H INT 21H(无出口参数)
3.DOS的08H号功能调用
功能:不带回显的键盘输入。除了读到的字符不在屏幕上显示外,与01H号功能相同
4.DOS的09号功能调用
功能:将一个以‘$’字符结束的字符输出到显示器
入口参数:DS:DX指向内存中要显示的一个以‘$’字符结尾的字符串首地址
调用方式:MOV AH , 09H INT 21H(无出口参数)
5.DOS的0AH号功能调用
功能:从键盘输入字符并将字符输入到缓冲区,同时显示字符串,用Enter结束字符串,若字符串超过规定的长度则响铃并忽略超出长度的字符
入口参数:DS:DX指向的缓冲区首地址
调用方式:MOV AH,0AH INT 21H