微机原理第三章(指令与汇编程序).ppt
文本预览下载声明
第三章 8086/8088指令系统与汇编语言 指令的基本形式 寻址方式 指令的执行时间 80X86指令集 汇编语言的基本结构 汇编语言的常量与变量 汇编语言运算符与表达式 汇编语言伪指令 简单汇编程序 本章重点 指令的基本形式 80X86的寻址方式 80X86的主要指令 汇编语言的基本结构 汇编语言符号常量与变量定义伪指令 OFFSET、PTR、SHORT运算符 段定义、过程定义、ASSUME伪指令 $ 简单汇编程序编写 指令及其格式 指令及指令集 计算机能够识别和执行的基本操作命令 指令的数量 数值计算 信息处理 多媒体 80X86的指令表示格式 指令的通用格式 80X86的指令执行过程 程序的书写 机器语言:用二进制编写 汇编语言: 行号:操作码 目的操作数,源操作数 ;注释 高级语言:一条语言对应多个机器语言 机器码产生的过程 编辑:编写源程序 (用ASCII码编写的文本文件) 寻址目的 确定本条指令的操作数据 在指令中 在存储器中 在寄存器中 确定下一条指令的地址 根据指令长度计算 根据转移指令的目标地址 对源操作数和目的操作数都需要寻址 立即寻址 操作数在指令中,不需从其它地方取 操作数若超过一字节,则低字节在低地址 只能用于源操作数,不能用于目的操作数 MOV 1234H , AX X 寄存器寻址 操作数在CPU内部的某个寄存器中,不必通过总线从存储器取数据 可以是CPU内部任意寄存器(8/16/32位) 可以用于源操作数或目的操作数 CS可用于源操作数,不能用于目的操作数 MOV CS , AX X 直接寻址 直接寻址示例 寄存器间接寻址 寄存器间接寻址示例 变址寻址 变址寻址示例 基址寻址 基址寻址示例 基址变址寻址 基址变址寻址示例 相对基址变址寻址 相对基址变址寻址示例 地址说明 80X86寻址方式总结 操作数隐含:MUL BL 指令的执行时间 取指令时间 80X86的指令分类 *数据传送类指令 数据传送类指令 MOV指令: CPU与内存之间传递数据 PUSH、POP指令:堆栈操作 XCHG指令:数据交换 XLAT指令:从存储器取数据 LEA、LDS、LES指令:获取地址 IN、OUT指令:CPU与外设交换数据 LAHF、SAHF/PUSHF、POPF指令 标志寄存器传送 MOV指令-数据传送指令 CPU内部或与内存之间传递数据 内存指 数据段、堆栈段或附加段 MOV指令的基本格式 MOV mem/reg1,mem/reg2 MOV指令注意事项 源操作数和目的操作数不能同时为内存地址 MOV指令的二进制格式 格式2:MOV reg,data MOV BX,1234H MOV指令二进制格式 格式1 (2到4字节) 100010dw r/m reg mod 地址低8位 地址高8位 格式2( 2到3字节) 1011w reg 数据低8位 数据高8位 格式3 (2到3字节) 1010000w 地址低8位 地址高8位 格式4(2到3字节) 1010001w 地址低8位 地址高8位 格式5 (2到4字节) mod 0 sreg r/m 地址低8位 地址高8位 格式6(2到4字节) mod 0 sreg r/m 地址低8位 地址高8位 格式7(2到6字节) 1100011w mod 000 r/m 地址低8位 地址高8位 数据低8位 数据高8位 指令格式参数 w参数(0:8位寄存器操作;1:16位寄存器操作) d参数(1:寄存器用于目的操作数;0:寄存器用于源操作数) sreg参数(00:ES; 01:CS; 10:SS; 11:DS) mod与r/m参数(由寻址方式确定) PUSH/POP指令-堆栈操作指令 (PUSH入栈和POP出栈,改变SP的值) 16个字节的堆栈及操作 堆栈入栈操作 堆栈出栈操作 POP DX POP CX POP BX POP AX PUSH/POP指令注意事项 入栈和出栈顺序可以不同 简单C程序函数调用 int Abc(int a,int *b) { int c; c=a+*b; return c; } main() { int x=10,y=20,z; z=Abc(x,y); printf(%d\n,z); return 0; } C程序 Main函数开始:BP入栈 BP、SI、DI入栈情况 函数调用前实参入栈 函数内获取参数 前例的延伸思考 C++ Main函数开始 C++ 调用函数的参数传递 XCHG指令-交换指令 存储器和CPU间交换数据,相当于三次MOV XCHG指令注意事项 XLAT指令-换码指令 在存储器中查找指定索引的数据 XLAT指令注意
显示全部