第3章 Pentium的 指令系统,博学 审问 慎思 明辨 笃行,2,2018/9/22,第3章 Pentium的指令系统,§ 3.1 Pentium的寻址方式§ 3.2 Pentium的指令系统§ 3.3 汇编语言中的标记、表达式和伪指令,教学重点:寻址方式;传送指令中的堆栈指令、交换指令、换码指令、输入/输出指令;算术运算指令中的比较指令;串操作指令;转移指令;中断调用示例;规范程序;伪指令DB、DW、PTR第3章 Pentium的指令系统,3,2018/9/22,指令的基本格式:MOV AX, 1235H (双操作数)INC CX (单操作数) 寻址方式:—— 说明操作数所在地址(来源)的方法,,,操作码,操作数或操作数地址,指令的两个问题:指出进行什么操作涉及的操作数和操作结果放在何处,第3章 Pentium的指令系统,3.1 Pentium的寻址方式,4,2018/9/22,操作数直接存放在指令中,紧跟在操作码之后,MOV AL,80H MOV AX,1090H MOV EAX,10002000H,(Immediate addressing),作为指令的一部分,直接存放在代码段里,这种操作数称为立即数。
立即数可以是8位或16、32位的高位字节放在高地址,低位字节放在低地址使用场合:经常用于给寄存器赋初值注意:只能用于源操作数字段,不能用于目的操作数字段第3章 Pentium的指令系统,3.1.1 立即数寻址,5,2018/9/22,例: MOV AL, 05H指令执行后: (AL)=05H,,例: MOV AX, 3064H指令执行后: (AX)=3064H,立即寻址方式,机器代码:1011 0000 0000 0101 操作码:B0 立即数:05H,机器代码:1011 1000 0110 0100 0011 0000 操作码:B8 立即数:3064H,第3章 Pentium的指令系统,例:,6,2018/9/22,7,2018/9/22,8,2018/9/22,(Register addressing)INC CX ROL AH,1 MOV ECX ,EAX,操作数在寄存器中,指令只须指定寄存器号这种寻址方式因为操作数在寄存器中,操作在CPU内部,不执行总线周期,不需要访问存储器, 因此运算速度较高既可用于源操作数,也可用于目的操作数32位通用寄存器:EAX EBX ECX EDX …… 16位通用寄存器:AX BX CX DX …… 8位通用寄存器:AH AL BH BL ……,第3章 Pentium的指令系统,3.1.2 寄存器寻址,9,2018/9/22,指令执行前: (AX)=3064H (SS)=1234H MOV SS,AX指令执行后:(AX)保持不变。
SS)=3064H,指令执行前:,指令执行后:,,SS,AX,,3064H,,3064H,,,,1234H,,3064H,,寄存器寻址方式,第3章 Pentium的指令系统,例:,10,2018/9/22,第3章 Pentium的指令系统,11,2018/9/22,第3章 Pentium的指令系统,12,2018/9/22,I/O直接寻址:地址在指令中直接提供(0~255)IN AL,82H OUT 80H,AXIN EAX,80H I/O间接寻址:利用DX设置端口地址 (0~65535)MOV DX,80HIN AL,DX OUT DX,AX OUT DX,EAX,第3章 Pentium的指令系统,3.1.3 输入/输出端口寻址,13,2018/9/22,3.1.4 存储器寻址,操作数在主内存中,通过存储器地址指示,1. 直接寻址(Direct addressing) MOV AX,[1070H] MOV EAX,ES:[1000H ],注意: (1)直接寻址方式适用于处理单个变量 (2)直接寻址方式隐含的段寄存器是 DS,8086/8088允许段跨越, 即允许使用 CS SS ES作为段寄存器,这时,必须在指令中特别标明。
(3)IBM PC机中规定双操作数指令必须有一个操作数使用寄存器方式,这就是常常先要把一个变量送到寄存器去的原因第3章 Pentium的指令系统,14,2018/9/22,则:(AX)=3050H,,直接寻址方式,MOV AX,[3100H] (DS)=6000H (63100H)=3050H,必须先求出操作数的物理地址, 然后再访问存储器才能取得操作数第3章 Pentium的指令系统,例:,15,2018/9/22,第3章 Pentium的指令系统,16,2018/9/22,第3章 Pentium的指令系统,17,2018/9/22,2 . 寄存器间接寻址(Register indirect addressing)操作数的有效地址存放在寄存器中 (寄存器内容=偏移地址)MOV AX,[BX] MOV EAX,[EBX],注:若选择BP、SP、ESP、EBP寄存器作为间接寻址操作数在堆栈段区域中,用SS寄存器的内容作为段地址在指令中可以指定段跨越前缀来取得其他段中的数据 例 :MOV ES: [DI], AXMOV DX, DS: [BP],操作数在存储器存储单元中,,第3章 Pentium的指令系统,18,2018/9/22,MOV BX,[DI](DS)=6000H (DI)=2000HPA=62000H(62000H)=50A0H(BX)=50A0H,寄存器间接寻址方式MOV BX,[DI],第3章 Pentium的指令系统,例:,19,2018/9/22,MOV [BP], AX 执行前: (SS)=1000H , (BP)=3000H , (AX)=1234H 执行后:PA=13000H(13000H)=1234H,寄存器间接寻址方式MOV [BP], AX,若选择BP寄存器作为间接寻址, 操作数在堆栈段区域中,用SS寄存器的内容作为段地址。
操作数物理地址: PA=16d × (SS)+(BP),第3章 Pentium的指令系统,例:,20,2018/9/22,第3章 Pentium的指令系统,21,2018/9/22,第3章 Pentium的指令系统,22,2018/9/22,3. 寄存器相对寻址(Register relative addressing) 操作数的有效地址是一个基址或变址寄存器的内容 和指令中指定的8位或16 、 32位位移量之和 MOV AX,[SI+100H] 4. 基址加变址的寻址(Based indexed addressing)操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,基址寄存器名和变址寄存器名均有指令指定MOV AX,[BX+SI] MOV EDX,[EBX+ESI]MOV EDX,[EBX] [ESI],第3章 Pentium的指令系统,23,2018/9/22,寄存器相对寻址方式 MOV AX,COUNT[BP],,,OP,,OP,,40H,,20H,,.,,.,,48H,,55H,,.,,,,55H,,48H,存储器,,,操,作,码,,位移量,COUNT,,,代,码,段,,,,堆,栈,段,55040H,50000H,AH,AL,,,,,第3章 Pentium的指令系统,例:,MOV AX, COUNT [BP] MOV AX, [COUNT+BP] MOV AX, COUNT+[BP]COUNT为16位位移量。
指令执行前: (SS)=5000H, (BP)=3000H,COUNT=2040H,(AX)=1234H指令执行后:EA=5040HPA=55040H(55040H)=5548H(AX)=5548H,24,2018/9/22,MOV AX, [BX][SI] 或 MOV AX, [BX+SI]执行指令前:(DS)=3200H,(BX)=0456H,(SI) =1094H(334EAH)=4567H执行指令后:EA=14EAHPA=334EAH(AX)=4567H,基址加变址寻址方式MOV AX,[BX+SI],第3章 Pentium的指令系统,例:,25,2018/9/22,第3章 Pentium的指令系统,26,2018/9/22,第3章 Pentium的指令系统,27,2018/9/22,第3章 Pentium的指令系统,28,2018/9/22,第3章 Pentium的指令系统,29,2018/9/22,5 相对的基址加变址寻址(Relative based indexed addressing)MOV AX,[BP+SI+0050],操作数有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16、32位位移量之和 。
第3章 Pentium的指令系统,30,2018/9/22,MOV AX, MASK[BX][DI] MOV AX, MASK [BX+DI] MOV AX,[MASX+BX+DI]执行指令前: (DS)=3000H (BX)=1346H (DI)=0500H MASK=1234H (32A7AH)=4050H执行指令后: EA=2A7AH PA=32A7AH (AX)=4050H,相对基址加变址 MOV AX, MASK+[BX+DI],第3章 Pentium的指令系统,例:,31,2018/9/22,32,2018/9/22,33,2018/9/22,32位有效地址 = 基址寄存器+(变址寄存器* 比例)+位移量,其中的4个组成部分是: · 基址寄存器——任何8个32位通用寄存器之一; · 变址寄存器——除ESP之外的任何32位通用寄存器之一; · 比例——可以是1∕2∕4∕8(因为操作数的长度可以是1∕2∕4∕8字节); · 位移量——可以是8∕16、32位值32位存储器寻址方式的组成公式为:,第3章 Pentium的指令系统,34,2018/9/22,设DS=2000H,SS=3000H,BP=0200H,SI=4000H,BUF=1000H,EAX=00001000H,EBX=00002000H。
假设按16位实模式操作,确定下列每条指令访问内存的物理地址,并且指出源操作数及目的操作数的寻址方式,源操作数所在逻辑段1)MOV AL,[1234H] (2)MOV EDX,[BX](3)MOV CL,ES:[BX+100H] (4)MOV [SI],EBX(5)MOV AH,BUF[BX+SI] (6)MOV EAX,[BP+1234H],习 题,第3章 Pentium的指令系统,35,2018/9/22,3.2 Pentium的指令系统,Pentium的指令分为如下几类: 传送指令; 串操作指令; 算术运算指令; 逻辑运算和移位指令; 转移和调用指令; 标志操作和处理器指令; 控制指令; 条件测试和字节设置指令; 系统管理指令; 支持高级语言的指令第3章 Pentium的指令系统,36,2018/9/22,3.2.1 传送指令,功能:负责把数据、地址或立即数在寄存器、存储单元、I/O端口之间传送 特点:计算机最基本、最重要的一种操作,使用比例最高 种类 (分七种):通用传送指令堆栈操作指令指令交换指令输入/输出指令换码指令地址传送指令标志传送指令,第3章 Pentium的指令系统,37,2018/9/22,通用传送指令(General Purpose Transfer),1)MOV DEST,SRC,两个操作数的数位相同,功 能: 把一个字节(B)或一个字(W)、一个双字(DW)操作数由源传送至目的。
源操作数可以是通用寄存器 、段寄存器、立即数、内存单元;目的操作数可以是 通用寄存器、段寄存器(除CS )、内存单元,。