计算机硬件基础-5指令系统1.ppt_第1页
计算机硬件基础-5指令系统1.ppt_第2页
计算机硬件基础-5指令系统1.ppt_第3页
计算机硬件基础-5指令系统1.ppt_第4页
计算机硬件基础-5指令系统1.ppt_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第5章指令系统,第一部分,2,指令与指令系统,指令: 控制计算机完成某种操作的命令。用户程序都必须翻 译成指令形式的机器语言后才能运行。 指令系统: 处理器所能识别和执行的全部指令的集合。是计算机 系统设计的核心问题。 指令的兼容性: 同一系列机的指令都是兼容的。,3,5.1.1 指令格式,操作码(OP) 操作数地址(A),执行何种操作 (做什么),操作数地址或操作数本身 (做的对象),4,指令格式,指令的长度与操作码及操作数的多少和类型有关,注:两个操作数时,操作数类型要一致。如都是8位或都是16位。,零地址指令: OP 一地址指令: OP A 二地址指令: OP A1 A2 三地址指令

2、: OP A1 A2 A3 多地址指令,5,5.1.2 指令分类,算术逻辑运算 数据传送 移位操作 浮点运算 字符串处理 转移指令 堆栈操作 输入/输出 特权,无条件转移和条件转移 调用和返回 陷阱,6,5.2 指令的寻址方式,寻址方式 指令中如何提供操作数地址(或操作数)的方式 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 寄存器相对寻址 基址-变址寻址 基址-变址-相对寻址,7,一、立即寻址,指令中直接给出操作数本身(是立即数) 例:MOV AX,1234H,12H,34H,AH AL,MOV,代码段,8,二、直接寻址,指令中直接给出操作数的地址(偏移地址) 例:MOV AX,1200H

3、,22H,11H,1200H,偏移地址,数据段,AH AL,9,直接寻址,直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。 例:MOV AX,ES:1200H,10,三、寄存器寻址,操作数在通用寄存器中。 例:MOV AX,BX,AX,BX,11,四、寄存器间接寻址,寄存器中的内容为操作数的偏移地址。操作数实际存放在内存单元中。 例:MOV AX,BX,12,寄存器间接寻址,例: 设(BX)=1200H 则执行MOV AX,BX后,22H,11H,1200H,偏移地址,AH AL,11 22,数据段,代码段,MOV,13,寄存器间接寻址,由寄存器间接给出操作数的偏移地

4、址; 存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI 操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器: BX,SI,DI 默认在数据段 BP 默认在堆栈段,14,寄存器间接寻址,寄存器 间接寻址,基址寻址(间址寄存器为基址寄存 器BX,BP) 变址寻址(间址寄存器为变址寄存 器SI,DI),15,五、寄存器相对寻址,操作数的偏移地址=寄存器的内容+位移量 例:MOV AX,BX+DATA 设:DS=2000H,BX=0220H, DATA=05H 则:AX=20225H,16,六、基址-变址寻址,操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,操

5、作数的段地址由选择的基址寄存器决定 例:MOV AX,SI+BX,17,七、基址-变址-相对寻址,操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个位移量。 操作数的段地址由选择的基址寄存器决定 例:MOV AX,BP+SI+DATA,18,八、隐含寻址,指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中 例: MUL BL 指令的执行:ALBL AX,19,5.3 RISC指令系统,RISC (精简指令系统计算机)指令特点 是计算机发展的重要趋势 使用简单指令(使用频率高的) 长度固定、格式和寻址方式少 取数/存数指令访问内存,其余指令访问寄存器(限制内存访问

6、) 通用寄存器数量特别多 充分使用流水线 以硬布线控制逻辑为主,尽量少用微程序控制 对编译程序的要求高,20,5.4 汇编语言及伪指令简介,机器语言和汇编语言统称为低级语言 基本汇编语言(不使用宏指令)与宏汇编语言 (书中79页83页的内容,要求实验前预习),21,汇编语言程序设计与执行过程,输入汇编语言源程序 源文件 .ASM 汇编(编译) 目标文件 .OBJ 链接 可执行文件 .EXE 调试 最终程序,22,汇编语言的基本语法,常量 运算符 变量或标号 表达式,23,变量,代表内存中的数据区,变量名是地址单元的名字。 变量的属性: 段地址 变量所在段的段地址 偏移量 变量单元地址与段首地址

7、之 间的位移量。 类 型 字节型、字型和双字型,24,语句,指令语句:由CPU执行的指令 伪指令: CPU不执行,不生成目标代码; 由汇编程序执行,用于分配内存空间、定义变量、指示程序开始和结束等。 宏指令:将某些汇编语言指令定义为新的功能更强的指令,25,汇编语言的语句格式,指令语句的格式: 标号: 前缀 助记符 操作数,操作数 ;注释,指令的符号地址,标号后要有冒号,操作码,注释前加分号,26,汇编语言的语句格式,伪指令的格式:,名字 伪指令助记符 操作数 ,操作数, ;注释,变量的符号地址其后不加冒号,指示性语句中至少有一个操作数,27,三、基本伪指令,表达式赋值(符号定义)伪指令 定义

8、数据伪指令 段定义伪指令 设定段寄存器伪指令 过程定义伪指令 程序结束伪指令,28,表达式赋值(符号定义)伪指令,格式: 符号名 EQU表达式 操作: 用符号名取代后边的表达式,不可重新定义 例: CONSTANTEQU100 VAR EQU 30H+99H,EQU说明的表达式不占用内存空间,29,定义数据伪指令,用于为变量对应的内存单元分配数据。 格式: 变量名 伪指令助记符 操作数, ;注释,30,定义数据伪指令,伪指令助记符 DB 定义的变量为字节型 DW 定义的变量为字类型(双字节) DD 定义的变量为双字型(4字节) DQ 定义的变量为4字型(8字节) DT 定义的变量为10字节型,

9、31,定义数据伪指令,NUM1 DB 10H ; 将10H存放到NUM1对应的字节单元中 DATA1 DB 11H,22H,33H,44H DATA2 DW 3344H DATA3 DD 33445566H,32,定义数据伪指令,伪指令的性质决定所定义变量的属性; 定义字符串必须用DB伪指令 例: DATA1 DB ABCD,66H,A,B,C,D,41H,42H,43H,44H,66H,33,重复操作符,为一个数据区的各单元设置相同的初值 格式: 变量名 伪指令助记符 n DUP(初值,) 例: DW 20 DUP (0) DB 3 DUP (22H, 11H, ?),随机数,34,段定义伪

10、指令,说明逻辑段的起始和结束; 说明不同程序模块中同类逻辑段之间的联系形态,35,段定义伪指令,段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS,说明逻辑段的起点,说明不同模块中同名段的组和连接方式,36,段定义伪指令例,DATA SEGMENT MEM1 DB 11H,22H MEM2 DW 1234H DATA ENDS,37,设定段寄存器伪指令,说明所定义逻辑段的性质 格式 ASSUME 段寄存器名:段名 ,段寄存器名:段名,,38,程序结束伪指令,表示源程序结束 格式: END 标号,39,一个完整源程序结构例,DSEG SEGMENT DATA1 DB 1, 2 DAT

11、A2 DW 1234H DSEG ENDS ESEG SEGMENT DB 20 DUP (?) ESEG ENDS SSEG SEGMENT DB 200 DUP (?) SSEG ENDS,40,一个完整源程序结构例,CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG, ES: ESEG, SS: SSEG START: MOV AX, DSEG MOV DS, AX MOV AX, ESEG MOV ES, AX MOV AX, SSEG MOV SS, AX CSEG ENDS END START,源程序 代码,41,过程定义伪指令,用于定义一个过程体 格式:

12、 过程名 PROC NEAR / FAR RET 过程名 ENDP,过程入口的符号地址,42,5.5 8086指令系统,从功能上包括六大类:,数据传送 算术运算 逻辑运算和移位 串操作 控制转移 处理器控制,43,一、数据传送指令,通用数据传送 输入/输出 地址传送 标志位寄存器操作,44,1. 通用数据传送,一般数据传送指令 堆栈操作指令 交换指令 查表换码指令 字位扩展指令,特点: 该类指令的执行对标志位不产生影响,45,一般数据传送指令,一般数据传送指令 MOV 格式:MOV dest,src 操作:src dest 例: MOV AL,BL,46,一般数据传送指令,注: 两操作数字长必

13、须相同 ; 不允许在两个存储单元之间直接进行数据传送; 不允许在两个段寄存器之间直接进行数据传送; 在源操作数是立即数时,目标操作数不能是段寄存器; IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。,47,一般数据传送指令,判断下列指令的正确性: MOV AL, BX MOV AX, SI+05H MOV DS, 1000H MOV DX, 09H MOV 1200 , SI MOV BYTE PTRBX, 5 MOV WORD PTRBX, 5,48,一般数据传送指令例,将(*) 的ASCII码2AH送入内存1000H开始的100个单元中: MOV DI,1000H M

14、OV CX,64H MOV AL,2AH AGAIN:MOV DI,AL INC DI ;DI+1 DEC CX ;CX-1 JNZ AGAIN ;CX0则继续 HLT,49,上段程序在代码段中的存放形式,設CS=109EH,IP=0100H,则各条指令存放地址如下: CS : IP 109E:0100 MOV DI,1000H 109E:0103 MOV CX,64H 109E:0105 MOV AL,2AH 109E:0107 MOV DI,AL 109E:0109 INC DI 109E:010A DEC CX 109E:010B JNZ 0107H 109E:010D HLT,50,数

15、据段中的分布,送上2AH后数据段中相应存储单元的内容改变如下: DS:1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A

16、2A 2A 2A 2A DS:1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 00,偏移地址DI,51,堆栈操作指令,堆栈操作的原则 先进后出 以字为单位,52,堆栈操作指令,入栈指令 PUSH 格式: PUSH OPRD 出栈指令 POP 格式: POP OPRD,53,入栈指令PUSH,指令执行过程: (SP) (SP)-2 (SP)-1 操作数高字节 (SP)-2 操作数低字节,54,入栈指令PUSH,设AX=1234H,SP

17、=1200H 执行 PUSH AX 指令后堆栈区的状态:,1200H,堆栈段,SP-2=11FEH,12H,34H,1200H,堆栈段,12H 34H,AX,入栈后,入栈前,55,出栈指令POP,指令执行过程: (SP) 操作数低字节 (SP)+1 操作数高字节 (SP)(SP)+2,56,出栈指令的操作,执行 POP AX 堆栈区的状态:,12H,34H,11FEH,堆栈段,代码段,PUSH,12 34,AX,SP+2,57,堆栈操作指令说明,指令的操作数必须是16位的; 操作数可以是寄存器或存储器两单元,但不能是立即数; 不能从栈顶弹出一个字给CS; PUSH和POP指令在程序中一般成对出

18、现; PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。,58,堆栈操作指令例,PUSH AX PUSH BX PUSH WORD PTRBX POP WORD PTRBX POP AX POP BX,59,交换指令,格式: XCHG MEM/REG,MEM/REG 两操作数必须有一个是寄存器操作数 不允许使用段寄存器 例: XCHGAX,BX XCHG2000,CL,60,查表换码指令,格式: XLAT 将累加器AL中的值换为内存表格中的某个值。 用BX的内容代表内存表格首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址 操作:BX+AL AL,61,查表换

19、码指令例,数据段中存放有一张ASCII码转换表,设表首地址为2000H,现欲查出表中第11个代码的ASCII码 (设DS=4000H),62,查表换码指令例,30,31,32,.,39,41,42,.,45,46,.,42000H+0,42000H+11,0,1,2,9,A,B,E,F,63,查表换码指令例,可用如下指令实现: MOV BX,2000H ;(BX)表首地址 MOV AL,0BH ;(AL)序号 XLAT ; 查表转换 执行后得到:(AL)=42H,64,字位扩展指令,将符号数的符号位扩展到高位; 指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及AX,DX 无符号数的扩展规

20、则为在高位补0,字节到字的扩展 字到双字的扩展,65,字节到字的扩展指令,格式: CBW 操作:将AL内容扩展到AX 规则:若最高位=1,则执行后AH=FFH 若最高位=0,则执行后AH=00H,66,字到双字的扩展指令,格式: CWD 操作:将AX内容扩展到DX AX 规则:若最高位=1,则执行后DX=FFFFH 若最高位=0,则执行后DX=0000H,67,字位扩展指令例,MOV AL,44H CBW MOV AX,0AFDEH CWD MOV AL,86H CBW,执行结果,?,68,2. 地址传送指令,取偏移地址指令LEA LDS指令 LES指令,69,取偏移地址指令LEA,将变量的1

21、6位偏移地址取出送目标寄存器 格式: LEA REG,MEM 指令要求源操作数必须是一个内存单元地址,目标操作数是16位通用寄存器。,内存单元地址,70,LEA指令,比较下列指令: LEA SI,DATA1 MOV SI,DATA1 MOV BX,BX LEA BX,BX,符号地址,71,LEA指令,DATA1,12H,34H,1100H,88H,77H,BX=1100H,72,LEA指令在程序中的应用,将数据段中首地址为MEM1 的50个字节的数据传送到同一逻辑段首地址为MEM2的区域存放。编写相应的程序段 。,73,LEA指令在程序中的应用,开 始,取源地址,取目标地址,送数据块长度到CL

22、,传送一个字节,修改地址指针,修改计数值,计数值=0?,结 束,N,Y,74,LEA指令在程序中的应用,LEA SI,MEM1 LEA DI,MEM2 MOV CL,50 NEXT: MOV AL,SI MOV DI,AL INC SI INC DI DEC CL JNZ NEXT HLT,75,取远地址指针指令,LDS reg,MEM32 LES reg,MEM32 指令中源操作数是存储器某4个连续单元的内容取出,低地址两单元的数据送reg(间址寄存器),高地址两单元的数据送DS或ES。,76,LDS指令例,例: LDS SI,1200H MOV AX,SI,指令执行后:,77,LDS指令例

23、,DS = 6000H SI = 1234H AX = 2233H,12H,34H,00H,60H,1200H,数据段 1,DS,SI,数据段2,33H,22H,61234H,78,LES指令例,LES DI,1200H MOV AX,DI,12H,34H,00H,60H,1200H,数据段,ES,DI,附加段,33H,22H,61234H,79,3. 标志寄存器操作指令,LAHF SAHF PUSHF POPF,隐含操作数AH,隐含操作数FLAGS,80,LAHF,SAHF,LAHF ;将FLAGS的低8位装入AH SAHF ;将AH 的内容送FLAGS的低8位,CF,PF,AF,ZF,CF

24、,.,AH,FLAGS,D15,D0,D7,D0,81,PUSHF,POPF,针对FLAGS的堆栈操作指令 将标志寄存器的内容入栈或从堆栈弹出,82,4. 输入/输出指令,专门面向I/O端口操作的指令 指令格式: 输入指令 IN AX(AL),PORT 输出指令 OUT PORT,AX(AL),端口地址,累加器,83,输入/输出指令寻址方式,直接寻址 直接给出8位端口地址,可寻址256个端口 间接寻址 16位端口地址由DX指定,可寻址64K个端口,84,例,IN AL,50H ;从50H端口读一个字节到AL中 IN AX,50H ;从50H端口读一个字节到AL中 从51H端口读一个字节到AH中

25、 MOV DX,03FFH IN AL,DX OUT DX,AX OUT 3FH,AL,85,二、算术运算类指令,加法运算指令 减法运算指令 乘法指令 除法指令 十进制调整指令,算术运算指令的执行大多对状态标志位会产生影响,86,1. 加法指令,普通加法指令ADD 带进位位的加法指令ADC 加1指令INC 加法指令对操作数的要求与MOV指令相同,87,ADD 指令,格式: ADD OPRD1,OPRD2 操作: OPRD1 OPRD1+OPRD2,ADD指令的执行对全部6个状态标志位都产生影响,88,ADD 指令例,MOV AL,78H ADD AL,0A6H 指令执行后6个状态标志位的状态=

26、?,89,ADD 指令例,01111000 + 10100110 00011110,1,标志位状态: CF= SF= AF= ZF= PF= OF=,90,ADC 指令,指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样 指令的操作: OPRD1 OPRD1+OPRD2+CF ADC指令多用于多字节数相加运算,91,INC 指令,格式: INC OPRD 操作: OPRD OPRD+1,常用于在程序中修改地址指针,不能是段寄存器或立即数,92,2. 减法指令,普通减法指令SUB 考虑借位的减法指令SBB 减1指令DEC 比较指令CMP 求补指令NEG 减法指令对操作数的要求与对应的加

27、法指令相同,93,SUB 指令,格式: SUB OPRD1,OPRD2 操作: OPRD1 OPRD1- OPRD2 对标志位的影响与ADD指令同,94,SBB 指令,指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样 指令的操作: OPRD1 OPRD1- OPRD2- CF SBB指令多用于多字节数相减运算,95,DEC 指令,格式: DEC OPRD 操作: OPRD OPRD 1 指令常用于在程序中修改计数值,其对操作数的 要求与INC指令相同,96,应用程序例,MOV BL,2 NEXT1 :MOV CX,0F000H NEXT2: DEC CX JNZ NEXT2 DEC BL JNZ NEXT1 HLT,97,NEG 指令,格式: NEG OPRD 操作: OPRD 0 OPRD 用0减去操作数,相当于对该操作数求补码,8/16位寄存器或存储器操作数,98,CMP 指令,格式: CMP OPRD1,OPRD2 操作: OPRD1- OPRD2 指令执行的结果不影响目标操作数!,99,CMP 指令,用途: 用于比较两个数的大小,可作为条件转移指令转移的条件 指令对操作数的要求及对标志位的影响与SUB指令相同,100,CMP 指令比较原理,两个无符号数的比较: CMP AX,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论