《计算机硬件技术--第3章微处理器指令系统》由会员分享,可在线阅读,更多相关《计算机硬件技术--第3章微处理器指令系统(148页珍藏版)》请在金锄头文库上搜索。
1、JUST,计算机硬件技术基础,凌青华 江苏科技大学 计算机科学与工程学院 电子信箱:lingee_2000 联系电话:15805283908,关于作业,微型机硬件系统包括哪些主要部件? 冯诺依曼型计算机体系的基本思想是什么? 存储程序+执行程序 十进制数转换为二进制数:整数部分注意逆序取余,小数不要丢掉小数点 16位负数的补码表示: +65=0 100 0001,-65=1 011 0000 补码的运算 注意仅有二进制数才有补码的概念,JUST,复习,计算逻辑地址1234H:ABCDH对应的物理地址。 8086内部的寄存器有哪些? 什么是指令?指令的格式一般是什么? 指令MOV AX,DS:1
2、234H的含义?,JUST,第3章 微处理器的指令系统,8086的寻址方式 数据传送类指令 算术运算类指令 逻辑运算和移位循环类指令 串操作类指令 程序控制类指令 处理器控制类指令 CPU指令集,JUST,3.1 80868088的寻址方式,80868088的寻址方式分为两种不同的类型:数据寻址方式和程序存储器寻址方式。前者是寻址操作数地址,后者是寻址程序地址(在代码段中) 在8086指令系统中,数据寻址方式可分为8种: 立即寻址 寄存器相对寻址 直接寻址 基址-变址寻址 寄存器寻址 相对的基址-变址寻址 寄存器间接寻址 隐含寻址,JUST,一. 立即寻址,操作数直接由指令给出立即数 立即寻址
3、只能用于源操作数 例: MOV AX, 1C8FH MOV BYTE PTR2A00H, 8FH MOV 2A00H, AX ; 错误!,JUST,例3-1 MOV AX,3102H 执行后,AH = 31H,AL = 02H,JUST,二. 直接寻址,指令中直接给出操作数的16位偏移地址 偏移地址也称为有效地址(EA, Effective Address) 默认的段寄存器为DS,但也可以显式地指定其他段寄存器称为段超越前缀 偏移地址也可用符号地址来表示,如ADDR 例: MOV AX , 2A00H MOV DX , ES: 2A00H MOV SI , TABLE_PTR,JUST,例3-
4、2 MOV AX,3102H AL (3102H) , AH (3103H),如果DS=2000H 则操作数的物理地址为: 20000H+3102H = 23102H 指令执行后:AX =,ABCDH,JUST,字长不同 寄存器与段无关,三. 寄存器寻址,操作数在寄存器中 源操作数与目的操作数字长要相同 寄存器寻址与段地址无关 例: MOV AX, BX MOV 3F00H, AX MOV CL, AL MOV AX, BL MOV ES: AX, DX,JUST,AX,SI,2233H,2233H,例3-4 MOV SI,AX ; SI AX 指令执行前:AX=2233H 指令执行后:AX=
5、2233H,SI=2233H,2233H,JUST,四. 寄存器间接寻址,操作数的偏移地址(EA)放在间址寄存器中 只有SI、DI、BX和BP可作间址寄存器 物理地址DS左移四位+BX或SI 物理地址=ES左移四位+DI 物理地址SS左移四位+BP 例: MOV AX, BX MOV CL, CS:DI; MOV CX, CS:DI MOV AX, DX MOV CL, AX,默认可以被超越至其他段,用:表示,JUST,例3-5 MOV AX,SI 若 DS=6000H, SI=1200H 则指令执行后,AX=,3344H,JUST,EA=间址寄存器的内容加上一个8/16位的位移量,寄存器相对
6、寻址常用于存取表格或一维数组中的元素把表格的起始地址作为位移量,元素的下标值放在间址寄存器中,五. 寄存器相对寻址,JUST,物理地址DS左移四位BX或SI+位移量 物理地址SS左移四位BP+位移量 物理地址ES左移四位DI+位移量 基本格式:MOV AX , BXXYZ MOV AX , XYZBX MOV AX , BX+XYZ 例: MOV AX , SI40H MOV AX , 40HSI MOV AX , SI+40H,五. 寄存器相对寻址,JUST,例3-7 MOV AX,DATABX 若DS=6000H, BX=1000H, DATA=2A00H, 若(63A00H)=66H,
7、(63A01H)=55H 物理地址 =,60000H + 1000H + 2A00H = 63A00H,指令执行后:AX=,5566H,JUST,六. 基址-变址寻址,若操作数的偏移地址: 由基址寄存器(BX或BP)给出 基址寻址方式 由变址寄存器(SI或DI)给出 变址寻址方式,由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。,注意:同一组内的寄存器不能同时出现。,JUST,若基址寄存器用BX,则段寄存器用DS 物理地址DS左移四位+BX+SI或DI 若基址寄存器用BP,则段寄存器用SS 物理地址SS左移四位+BP+SI或DI,JUST,例: MO
8、V AX, BX SI MOV AX, BX+SI MOV AX, DS: BP DI MOV AX, BX BP MOV AX, DI SI,JUST,例3-9 MOV AX,BXSI 假定:DS=8000H, BX=2000H, SI=1000H 则物理地址 = 指令执行后: AL= AH=,80000H + 2000H + 1000H = 83000H,(83000H),(83001H),JUST,七. 相对的基址-变址寻址,在基址-变址寻址的基础上再加上一个相对位移量,例:,MOV AX,BASE SI BX MOV AX,BX+BASE SI MOV AX,BX+SI+BASE MO
9、V AX,BX BASE SI MOV AX,BX+SI BASE,JUST,例3-10 MOV AX,DATADIBX 若DS=8000H, BX=2000H, DI=1000H, DATA=200H 则指令执行后AH=(83201H), AL=(83200H),JUST,使用相对的基址-变址寻址方式可以很方便地访问二维数组。,基址寄存器,数组首地址,变址寄存器,数组元素行址,位移量,数组元素列址,(偏移地址),JUST,八. 隐含寻址,指令中的操作数是隐含的 例:MUL BL 指令隐含了被乘数AL及乘积AX 类似的指令还有:DIV、CBW、MOVS等,ALBLAX,3.1 80868088
10、的寻址方式,在8086指令系统中,数据寻址方式可分为8种: 立即寻址 寄存器相对寻址 直接寻址 基址-变址寻址 寄存器寻址 相对的基址-变址寻址 寄存器间接寻址 隐含寻址 思考:操作数可从哪儿寻得?即操作数的“家”可能在哪儿?分别对应哪些寻址方式?,程序存储器寻址方式 堆栈存储器寻址方式 串操作指令寻址方式 I/O端口寻址方式,第3章 微处理器的指令系统,8086的寻址方式 数据传送类指令 算术运算类指令 逻辑运算和移位循环类指令 串操作类指令 程序控制类指令 处理器控制类指令 CPU指令集,JUST,3.2 数据传送类指令,通用传送指令: (MOV;XCHG;PUSH;POP) 地址传送指令
11、:(LEA;LDS;LES) 标志传送指令:(LAHF;SAHF;PUSHF;POPF) 累加器专用传送指令:(IN;OUT),JUST,JUST,3.2.1 通用数据传送指令,1、基本传送指令(MOV) 指令格式:MOV DST,SRC; 操作:将SRC内容赋给DST。 所有通用传送指令都不影响标志位。,JUST,立即数,段寄存器,存储器 (各种寻址),通 用 寄存器,1,2,3,4,5,5,6,6,?,?,JUST,注意:不能用MOV指令实现以下传送 1、存储器操作数之间不能直接传送 MOV 1000H , DI 错 应改为 MOV AX , DI MOV 1000H, AX 2、立即数不
12、能直接传送段寄存器 MOV DS,2000H 错 应改为 MOV AX, 2000H MOV DS , AX,JUST,3、段寄存器之间不能直接传送 MOV ES , DS ; 错 应改为 MOV BX , DS MOV ES , BX 4、CS只可以作为源操作数 例:MOV CS,AX ;错 MOV AX,CS ;对 5、源操作数和目的操作数的宽度必须相同,3.2 数据传送类指令,通用传送指令: (MOV;PUSH;POP;XCHG) 地址传送指令:(LEA;LDS;LES) 标志传送指令:(LAHF;SAHF;PUSHF;POPF) 累加器专用传送指令:(IN;OUT),JUST,JUST
13、,2、堆栈指令(PUSH 、POP) 堆栈(STACK)的概念 数据的存储按后进先出(Last In First OutLIFO)原则组织的一段内存区域。,JUST,堆栈用途 存放寄存器或存储器中暂时不使用的数据,在使用这些数据时可方便地将其弹出; 调用子程序或发生中断时要保护断点信息(入栈),子程序或中断返回时恢复断点信息(出栈)。,JUST,断点信息:程序断点地址、标志寄存器及其它能被子程序使用和改变的寄存器。,堆栈用途如下图,JUST,入栈指令(PUSH): 格式:PUSH src 操作过程分两步完成: (SP) (SP) - 2 (SP)+1,(SP) (src) 功能:把一个字压入由
14、SP指向的堆栈区。 如:PUSH AX,JUST,例1:PUSH BX;(设DS:BX字单元数据为55AAH),JUST,出栈指令(POP) 格式:POP dst ; 操作: (dst) (SP)+1,(SP) (SP) (SP)+2 功能:把SP所指向的堆栈顶部的一个字送入目的地址,同时进行修改堆栈指针。 如: POP BX POP AX,JUST,例2:POP BX;设接在例1后执行。,思考,SP的初值为1000H,SS=2000H,AX=3040H,BX=5060H,试问: (1)该堆栈段的首地址是多少?末地址是多少? (2)执行指令PUSH AX后,SP的值为多少? (3)再执行PUS
15、H BX 及POP AX后,SP、AX、BX的值为多少? (4)此时,SP所指内存空间的数据为多少?(读出一个字),JUST,JUST,应注意的问题 堆栈操作都按字操作, “PUSH AL”为错误指令; PUSH , POP 指令的操作数可以是寄存器或存储单元; PUSH CS 合法,POP CS 非法; 执行PUSH 指令, (SP)-2 (SP),低字节放在低地址,高字节放在高地址; SP总是指向栈顶; 堆栈最大容量即为SP的初值; 堆栈中的数据弹出后,数据并没有在堆栈中消失,除非压入新数据,画图时注意; 使用堆栈指令保护和恢复现场时,要注意指令的排列顺序,如:,PUSH AX PUSH BX PUSH DS POP DS POP BX POP AX,3.2 数据传送类指令,通用传送指令: (MOV;PUSH;POP;XCHG) 地址传送指令:(LEA;LDS;LES) 标志传送指令:(LAHF;SAHF;PUSHF;POPF) 累加器专用传送指令:(IN;OUT),JUST,JUST,3、交换指令(XCHG) 格式:XCHG dst