好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

汇编语言第3章 指令系统.ppt

171页
  • 卖家[上传人]:我**
  • 文档编号:115524021
  • 上传时间:2019-11-13
  • 文档格式:PPT
  • 文档大小:4.37MB
  • / 171 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 汇编语言,熊迎军 xyj@ 13776655525 教学楼A509/A510,Di 第三章 指令系统,3.1 指令与指令系统 3.2 IA-32指令系统 3.3 本章小结,3.1 指令与指令系统,指令 控制计算机完成某种操作的命令 指令系统 处理器所能识别的所有指令的集合 指令的兼容性: 同一系列机的指令都是兼容的 16位8086指令系统是Intel 80x86系列微处理器指令系统的基础,,零操作数指令: 操作码 单操作数指令: 操作码 操作数 双操作数指令: 操作码 操作数,操作数 多操作数指令: 三操作数及以上,指令 长度,指令的执行速度,指令的字长影响指令的执行速度 对不同的操作数,指令执行的时间不同:,,,,快!,立即数,寄存器,存储器,按功能划分为六大类:,数据传送 算术运算 逻辑运算和移位 串操作 程序控制 处理器控制,,3.2 IA-32指令系统,Intel 8086指令系统共有117条基本指令,通用数据传送 输入输出 地址传送 标志位操作,3.2.1 数据传送类指令,一般数据传送指令 堆栈操作指令 交换指令 查表转换指令 字位扩展指令,特点: 该类指令的执行对标志位不产生影响,,3.2.1.1 通用数据传送类指令,(1)一般数据传送指令,一般数据传送指令: MOV 格式: MOV dest,src 操作: src 例: MOV AL,BL,,dest,注意点: 两操作数字长必须相同; 两操作数不允许同时为存储器操作数;两操作数不允许同时为段寄存器;在源操作数是立即数时,目标操作数不能是段寄存器; IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。

      MOV CS,3000H ;不正确 MOV AX,3000H ; MOV CS,AX ;正确 MOV SS,1000H ;不正确 MOV DI,1000H MOV SS,DI ;正确,如果要将数据送入段寄存器(CS、DS、ES、SS),必须先将这个数送入一个非段寄存器,然后在送到段寄存器例1,判断下列指令的正确性: MOV AL,BX;错误,操作数类型不同 MOV AX,[SI]05H;正确 MOV [BX][BP],BX;错误,不能将两个基址寄存器组合一起寻址 MOV DS,1000H;错误,立即数不能给段寄存器赋值 MOV [1200],[SI];错误,不能用1条指令完成两个存储单元之间的数据传送,例2例,将立即数2AH送入内存数据段1000H开始的100个单元中 题目分析: 确定首地址 确定数据长度 写一次数据 修改单元地址 修改长度值 判断写完否? 未完继续写入,否则结束,1063H,,100B,,1000H,,2AH,,数据段,2AH,2AH,2AH,程序段: MOV DI,1000H MOV CX,64H MOV AL,2AH AGAIN:MOV [DI],AL INC DI ;DI+1 DEC CX ;CX-1 JNZ AGAIN ;CX≠0则继续 HLT,上段程序在代码段中的存放形式,设CS=109EH,IP=0100H,则各条指令在代码段中的存放地址如下: CS : IP 机器指令 汇编指令 109E:0100 B80010 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,数据段中的分布,送上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 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],,(2)堆栈操作指令,压栈指令 PUSH 格式: PUSH OPRD 出栈指令 POP 格式: POP OPRD,OPRD只能是16位寄存器或存储器操作数(两单元),压栈指令 PUSH,指令执行过程: SP - 2 → SP 操作数高字节 → SP+1 操作数低字节 → SP,,,,,,,┇,,SP,,堆栈段,,SP,,高8位,低8位,,压栈指令的操作,设AX=1234H,SP=1200H 执行 PUSH AX 指令后堆栈区的状态:,,,,,,1200H,┇,堆栈段,,SP-2=11FEH,,,,,,,,12H,34H,1200H,┇,堆栈段,,,,,12H 34H,AX,,入栈后,入栈前,,,,出栈指令POP,指令执行过程: SP SP+1 SP ← SP+2,,,操作数低字节,操作数高字节,,,,,,,┇,,SP,,堆栈段,,SP,,高8位,低8位,出栈指令的操作,执行 POP AX,,,,,,,,,,12H,34H,11FEH,┇,堆栈段,,代码段,,PUSH,,12 34,,,,AX,SP+2,,,,,,,,,,1200H,┇,,出栈后,出栈前,堆栈操作指令说明,指令的操作数必须是16位的; 操作数可以是寄存器或存储器两单元,但不能是立即数; 不能从栈顶弹出一个字给CS(允许PUSH CS); PUSH和POP指令在程序中一般成对出现; PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。

      例:,MOV AX,9000H MOV SS,AX MOV SP,E200H MOV DX,38FFH PUSH DX PUSH AX POP DX POP AX,,,如此,会使DX和AX的内容互换,(3)交换指令,格式: XCHG REG,MEM/REG 注: 两操作数必须有一个是寄存器操作数 不允许使用段寄存器 两个操作数字长要一致 例: XCHG AX,BX XCHG [2000],CL,(4)查表指令,格式: XLAT;(AL) ((BX)+(AL)) 或:XLAT src_table ; (src_table表示要查找的表的首地址) 说明: 用BX的内容代表表格首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址 表格长度最大不能超过256个字节 操作: 将BX+AL所指单元的内容送AL,例:,数据段中存放有一 张ASCII码转换表, 设首地址为2000H, 现欲查出表中第11 个代码的ASCII码,,,,,30,31,32,.,,,,,39,41,42,.,,,45,46,,,,,2000H+0,2000H+11,‘0’,‘1’,‘2’,‘9’,‘A’,‘B’,‘E’,‘F’,,可用如下指令实现: MOV BX,2000H ;BX←表首地址 MOV AL,0BH ;AL←序号 XLAT ;查表转换 执行后:AL = 42H 还可用其他方法实现,如: MOV BX,2000H MOV AL,[BX+0BH],(5)字位扩展指令,将有符号数的符号位扩展到高位; 指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及AX,DX 无符号数的扩展规则为在高位补0,字节到字的扩展指令,格式: CBW 操作: 将AL内容扩展到AX 规则: 若最高位=1,则执行后AH=FFH 若最高位=0,则执行后AH=00H,字到双字的扩展指令,格式: CWD 操作: 将AX内容扩展到DX AX,高位存放在DX中,隐含了操作数AX。

      规则: 若最高位=1,则执行后DX=FFFFH 若最高位=0,则执行后DX=0000H,例:,判断以下指令执行结果: MOV AL,44H CBW MOV AX,0AFDEH CWD MOV AL,86H CBW,掌握: 指令的格式及操作 指令的两种寻址方式 指令对操作数的要求,3.4.1.2 输入输出指令,专门面向I/O端口操作的指令 指令格式: 输入指令: IN acc,PORT 输出指令 :OUT PORT,acc,端口地址,,根据端口地址码的长度,指令具有两种不同的端口地址表现形式 直接地址 端口地址为8位时,指令中直接给出8位端口地址(立即数方式); 寻址256个端口 间接地址 端口地址为16位时,指令中的端口地址必须由DX指定; 可寻址64K个端口例:,IN AX,80H MOV DX,2400H IN AL,DX OUT 35H ,AX OUT AX,35H,取偏移地址指令LEA *LDS指令 *LES指令,,3.4.1.3 地址传送指令,(1)取偏移地址指令LEA,操作: 将变量的16位偏移地址取出送目标寄存器 当程序中用符号地址表示内存偏移地址时,须使用该指令 格式: LEA REG,MEM 指令要求: 源操作数MEM必须是一个存储器操作数,目标操作数必须是16位通用寄存器,一般是间址寄存器(BX,BP,SI,DI)。

      例1: 设(BX)=1000H,(DS)=6000H,(61050H)=33H,(61051H)=44H比较以下两条指令的执行结果 LEA BX,[BX+50H] MOV BX,[BX+1] 则,第1条指令执行后,(BX)=?,第2条指令执行后,(BX)=?例2: 将数据段中首地址为MEM1 的50个字节的数据传送到同一逻辑段首地址为MEM2的区域存放编写相应的程序段 开 始,取源地址,,,,取目标地址,送数据块长度到CL,传送一个字节,,,,修改地址指针,修改计数值,计数值=0?,结 束,,,,,,,,,,,,,,,,N,Y,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,(2)LDS指令,LDS reg16,mem32; (reg16) ((mem32)+1:(mem32)) (DS) ((mem32)+3:(mem32)+2) 其中,源操作数mem32位存储器操作数,给出的是内存中4个连续的存储单元的首地址目标操作数reg16必须是BX、BP、SI、DI等4个间址寄存器之一。

      该指令用于把存储器mem32中存放的一个32位远地址指针(包括偏移地址)送到reg16和DS4个存储单元的前两个单元的内容作为偏移地址送reg16,后两个单元的内容作为段地址装入段寄存器DS,例1: 设(DS)=6000H,内存地址为60348H开始的4个单元中存放了一个32位的远指针98011H(该地址存放的内容是3412H),以下指令将该指针装入DS:SI中 LDS SI,[0348H] MOV AX,[SI] 指令执行后:(SI)=8011H,(DS)=9000H,(AX)=3412H,(3)LES指令 这条指令的格式及功能与LDS指令非常类似,不同的是,两个高地址单元中给出的段地址不是送往DS,而是送到ES 例如:将上例中的LDS指令改为LES指令,则指令执行后: (SI)=8011H,(ES)=9000H,而DS内容没有改变,LAHF SAHF PUSHF POPF,,,,隐含操作数AH,隐含操作数FLAGS。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.