5-10下第2章.ppt_第1页
5-10下第2章.ppt_第2页
5-10下第2章.ppt_第3页
5-10下第2章.ppt_第4页
5-10下第2章.ppt_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

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

文档简介

1、,第2章 指令系统及汇编语言程序设计,2.1 8088/8086的寻址方式 2.2 8088/8086的指令系统 一.传送指令、二.算术指令 三.逻辑运算和移位指令 四.串操作指令 五.程序控制指令 1.无条件转移、调用和返回指令 2.条件转移指令 3.循环指令 4.软中断指令及中断返回指令 六.处理器控制指令 七.输入输出指令 2.3 汇编语言,本次课内容,上次课回顾-与前面所学知识的衔接,图:8088的功能结构,1 2 3 4,内部寄存器,IP,ES,SS,DS,CS,输入/输出控制电路,外部总线,执行部分控制电路,ALU,标志寄存器,AH AL,BH BL,CH CL,DH DL,SP,

2、BP,SI,DI,通用 寄存器,地址加法器,指令队列8088:4字节(8086:6字节),执行部件 (EU),总线接口部件 (BIU),16位,20位地址总线,ALU数据总线,功能:管理8088与系统总线的接口 负责CPU对存储器和外设进行访问,功能:负责指令的译码、执行和数据的运算,32位Intel 80 x86 微处理器的常用寄存器(80386/80486/Pentium系列),例: 数据传送指令 32位寄存器 MOV EAX,12345678H 16位寄存器 MOV AX,5678H 8位寄存器 MOV AH,56H 8位寄存器 MOV AL,78H,逻辑地址(16位, 汇编语言编程时采

3、用) 形式为 段地址: 偏移地址 段地址 段寄存器 CS, DS, ES, SS内容 说明逻辑段在主存中的起始位置 偏移地址 说明主存单元距离段起始位置的偏移量 物理地址(20位,地址线寻址,实际地址) 物理地址=段地址*16+偏移地址,8086存储器物理地址和逻辑地址,例:MOV AX, ES: 2000H;AXES:2000H,例:逻辑地址 1460:100、1380:F00 物理地址 14700H 14700H,8088CPU的存储格式-小端存储方式,低地址,LSB,MSB,00002H单元的内容为: 00002H = 34H 00002H“字”单元的内容为: 00002H = 1234

4、H 00002H号“双字”单元的内容为:00002H = 78561234H,多字节数据在存储器中占连续的多个存储单元 存放:低字节存入低地址,高字节存入高地址 表达:用低地址表示多字节数据占据的地址空间 同一个存储器地址可以是字节单元地址、字单元地址、双字单元地址等等,设DS=0 00002H“双字”单元 MOV EAX,0002H 00002H“字”单元 MOV AX,0002H 00002H单元 MOV AH,0002H,高地址,存储单元,存储器地址,内存(存储器)一般图示方法,若段地址=28E9H,两种方法表同一存储区,方法一,方法二,存储器寻址,操作数在内存中,用内存地址表示。 指令

5、中用中括号包含偏移地址,表达存储单元的内容 程序设计时,8088采用逻辑地址表示内存地址 若段地址在默认的段寄存器中,指令中只需给出操作数的偏移地址,逻辑地址:,MOV AX, 2000H;AXDS:2000H,数据传送指令,数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令 传送指令把数据从一个位置传送到另一个位置 除标志寄存器传送指令外,均不影响标志位 重点掌握 MOV XCHG XLAT PUSH POP LEA,1. 传送指令MOV 2. 交换指令XCHG 3. 地址传送指令LEA等 4. 堆栈操作指令PUSH、POP 5. 字节、字转换指令 6. 标志寄存器传

6、送指令 7. XLAT换码指令,MOV指令传送功能图解,立即数imm,段寄存器seg CS DS ES SS,通用寄存器 AX BX CX DX BP SP SI DI,存 储 器,MOV reg/mem,imm ;立即数送至寄存器或主存-立即数传送 MOV reg/mem/seg,reg ;寄存器送(段)寄存器或主存-寄存器传送 MOV reg/seg,mem ;内存送(段)寄存器-存储器传送 MOV reg/mem,seg ;段寄存器送寄存器或主存-段寄存器传送,mem,reg,非法指令的主要现象: 两个操作数的类型不一致 两个操作数都是存储器 段寄存器的操作有一些限制,寄存器,存储器,例

7、:MOV AX,2000H,二.算术指令,算术运算类指令用来执行二进制的算术运算:加减乘除。 这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志 重点掌握 加法指令:ADD (add binary numbers) ADC (add with carry) INC (increment by 1) 减法指令:SUB (subtract binary values) SBB (subtract with borrow) DEC (decrement by 1) CMP (compare) NEG (negate),SUB与CMP?,ADD与AD

8、C?,INC与DEC?,SUB与SBB?,ADD与SUB?,ADC与SBB?,DEC与NEG?,上次课回顾结束,返回,三. 逻辑运算和移位指令,1. 逻辑运算指令 AND OR XOR NOT TEST 2. 移位指令 SHL SHR SAR 3. 循环移位指令 ROL ROR RCL RCR 该类指令以二进制位为基本单位进行数据的操作 注意这些指令对标志位的影响, 尤其CF,1. 逻辑运算指令,AND、OR、XOR和TEST设置CFOF0,根据结果设置SF、ZF和PF状态,而对AF未定义;它们的操作数组合与ADD、SUB等一样: 运算指令助记符 reg, imm/reg/mem 运算指令助记

9、符 mem, imm/reg NOT不影响标志位,操作数与INC、DEC和NEG一样: NOT reg/mem,逻辑与指令AND,逻辑与(逻辑乘)运算规则: 两位都是逻辑1,则结果是1;否则,结果是0 逻辑与指令AND: 按位进行逻辑与,结果返回目的操作数 AND dest,src;逻辑与:destdest src 设置CFOF0 影响SF,ZF和PF,T,B,A,逻辑非指令NOT,逻辑非(逻辑反)运算规则: 原来为0的位变成1,原来为1的位变成0 逻辑非指令NOT: 按位进行逻辑非,结果返回操作数 NOT reg/mem ;逻辑非:reg/memreg/mem 不影响状态标志位,例题:逻辑运

10、算,mov al,45h;逻辑与 al=01h and al,31h;CF=OF=0,SF=0、ZF=0、PF=0 mov al,45h;逻辑或 al=75h or al,31h;CF=OF=0,SF=0、ZF=0、PF=0 mov al,45h;逻辑异或 al=74h xor al,31h;CF=OF=0,SF=0、ZF=0、PF=1 mov al,45h;逻辑非 al=0bah not al;标志不变,逻辑运算例题,mov al,75h ;AL75H and al,32h ;AL30H ;CFOF0 SF0 ZF0 or al,71h ;AL71H xor al,0f1h ;AL80H n

11、ot al ;AL7FH,逻辑运算的屏蔽作用,AND指令复位某些位(同0与),不影响其他位(同1与) OR指令置位某些位(同1或),不影响其他位(同0或) XOR求反某些位(同1异或),不影响其他位(同0异或) and bl,11110110b;BL中D0和D3清0,其余位不变 or bl,00001001b;BL中D0和D3置1,其余位不变 xor bl,00001001b;BL中D0和D3求反,其余位不变,复位Reset:清0,置位Set:置1,例:大写小写 AND DFH 小写大写 OR 20H,逻辑运算的屏蔽作用-字母大小写(ASCII码)转换,结论1:大小写字母的ASCII码值相差2

12、0H 结论2:大小写字母的ASCII码值仅D5位不同,方法1(加减指令): “ADD DL,20H” “SUB DL,20H” 方法2(逻辑指令): “OR DL,20H” “AND DL,0DFH”,大小写互换(异或指令): “XOR DL,20H”,大写小写 AND DFH 小写大写 OR 20H,测试指令TEST,按位进行逻辑与运算,不返回逻辑与结果 TEST dest,src ;作逻辑与运算:dest src TEST指令像AND指令一样来设置状态标志 设置CF = OF = 0,根据结果设置SF、ZF和PF状态 TEST指令常用于检测一些条件是否满足,一般后跟条件转移指令,目的是利用

13、测试条件转向不同的分支,AND与TEST指令的关系, 同SUB与CMP指令的关系一样,例:测试为0或1,test al,01h;测试AL的最低位D0 jnz there;标志ZF=0,即D0=1 ;则程序转移到there .;否则ZF=1,即D0=0,顺序执行 there: .,TEST指令通常用于检测一些条件是否满足,但又不希望改变原操作数的情况,TEST,2.移位指令(shift),将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作 移位指令的第一个操作数是指定的被移位的操作数,可以是寄存器或存储单元; 后一个操作数表示移位位数: 该操作数为1,表示移动一位;当移位位数

14、大于1时,则用CL寄存器值表示,该操作数表达为CL 按照移入的位设置进位标志CF,根据移位后的结果影响SF、ZF、PF,SHL reg/mem,1/CL ;逻辑左移,最高位进入CF,最低位补0,SHR reg/mem,1/CL ;逻辑右移,最低位进入CF,最高位补0,SAL reg/mem,1/CL ;算术左移,最高位进入CF,最低位补0,SAR reg/mem,1/CL ;算术右移,最低位进入CF,最高位不变,SAL与SHL相同,S: Shift L: Left R: Right A: Arithmetic,示意图,移位指令对标志的影响,按照移入的位设置进位标志CF 根据移位后的结果影响SF

15、、ZF、PF 对AF没有定义 如果进行一位移动,则按照操作数的最高符号位是否改变,相应设置溢出标志OF:如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF = 1;否则OF = 0。当移位次数大于1时,OF不确定,移位指令的功能和示例,返回,移位前后最高位相同OF=0; 否则OF=1,逻辑左移指令SHL (shift logical left)算术左移指令SAL (shift algebraic left),SHL/SAL reg/mem,1/CL ;reg/mem左移1或CL位 ;最低位补0,最高位进入CF,演示,SHL和SAL指令的功能,逻辑右移指令SHR (shift

16、logical right),SHR reg/mem,1/CL ;reg/mem右移1/CL位 ;最高位补0,最低位进入CF,演示,SHR指令的功能,算术右移指令SAR (shift algebraic right),SAR reg/mem,1/CL ;reg/mem右移1/CL位 ;最高位不变,最低位进入CF,演示,SAR指令的功能,数据移位例题,mov dx,6075h ;DX01100000 01110101B shl dx,1 ;DX11000000 11101010B CF0 sar dx,1 ;DX11100000 01110101B CF0 shr dx,1 ;DX0111000

17、0 00111010B CF1 mov cl,4;CL4,标志不变 sar dx,cl ;DX00000111 00000011B CF1,移位指令,mov cl,4 mov al,0f0h;al=f0h shl al,1;al=e0h ;CF=1,SF=1、ZF=0、PF=0,OF=0 shr al,1;al=70h ;CF=0,SF=0、ZF=0、PF=0、OF=1 sar al,1;al=38h ;CF=0,SF=0、ZF=0、PF=0、OF=0 sar al,cl;al=03h ;CF=1,SF=0、ZF=0、PF=1,移位指令实现乘法运算例:将AL寄存器中的无符号数乘以10存入AX,

18、方法一: 用乘法指令 mov bl,10 mul bl; AXALBL 方法二: 用加法指令循环结构实现乘法运算 mov cx,10 mov bl,al xor ax,0;实现ax0,同时使CF0 again: add al,bl adc ah,0 loop again 方法三: 用移位指令实现乘法运算 xor ah,ah;实现AH0,同时使CF0 shl ax,1;AX2AL mov bx,ax;BXAX2AL shl ax,1;AX4AL shl ax,1;AX8AL add ax,bx;AX8AL2AL10AL,sub ah,ah and ah,0,逻辑左移一位相当于无符号数乘以2 逻辑

19、右移一位相当于无符号数除以2,3. 循环移位指令,循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。分为: ROL reg/mem,1/CL ;不带进位循环左移 ROR reg/mem,1/CL;不带进位循环右移 RCL reg/mem,1/CL;带进位循环左移 RCR reg/mem,1/CL;带进位循环右移 循环移位指令的操作数形式与移位指令相同,按指令功能设置进位标志CF,但不影响SF、ZF、PF、AF标志,演示,演示,演示,演示,ROL(rotate left) ROR(rotate right) RCL(rotate left through carry) RCR(

20、rotate right through carry),R: Rotate L: Left R: Right C: Carry flag,RCL/RCR示意图,ROL/ROR示意图,不带进位的循环移位指令,返回,带进位的循环移位指令,返回,(c)带进位左循环移位RCL,(d)带进位右循环移位RCR,ROL指令的功能,ROR指令的功能,RCL指令的功能,RCR指令的功能,32位数据移位,例:将DX.AX中32位数值乘2(左移一位),考虑32位数据的右移等操作,shl ax,1 ;AX左移1位,最低位补0,最高位进入CF rcl dx,1 ;带进位循环左移1位,例2.36:位传送,;把AL最低位送

21、BL最低位,保持AL不变 ror bl,1 ror al,1 rcl bl,1 rol al,1,AL之D0,例:BCD码合并,;AH.AL分别存放着非压缩BCD码的两位 ;将它们合并成为一个压缩BCD码存AL and ax,0f0fh;保证高4位为0 mov cl,4 rol ah,cl;也可以用shl ah,cl add al,ah;也可以用or al,ah,四.串操作类指令,8088的串操作类指令能对主存中一个连续区域的数据(如数组、字符串等)进行传送、比较等同样操作。当DF=0 地址自动增量,从低地址到高地址处理字符串;当DF=1地址减量 指令有: 传送数据串:MOVS,STOS,LO

22、DS 检测数据串:CMPS,SCAS 重复前缀:REP,REPZ,REPNZ 源操作数-DS:SI 目的操作数-ES:DI 每执行一次串操作指令,SI和DI将自动修改: 1(对于字节串)或2(对于字串) 执行指令CLD后,DF = 0,地址指针增1或2 执行指令STD后,DF = 1, 地址指针减1或2 利用循环程序也可以实现串操作指令的功能,例:MOVSB (move string byte) ;ES:DIDS:SI ;当DF=0,SISI+1 DIDI+1 当DF=1,SISI-1 DIDI-1,例题:,设指令执行前,ES=8492H,DS=8493H, DI=7A50H,SI=7A51H

23、,DF=0,求指令MOVSB 指令执行完内存有何变化?SI=?DI=? 分析: ES:DI内存 物理地址=8492H16+7A50H=8C370H DS:SI内存 物理地址=8493H16+7A51H=8C381H 执行完该指令后 物理地址为8C370H单元内容变为3AH, 其它单元内容不变 DI=7A50H+1=7A51H SI=7A51H+1=7A52H,内存 物理地址,MOVSB ;ES:DIDS:SI ;当DF=0,SISI+1 DIDI+1 当DF=1,SISI-1 DIDI-1,例题:,设指令执行前,ES=1,DS=2, DI=4,SI=7,DF=0, 求下列程序执行完内存有何变化

24、? AX=? MOVSB MOVSB MOV AX,DI 分析: DS:SI内存 物理地址=216+7=00027H ES:DI内存 物理地址=116+4=00014H 执行完第1条指令MOVSB后 物理地址为00014H单元内容变为22H, 其它单元内容不变 DI=4+1=5 SI=7+1=8 执行完第2条指令MOVSB后 物理地址为00015H单元内容变为11H, 其它单元内容不变 DI=5+1=6 SI=8+1=9 执行完第3条指令MOV AX,DI后 DS:DI内存 物理地址=216+6=00026H AX=2233H,内存,MOVSB ;ES:DIDS:SI ;当DF=0,SISI+

25、1 DIDI+1 当DF=1,SISI-1 DIDI-1,控制转移类指令的目标地址(逻辑地址为 段地址CS : 偏移地址IP),五. 程序控制指令,程序控制指令用于实现分支、循环等程序结构,是仅次于传送指令的常用指令 重点掌握:JMP/Jcc/LOOP/JCXZ CALL/RET 程序代码在代码段 逻辑地址 CS:EIP CS:指明代码段在主存中的段地址 IP:给出将要执行指令的偏移地址 程序顺序执行,处理器自动增量IP 程序控制转移,IP(和CS)随之改变,指令指针寄存器IP与代码段寄存器CS联合使用以确定下一条指令的存储单元地址CS:IP 控制转移类指令通过改变IP(和CS)值,实现程序执

26、行顺序的改变,一般在执行程序控制指令时产生,决定程序转移在一个代码段内进行,还是段间进行 a.段内转移 程序转移在一个代码段内进行 CS不变,IP变 段内转移近程转移(near) 在当前代码段64KB范围内转移( 32KB范围) 段内转移短程转移(short) 在当前代码段内 127范围的(转移转移范围可以用一个字节表达),转移地址寻址方式,存放程序当前执行指令代码的内存地址 逻辑地址为 CS:IP 物理地址为 CS*16+IP,b.段间转移-远程转移(far) 程序从一个代码段转移到另一个代码段 CS、IP均改变 转移的目标地址必须用32位数表达-逻辑地址(CS:IP),转移地址寻址方式,实

27、际编程时,汇编程序会根据目标地址的属性,自动处理成短程转移、近程转移或远程转移 程序员可用操作符short、near ptr 或far ptr 强制成为需要的转移类型,无条件转移、调用和返回指令指令(1)无条件转移指令,只要执行无条件转移指令JMP,就使程序转到指定的目标地址,从目标地址处开始执行指令 操作数OPRD是要转移到的目标地址(目的地址、转移地址) 可为段内转移(近程转移near 、短程转移short),段间转移(远程转移far),JMP OPRD;程序转向OPRD指定的地址,例 CMP AL,3 JMP NEXT ;转至NEXT MOV BX,3 NEXT: MOV BX,2 程序

28、执行结果BX=2,JMP (unconditionl jump),子程序指令调用和返回指令,子程序是完成特定功能的一段程序,这些子程序可被主程序调用,并且执行完毕又返回主程序继续执行 当主程序需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行(程序转向子程序的入口地址-首地址) 当运行完子程序功能后,采用RET返回指令回到主程序继续执行,演示,转移指令有去无回 子程序调用需要返回, 其中利用堆栈保存返回地址,放主程序,放子程序未尾,主程序与子程序,CALL label,主程序,RET,子程序,回到CALL指令后的指令处返回地址,(2) 子程序调用指令CALL(call a pr

29、ocedure),CALL指令无条件转向目标地址(类似JMP)指向的子程序,当子程序执行完毕,仍返回到CALL的下一条指令继续执行原来的程序, CALL指令放主程序,执行时首先将断点(即CALL指令的下一条指令的地址)IP或CS:IP压入堆栈,然后将目标地址(即子程序首地址)置IP或CS:IP,于是程序转移到被调用的子程序 CALL指令分成2种类型 CALL NEAR PTR OPRD ;段内调用 CALL FAR PTR OPRD ;段间调用 CALL指令需要保存返回地址(断点压入堆栈) 段内调用入栈偏移地址IP SPSP2,SS:SPIP 段间调用入栈偏移地址IP和段地址CS SPSP2,

30、SS:SPCS SPSP2,SS:SPIP,段内调用 不需要更改CS段地址,只要改变IP偏移地址 段间调用 需要更改CS段地址和IP偏移地址,(3) 子程序返回指令RET(reture),RET;无参数返回 RET i16;有参数返回 ,除执行RET指令外 还SPSPi16(16位立即数) RET指令放子程序末尾,执行时将堆栈中的返回地址出栈送IP(段内和段间调用)和CS(仅段间调用),使子程序执行完毕能返回主程序 弹出CALL指令压入堆栈的返回地址 段内返回出栈偏移地址IP IPSS:SP, SPSP2 段间返回出栈偏移地址IP和段地址CS IPSS:SP,SPSP2 CSSS:SP,SPS

31、P2,十六进制转换为ASCII码的子程序,2.子程序:将DL低4位的一位16进制数转换成ASCII码 htoascproc and dl,0fh;只取DL的低4位 or dl,30h;DL高4位变成3 cmp dl,39h ;是09,还是0Ah0Fh ? jbe htoend;是09,转移 add dl,7;是0Ah0Fh,加上7 htoend:ret;子程序返回 htoascendp,转换原理,1.主程序:调用子程序 mov dl,28h ;提供参数AL call htoasc ;调用子程序 incdl,ASCII码 0=30h 9=39h A=41h B=42h,十六进制数转换为ASCII

32、码的原理,五.程序控制指令 2. 条件转移指令,条件转移指令Jcc根据状态标志寄存器PSW中标志位的状态确定程序是否转移。通用格式为: Jcc label ;cc条件满足,程序转向label指定的目标地址; 否则,顺序执行 注:JCC转移地址label在当前代码段内 127范围(段内转移-短程转移);JMP为段间转移 cc表示利用标志判断的条件,例 CMP AL,3 JZ NEXT ;ZF=1 转至NEXT MOV BX,3 NEXT: MOV BX,2,一般在执行程序控制指令时产生,决定程序转移在一个代码段内进行,还是段间进行 a.段内转移 程序转移在一个代码段内进行 CS不变,IP变 段内

33、转移近程转移(near) 在当前代码段64KB范围内转移( 32KB范围) 段内转移短程转移(short) 在当前代码段内 127范围的(转移转移范围可以用一个字节表达),转移地址寻址方式,存放程序当前执行指令代码的内存地址 逻辑地址为 CS:IP 物理地址为 CS*16+IP,b.段间转移-远程转移(far) 程序从一个代码段转移到另一个代码段 CS、IP均改变 转移的目标地址必须用32位数表达-逻辑地址(CS:IP),转移地址寻址方式,代码段,代码段,条件转移指令Jcc 的分类,Jcc指令不影响标志,但要利用标志 根据利用的标志位不同,分成三种情况: 判断单个标志位状态 单个OF、SF、Z

34、F、PF、CF 比较无符号数高低组合CF、ZF 比较有符号数大小组合OF、SF、ZF,Jcc指令实际虽然只有16条,但却有30个助记符 条件转移指令的含义 采用多个助记符,目的是为了方便记忆和使用,状态标志寄存器 PSW,条件转移指令的含义,JZ/JEJump on Zero/Equal JNZ/JNEJump on Not Zero/Equal JSJump on Sign JNSJump on Not Sign JP/JPEJump on Parity/Parity Even JNP/JPOJump on Not Parity/Parity Odd JOJump on Overflow J

35、NOJump on Not Overflow JC/JB/JNAEJump on Carry/Below/Not Above or Equal JNC/JNB/JAEJump on Not Carry/Not Below/Above or Equal JBE/JNAJump on Below or Equal/Not Above JNBE/JAJump on Not Below or Equal/Above JL/JNGEJump on Less/Not Greater or Equal JNL/JGEJump on Not Less/Greater or Equal JLE/JNGJump

36、on Less or Equal/Not Greater JNLE/JGJump on Not Less or Equal/Greater,(1) 判断单个标志位状态, JZ/JE (ZF=1)和JNZ/JNE (ZF=0) 利用零标志ZF,判断结果是否为零(或相等) JS (SF=1)和JNS (SF=0) 利用符号标志SF,判断结果是正是负 JO (OF=1)和JNO (OF=0) 利用溢出标志OF,判断结果是否产生溢出 JP/JPE (PF=1)和JNP/JPO (PF=0) 利用奇偶标志PF,判断结果中“1”的个数是偶是奇 JC/JB/JNAE (CF=1)和JNC/JNB/JAE (

37、CF=0) 利用进位标志CF,判断结果是否进位或借位,例:JZ/JNZ指令,test al,80h;测试最高位 jz next0;D70(ZF1),转移 mov ah,0ffh;D71,顺序执行 jmp done;无条件转向 next0:mov ah,0 done:. test al,80h;测试最高位 jnz next1;D71(ZF0),转移 mov ah,0;D70,顺序执行 jmp done;无条件转向 next1:mov ah,0ffh done:.,;若AL最高位=0.设置AH=0;若AL最高位=1.设置AH=FFH;,判断若寄存器AX=3,则令BX0,否则令BX2 cmp ax,

38、 3;比较ax与3 jz next;相等,转移 mov bx,2;不相等,令bx2 jmp done;无条件转移指令 next:mov bx,0;相等的处理:令bx0 done:hlt - 判断若AX 3,则令BX0,否则令BX2 cmp ax, 3 jnc next; 转移 mov bx,2 jmp done next:mov bx,0 done:hlt,判断是否为字母Y;寄存器AL中是字母Y(含大小写),则令AH0,否则令AH1,cmp al,y;比较AL与小写字母y jz next;相等,转移 cmp al,Y ;不相等,继续比较AL与大写字母Y jz next;相等,转移 mov ah

39、,-1;不相等,令AH1 jmp done;无条件转移指令 next:mov ah,0;相等的处理:令AH0 done:hlt,(2)比较无符号数高低(大小),无符号数的大小dest.src利用CF确定高(Above)低(Below)、利用ZF标志确定相等(Equal) 两数的大小分成4种关系: JC/JB/JNAE (CF=1) : dest src JNC/JNB/JAE (CF=0) :dest src JBE /JNA (CF=ZF=1): dest src JNBE /JA (CF=ZF=0) : dest src,例 cmp ax,bx;比较ax和bx jnc next;若axbx

40、,转移 xchg ax,bx;若axbx,交换 next:.,CMP dest.src,首先利用比较CMP、TEST等影响状态标志的指令形成条件 然后条件转移指令Jcc根据标志状态控制程序转移到不同程序段,(3) 比较有符号数大小-OF、SF、ZF,组合OF、SF标志判断有符号数的大(Greater大于:SFOF=0 SF、OF同为1或0)小(Less),利用ZF标志确定相等与否(相等:ZF=1 ) 两数的大小分成4种关系,分别对应4条指令 JL(JNGE):目的操作数小于(不大于等于)源操作数 JNL(JGE):目的操作数不小于(大于等于)源操作数 JLE(JNG):目的操作数小于等于(不大

41、于)源操作数 JNLE(JG):目的操作数不小于等于(大于)源操作数,例:CMP A(目的),B(源),求较大值两无符号数AX、BX的较大值放wmax,cmp ax,bx;比较AX和BX jnc next;若AXBX,转移 xchg ax,bx;若AXBX,交换 next:mov wmax,ax,如果AX和BX存放的是有符号数, 则条件转移指令应采用JGE指令,判断A B 不低于(大于等于) 有符号数 JNL / JGE指令 无符号数 JNC / JNB / JAE指令,比较有符号数大小,有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal)

42、两数的大小分成4种关系:,JL(JNGE):dest src JNL(JGE):dest src JLE(JNG):dest src JNLE(JG):dest src,CMP dest.src,首先利用比较CMP、TEST等影响状态标志的指令形成条件 然后条件转移指令Jcc根据标志状态控制程序转移到不同程序段,3. 循环指令,循环指令用于控制程序的重复执行,根据CX(存放循环次数)决定循环(转移至目标地址label )还是顺序执行(下一条指令) 循环指令 LOOP label CX-1 0 ,则转移(首先CXCX1;然后判断若CX0,转移到label ;否则,顺序执行) LOOPZ / LO

43、OPE label CX-1 0 且ZF=1,则转移 LOOPNZ / LOOPNE label CX-1 0 且ZF=0, 则转移 JCXZ label CX0,则转移,dec cx jnz label,例:记录附加段中string字符串包含空格的个数,mov cx,count;设置循环次数 mov si,offset string xor bx,bx;bx0,记录空格数 jcxz done ;如果长度为0,退出 mov al,20h again:cmp al,es:si jnz next;ZF0 非空格,转移 inc bx;ZF=1 是空格,个数加1 next:inc si loop ag

44、ain ;字符个数减1,不为0继续循环,mov cx,400h ;设置循环次数:1K1024400H mov dx,2000h mov si,0 ;设置循环初值:SI指向数据段源缓冲区开始 mov dx,4000h mov di,0 ;DI指向附加段目的缓冲区开始(附加段) again:mov al,si;循环体:实现数据传送 mov es:di,al;每次传送一个字节 movsb inc si;SI和DI指向下一个单元 inc di loop again ;循环条件判定:循环次数减1,不为0转移(循环),例:数据块传送(字节)-将数据段20000H开始的1K字节的数据块传送至附加段首地址为4

45、0000H的存储区域,例:数据块传送(字)-将数据段sbuf开始的1K字节的数据块传送至附加段首地址为dbuf的存储区域数据块传送,mov cx,200h ;设置循环次数:1K2200H mov si,offset sbuf ;设置循环初值:SI指向数据段源缓冲区开始 mov di,offset dbuf ;DI指向附加段目的缓冲区开始(附加段) again:mov ax,si;循环体:实现数据传送 mov es:di,ax;每次传送一个字 add si,2;指向下一个(字)单元 add di,2 loop again ;循环条件判定:循环次数减1,不为0转移(循环),4. 软中断指令及中断返

46、回指令,中断(Interrupt)是又一种改变程序执行顺序的方法, 分为 硬中断(外部中断) 中断请求信号 INTR、NMI 来自CPU之外的原因引起的中断外部设备 可屏蔽中断:可由CPU的中断允许标志IF控制 非屏蔽中断:不受CPU的中断允许标志IF控制 软中断(内部中断) 程序指令请求 CPU内部执行程序引起的中断 8088CPU支持256个软中断,每个中断用一个编号(中断向量号)区别 中断指令有3条:INT i8 IRET INTO INT i8 ;软中断调用指令:产生i8号中断(类似CALL) ;主程序使用,其中i8表示中断向量号 IRET ;中断返回指令:实现中断返回(类似RET)

47、;中断服务程序使用,中断请求引脚,INTR(Interrupt Request) 可屏蔽中断请求,输入、高电平有效 有效时,表示外设向CPU申请可屏蔽中断 该中断请求是否响应受控于I(中断允许标志)、可以被屏蔽掉 NMI(Non-Maskable Interrupt) 不可屏蔽中断请求,输入、上升沿有效 有效表示外界向CPU申请不可屏蔽中断 该中断请求不能被CPU屏蔽,所以优先级别高于INTR(可屏蔽中断),主程序与中断服务子程序,主程序,IRET,中断服务程序,断点,中断请求,中断请求可以来自处理器外部的中断源(硬中断); 也可以由处理器执行指令引起(软中断), 例如执行INT i8指令。,

48、主程序与子程序,CALL label,主程序,RET,子程序,回到CALL指令后的指令处返回地址,六. 处理器控制类指令,处理器控制类指令用来控制CPU的状态,使CPU暂停、等待或空操作等 NOP;空操作指令,等同于“xchg ax,ax”指令 不执行任何操作,但占用一个字节存储单元,空耗一个指令执行周期 NOP常用于程序调试 在需要预留指令空间时用NOP填充 代码空间多余时也可以用NOP填充 还可以用NOP实现软件延时 事实上,NOP和XCHG AX,AX的指令代码一样,都是 90H HLT;暂停指令:CPU进入暂停状态 暂停指令使CPU进入暂停状态,这时CPU不进行任何操作。当CPU发生复

49、位或来自外部的中断时,CPU脱离暂停状态 HLT指令可用于程序中等待中断。当程序中必须等待中断时,可用HLT,而不必用软件死循环。然后,中断使CPU脱离暂停状态,返回执行HLT的下一条指令 还有其他指令: LOCK ESC WAIT,七. 8088/8086的输入输出指令,输入指令(IN:将外设数据传送给CPU内的AL/AX) IN AL,i8;字节输入 IN AL,DX;字节输入 IN AX,i8;字输入 IN AX,DX;字输入 输出指令(OUT:将CPU内的AL/AX数据传送给外设) OUT i8,AL;字节输出 OUT DX,AL;字节输出 OUT i8,AX;字输出 OUT DX,A

50、X;字输出,指令系统小 结,小结-8088/8086指令系统,7种类型: 一. 数据传送指令; 二. 算术运算指令; 三. 逻辑运算和位移指令; 四. 串操作指令; 五. 程序控制指令; 六. 处理器控制指令; 七. 输入/输出指令。 指令系统教学要求 熟悉汇编语言的语句格式,掌握8088/8086基本指令: 数据传送:MOVXCHG、PUSHPOP、LEA 加减运算:ADDSUB、ADCSBB、CMP、INCDEC 位操作:ANDORXORNOTTEST、SHLSHR SAR、ROLRORRCLRCR 控制转移:JMPJccLOOP、CALLRET、INT n 串操作指令: MOVSLODS

51、STOS、REP,8088指令执行过程示意(例:MOV AX,0064H;机器代码B8H 64H 00H 执行该指令时CS=1000H,IP=100 ),一. 数据传送指令小结,数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令 传送指令把数据从一个位置传送到另一个位置 除标志寄存器传送指令外,均不影响标志位 重点掌握 MOV (move data) XCHG (exchange) XLAT (translate) PUSH (push word onto stack) POP (pop word off stack) LEA (load effective addre

52、ss),1. 传送指令MOV 2. 交换指令XCHG 3. 地址传送指令LEA等 4. 堆栈操作指令PUSH、POP 5. 字节、字转换指令 6. 标志寄存器传送指令 7. XLAT换码指令,MOV指令传送功能图解,立即数imm,段寄存器seg CS DS ES SS,通用寄存器 AX BX CX DX BP SP SI DI,存 储 器,MOV reg/mem,imm ;立即数送至寄存器或主存-立即数传送 MOV reg/mem/seg,reg ;寄存器送(段)寄存器或主存-寄存器传送 MOV reg/seg,mem ;内存送(段)寄存器-存储器传送 MOV reg/mem,seg ;段寄存器送寄存器或主存-段寄存器传送,mem,reg,非法指令的主要现象: 两个操作数的类型不一致 两个操作数都是存储器 段寄存器的操作有一些限制,寄存器,存储器,例:MOV AX,2000H,二.算术指令,算术运算类指令用来执行二进制的算术运算:加减乘除。 这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志 重点掌握 加法指令:ADD (add binary

温馨提示

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

评论

0/150

提交评论