微机原理与汇编语言.ppt

上传人:wuy****n92 文档编号:73259952 上传时间:2023-02-17 格式:PPT 页数:92 大小:1.14MB
返回 下载 相关 举报
微机原理与汇编语言.ppt_第1页
第1页 / 共92页
微机原理与汇编语言.ppt_第2页
第2页 / 共92页
点击查看更多>>
资源描述

《微机原理与汇编语言.ppt》由会员分享,可在线阅读,更多相关《微机原理与汇编语言.ppt(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统2.3节 目录 2.3.1-2.3.3(位)位操作指令位操作指令 1 1、逻辑运算指令、逻辑运算指令 AND/OR/XOR/NOT/TEST AND/OR/XOR/NOT/TEST 2 2、移位指令、移位指令 SHL/SHR/SAL/SAR SHL/SHR/SAL/SAR 3 3、循环移位指令、循环移位指令 ROL/ROR/RCL/RCR ROL/ROR/RCL/RCR 1第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 2.3.1 逻辑运算指令(1)1)1)逻辑运算指令逻辑运算指令 1.与运算指令与运算指令AND

2、 AND reg/mem,imm AND reg/mem,reg/mem;排除操作数排除操作数“mem,mem”注释:注释:操作数格式同加减法指令;操作数格式同加减法指令;设置设置CF=OF=0,影响,影响SF、ZF、PF,对,对 AF无定义。无定义。“与与”操作的特点与操作的特点与ANDAND指令的主要作用指令的主要作用 (X0=0)(X1=X)使某些位清使某些位清0(屏蔽某些位屏蔽某些位)(XX=X)影响标示位影响标示位(SF、ZF、PF,CF=OF=0)例:例:AND AL,01H;屏蔽;屏蔽AL的的D7D1,保留,保留D0 AND AL,AL ;清除;清除CF、OF 或或 设置标志设置

3、标志ANDAND2第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统2.或运算指令或运算指令OR 注释:指令格式、标志设置同注释:指令格式、标志设置同AND指令。指令。“或或”操作的特点与操作的特点与OROR指令的主要作用指令的主要作用 (X0=X)(X1=1)使某些位置使某些位置1 (XX=X)影响标示位影响标示位(SF、ZF、PF,CF=OF=0)例:例:OR BL,0F0H;使;使BL高高4位置位置1,低,低4位不变位不变 OR AX,8080H OR BL,BL ;清除;清除CF、OF 或或 设置标志设置标志OROR3第第四四章章 8 8 0 0 8 8 6 6的的指指令

4、令系系统统3.异或运算指令异或运算指令XOR 注释:指令格式、标志设置同注释:指令格式、标志设置同AND指令。指令。“异或异或”操作的特点与操作的特点与XORXOR指令的主要作用指令的主要作用 (X 0=X)(X 1=X)对特定位对特定位“求反求反”(X X=0)将寄存器清将寄存器清0,影响标示位,影响标示位(SF、ZF、PF,CF=OF=0)例:例:XOR AL,0FH;AL高高4位不变,低位不变,低4位求反位求反 XOR CL,55H;CL偶数位求反,奇数位不变偶数位求反,奇数位不变 XOR AX,AX ;将;将AX置置0,CF=OF=0 XOR BX,BX ;将;将BX置置0,CF=OF

5、=0XORXOR4第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 逻辑运算指令(2)4.测试指令测试指令TEST 注释:指令格式及运算均与注释:指令格式及运算均与AND指令相同,但是不保留运算指令相同,但是不保留运算结果,即不影响目的操作数,只根据运算结果设置标志且结果,即不影响目的操作数,只根据运算结果设置标志且CF=OF=0。测试指令测试指令TEST的作用:的作用:不改变操作数,测试操作数或不改变操作数,测试操作数或 操作数的指定位。例如:操作数的指定位。例如:IN AL,PORT;从端口PORT输入数据TEST AL,00101010B;测试第1、3、5位JNZ NEX

6、T ;任一位不为0,则转移到NEXTNEXT:.TESTTEST5第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统5.非运算指令非运算指令NOT NOT reg/mem (不能是立即数不能是立即数);(dst)0FFH(dst)(字节求反);(dst)0FFFFH(dst)(字求反)注释:不影响任何标志。注释:不影响任何标志。例例:MOV AX,3080H NOT AX(AX)=?综上所述,五条逻辑操作指令中,只有综上所述,五条逻辑操作指令中,只有NOT指令不影响任指令不影响任何标志,其它四条指令(何标志,其它四条指令(AND、OR、XOR、TEST)都对标志)都对标志位有影响

7、,且位有影响,且CF=OF=0都成立。都成立。NOTNOT6第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统表4.5 大写和小写英文字母ASCII码的对比 大大 写写 字字 母母 小小 写写 字字 母母 A=41H=0100 0001B A=41H=0100 0001B B=42H=0100 0010B B=42H=0100 0010B Z=5AH=0101 1010B Z=5AH=0101 1010B a=61H=0110 0001B a=61H=0110 0001B b=62H=0110 0010B b=62H=0110 0010B z=7AH=0111 1010B z=7

8、AH=0111 1010B 7第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 以以下下几几条条指指令令判判断断从从键键盘盘输输入入的的字字符符是是否否为为Y,但但对对键键入入的的字符大写或小写不加区别,同样对待。字符大写或小写不加区别,同样对待。MOV AH,1;接收由键盘输入的一个字符;接收由键盘输入的一个字符INT 21H ;字符的;字符的ASCII码存码存ALAND AL,11011111B ;屏蔽第;屏蔽第5位,转换为大写字母位,转换为大写字母CMP AL,Y ;字符是否为;字符是否为Y?JE YES ;如是,转到;如是,转到YES ;否则,;否则,YES:位操作目录

9、位操作目录8第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 2.3.2 移位指令(1)2)2)移位指令移位指令 共四条指令,分成逻辑左移、算术左移、逻辑右移共四条指令,分成逻辑左移、算术左移、逻辑右移和算术右移,其中两条左移指令对应同一条机器指令,和算术右移,其中两条左移指令对应同一条机器指令,所以,从机器指令的角度来说,移位指令只有三条。所以,从机器指令的角度来说,移位指令只有三条。MSB LSB0MSB LSBMSB LSBCFSHL/SALCF0SHRCFSAR符号位不变符号位不变9第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 移位指令(2)1.左移

10、指令(逻辑左移、算术左移:一条指令)左移指令(逻辑左移、算术左移:一条指令)SHL reg/mem,1/CL;操作数左移操作数左移1位或位或CL规定的规定的 ;位数,最低位补位数,最低位补0,最高位进,最高位进CF。SAL reg/mem,1/CL;同同SHL 2.右移指令(逻辑右移右移指令(逻辑右移 SHR;算术右移;算术右移 SAR)SHR reg/mem,1/CL;操作数右移操作数右移1位或位或CL规定的规定的 ;位数,最高位补位数,最高位补0,最低位进,最低位进CF。SAR reg/mem,1/CL;操作数右移操作数右移1位或位或CL规定的规定的 ;位数,最高位不变,最低位进位数,最高

11、位不变,最低位进CF。演示演示演示演示演示演示演示演示演示演示演示演示10第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 移位指令(3)注注 释释 标志设置标志设置 AF:对:对AF无定义;无定义;CF:按移入的值或为:按移入的值或为0或为或为1;根据移位后的结果设置根据移位后的结果设置SF、ZF、PF;OF:当移动:当移动1位位时,移位后如果符号位时,移位后如果符号位(最高位最高位)发发生变化生变化(比较移位前后比较移位前后),则,则OF=1,符号位不发生变化,符号位不发生变化,则则OF=0,移位次数大于,移位次数大于1时,时,OF不定。不定。操作数左移一位,相当于乘操作数

12、左移一位,相当于乘2(对有符号数同理,(对有符号数同理,只要只要OF=0,结果就对)。,结果就对)。11第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 移位指令(4)(end)操作数逻辑右移(操作数逻辑右移(SHR)一位,相当于无符号)一位,相当于无符号数除以数除以2;操作数算术右移(;操作数算术右移(SAR)一位,相当于有符)一位,相当于有符号数除以号数除以2。指令举例指令举例 SHL AX,1 SAR BYTE PTR BP+SI,1 SHR BH,1 SAR AL,3 MOV CL,3 SAR AL,CL12第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统

13、统 例4.8 将一个16位无符号数乘以10。该数原来存放在以FACTOR为首地址的两个连续的存储单元中(低位在前,高位在后)。因为FACTOR10=(FACTOR8)+(FACTOR2),故可用左移指令实现以上乘法运算。编程如下:MOV AX,FACTOR;(AX)被乘数 (设(AX)=1234H)SHL AX,1 ;(AX)=FACTOR2MOV BX,AX ;暂存BXSHL AX,1 ;(AX)=FACTOR4SHL AX,1 ;(AX)=FACTOR8ADD AX,BX ;(AX)=FACTOR10 HLT 以上程序的执行时间大约需26个时钟。如用乘法指令编程,执行时间将超过130个时钟

14、。13第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统用乘法指令编程:-a138B:0100 mov ax,1234(mov ax,factor)138B:0103 mov bx,000a138B:0106 mul bx138B:0108-g=0100 0108AX=B608 BX=000A CX=0000 DX=000014第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 例例4.9 将将一一个个16位位无无符符号号数数除除以以512。该该数数原原来来存存放放在在以以DIVIDAND为首地址的两个连续的存储单元中。为首地址的两个连续的存储单元中。MOV AX,

15、DIVIDAND MOV CL,9 SHR AX,CL HLT15第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统课堂练习课堂练习课堂练习课堂练习分别写出下列程序片段的执行结果和分别写出下列程序片段的执行结果和CFCF、OFOF的状态:的状态:1 1、MOV ALMOV AL,78H78H SHL AL SHL AL,1 12 2、MOV CLMOV CL,2 2 MOV AL MOV AL,94H94H SHR AL SHR AL,CLCL3 3、MOV ALMOV AL,96H96H SAR AL SAR AL,1 1(ALAL)=FOH=FOH,(,(CFCF)=0=0,

16、(,(OFOF)=1=1(ALAL)=25H=25H,(,(CFCF)=0=0,(,(OFOF)不定)不定(ALAL)=CBH=CBH,(,(CFCF)=0=0,(,(OFOF)=0=0位操作目录位操作目录16第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 2.3.3 循环移位指令(1)2.3.3 2.3.3 循环移位指令循环移位指令 小循环(不带进位)左移(小循环(不带进位)左移(ROL)和右移()和右移(ROR)大循环(带进位)左移(大循环(带进位)左移(RCL)和右移()和右移(RCR)MSB LSBCFROLCFMSB LSBRORMSB LSBCFRCLCFMSB

17、LSBRCR17第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 循环移位指令(2)(end)1.小循环移位指令小循环移位指令ROL、ROR ROL reg/mem,1/CL;左移左移 ROR reg/mem,1/CL;右移右移 2.大循环移位指令大循环移位指令RCL、RCR RCL reg/mem,1/CL;左移左移 RCR reg/mem,1/CL;右移右移 例例1.将将DX,AX中的中的32位数左移一位。位数左移一位。SHL AX,1 RCL DX,1移位指令和循环移位指令结合,可实现移位指令和循环移位指令结合,可实现32位数乘位数乘2除除2。DXAX演示演示演示演示演示

18、演示演示演示演示演示演示演示演示演示演示演示18第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统课堂练习课堂练习课堂练习课堂练习分别写出下列程序片段的执行结果:分别写出下列程序片段的执行结果:1 1、MOV ALMOV AL,93H93H ROL AL ROL AL,1 1 ROL AL ROL AL,1 12 2、MOV CLMOV CL,2 2 MOV AL MOV AL,93H93H ROR AL ROR AL,CLCL3 3、CLCCLC MOV AL MOV AL,93H93H RCL AL RCL AL,1 1(ALAL)=27H=27H(ALAL)=E4H=E4H

19、(ALAL)=26H=26H位操作目录位操作目录(ALAL)=4EH=4EH4 4、CLCCLC MOV AL MOV AL,93H93H RCR AL RCR AL,1 1 RCR AL RCR AL,1 149H49HA4HA4H19第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统2.4节 目录 4.3.5 4.3.5 控制转移类指令控制转移类指令 1.1.转移指令转移指令 1)1)无条件转移指令无条件转移指令 2)2)条件转移指令条件转移指令 2.2.循环控制指令循环控制指令 3.3.子程序调用及返回指令子程序调用及返回指令 4.4.中断控制指令中断控制指令 处理器控制指

20、令处理器控制指令 系统功能调用系统功能调用20第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 2.4.1 无条件转移指令(1)1)1)无条件转移指令无条件转移指令(JMP)(1).(1).段内转移段内转移直接寻址直接寻址 JMP SHORT LABEL;IPIP+8位偏移量位偏移量 JMP NEAR PTR LABEL;IPIP+16位偏移量位偏移量注释:注释:指令中指令中“LABEL”称为称为“标号标号”,是某一条指,是某一条指令的名字,其物理意义为指令在内存中的偏移地址。令的名字,其物理意义为指令在内存中的偏移地址。段内:不改变段寄存器(在当前代码段内),只段内:不改变段

21、寄存器(在当前代码段内),只改变指令指针寄存器;直接寻址:改变指令指针寄存器;直接寻址:汇编指令汇编指令中直接给出中直接给出了转移目标的地址,但从指令的操作来说,应属相对寻了转移目标的地址,但从指令的操作来说,应属相对寻址。址。21第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统7F7F34347F7F2424JMTONEJMTONENEXTIP代码段代码段.例例:JMTONE:JMP NEXTJMTONE:JMP NEXTJMTONE+2:AND AL,7FHJMTONE+2:AND AL,7FHNEXT:XOR AL,7FHNEXT:XOR AL,7FHJMTONE+2JM

22、TONE+2EBHEBH偏移量偏移量02H02H13F2:0005 EB02 JMP 000913F2:0007 247F AND AL,7F13F2:0009 347F XOR AL,7F位移量位移量(8(8位位)22第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统短转移的转移范围 短转移的转移范围:相对于短转移的转移范围:相对于JMP的下一条指令,的下一条指令,转移范围为转移范围为128127;相对于;相对于JMP指令,转移范围指令,转移范围为为-126+129;近转移:相对于;近转移:相对于JMP的下一条指令,转的下一条指令,转移范围为移范围为3276832767(327

23、6532770)。)。指令举例:指令举例:JMP SHORT L_PRO1 ;短转移短转移,目标指令为目标指令为L_PRO1 JMP NEAR PTR L_PRO2上面的两例中上面的两例中SHORTSHORT和和NEARNEAR可不加。可不加。23第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 无条件转移指令(2)(2).段内转移段内转移间接寻址间接寻址 JMP r16/m16;IPr16 或或 IPm16 指令举例指令举例 JMP SI ;IPSI,通过寄存器间接给出指令偏移地址。通过寄存器间接给出指令偏移地址。JMP BX ;IPBX JMP WORDPTRBX ;通过存

24、储器间接给出指令的通过存储器间接给出指令的偏移地址偏移地址,而存储器寻址方式为寄存器而存储器寻址方式为寄存器BX间接寻址。间接寻址。JMP WORD PTRBP+DI+20H24第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 无条件转移指令(3)(3).段间转移段间转移直接寻址直接寻址 JMP (FAR PTR)LABEL ;IP LABEL的偏移地址,的偏移地址,CSLABEL的段地址的段地址注释:注释:“LABEL”是位于另一个代码段的某一条指令的是位于另一个代码段的某一条指令的名字;另外,指令中的名字;另外,指令中的“FAR PTR”可以省略,因为汇可以省略,因为汇编程

25、序可以自动识别:编程序可以自动识别:“LABEL”与相应的与相应的“JMP”指令指令是否在同一代码段内,从而产生段内或段间转移指令的是否在同一代码段内,从而产生段内或段间转移指令的机器代码。机器代码。CODE2 SEGMENTCODE2 SEGMENT CODE1 SEGMENTCODE1 SEGMENT PRO1PRO1:MOV MOV JMP FAR PTR PRO1JMP FAR PTR PRO1 CODE1 ENDS CODE2 ENDS CODE1 ENDS CODE2 ENDS25第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 无条件转移指令(4)(end)(4)

26、.段间转移段间转移间接寻址间接寻址 JMP FAR PTR mem(JMP DWORD PTR mem);IP mem,CS mem+2注释:通过存储器的一个双字单元提供转移目标的段地注释:通过存储器的一个双字单元提供转移目标的段地址和偏移地址,低位字为偏移地址,高位字为段地址。址和偏移地址,低位字为偏移地址,高位字为段地址。JMP DWORD PTRBX+DI JMP DWORD PTRBX+DI DS=4000H DS=4000H,BX=1230HBX=1230H,DI=02HDI=02H计算物理地址:计算物理地址:40000H+1230H+2=41232H40000H+1230H+2=4

27、1232H返回返回I PI PC SC S121234345656787826第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 REPNE SCASB ;如未找到,重复扫描;如未找到,重复扫描 JZ MATCH ;如找到,则转;如找到,则转MATCH MOV DL,N ;字符串中无回车,则;字符串中无回车,则(DL)N JMP DSPY ;转到;转到DSPY MATCH:DECDI ;(DI)(DI)1 MOV DL,Y ;(DL)Y DSPY:MOV AH,02H INT 21H ;显示字符;显示字符 HLT 无条件转移与条件转移举例无条件转移与条件转移举例27第第四四章章

28、8 8 0 0 8 8 6 6的的指指令令系系统统 2.4.2 条件转移指令(1)2)2)条件转移指令条件转移指令 概概 述述 条件转移指令的通用格式为:条件转移指令的通用格式为:Jcc label 如条件满足,则发生转移如条件满足,则发生转移:IPIP+8位偏移量位偏移量 如条件不满足,则不转移,顺序执行下条指令如条件不满足,则不转移,顺序执行下条指令。所有的条件转移指令均为两字节机器指令,第所有的条件转移指令均为两字节机器指令,第2字节为字节为8位偏移量,因而转移范围与位偏移量,因而转移范围与“JMP SHORT”指指 令相同。令相同。指令中的条件即为状态标志的状态或状态的组合,指令中的条

29、件即为状态标志的状态或状态的组合,8086CPU共有共有16种可用的条件,使用这些条件的条件转种可用的条件,使用这些条件的条件转移指令可分成三类。移指令可分成三类。28第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统29第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 条件转移指令(2)(1).1).判断单个状态标志判断单个状态标志 助记符助记符 标标 志志 说说 明明 JZ/JE ZF=1 JZ/JE ZF=1 结果为结果为0 0;两数相等;两数相等 JNZ/JNE ZF=0 JNZ/JNE ZF=0 不为不为0 0;不相等;不相等 JC/JB/JNAE CF

30、=1 JC/JB/JNAE CF=1 加有进位;减有借位;其他加有进位;减有借位;其他 JNC/JNB/JAE CF=0 JNC/JNB/JAE CF=0 无进位;无进位;无借位;其他无借位;其他 JS SF=1 JS SF=1 结果为负结果为负 JNS SF=0 JNS SF=0 结果为正结果为正 JP/JPE PF=1 JP/JPE PF=1 结果的低结果的低8 8位含偶数个位含偶数个“1”“1”JNP/JPO PF=0 JNP/JPO PF=0 结果的低结果的低8 8位含奇数个位含奇数个“1”“1”JO OF=1 JO OF=1 运算结果溢出运算结果溢出 JNO OF=0 JNO OF=

31、0 运算结果不溢出运算结果不溢出JCXZ JCXZ (CX=0 CX=0)串操作是否处理完所有数据串操作是否处理完所有数据30第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 条件转移指令(3)指令举例指令举例 1.1.计算计算 X-Y X-Y,X X和和Y Y为为1616位操作数,结果存入位操作数,结果存入resultresult。MOV AX MOV AX,X X;SUB AX SUB AX,Y Y;JNS NO_NEG JNS NO_NEG ;(;(X-YX-Y)如为正数,不求绝对值)如为正数,不求绝对值 NEG AX NEG AX ;求绝对值;求绝对值 NO_NEG:M

32、OV result,AX NO_NEG:MOV result,AX ;保存结果;保存结果 2.2.设字符的设字符的ASCIIASCII码在码在ALAL,给字符加上奇校验位。,给字符加上奇校验位。AND AL AND AL,7FH 7FH ;D7D7置置0 0,D6D6D0D0不变,测不变,测“1”“1”个数个数 JNP NEXT JNP NEXT ;D6D6D0D0已有奇数个已有奇数个“1”“1”,不处理,不处理 OR AL OR AL,80H 80H ;偶数个;偶数个“1”“1”,校验位置,校验位置“1”“1”NEXT NEXT:31第第四四章章 8 8 0 0 8 8 6 6的的指指令令系

33、系统统 (2).(2).比较无符号数高比较无符号数高/低低(条件为一个标志或标志组合条件为一个标志或标志组合)助记符助记符 标志标志 说说 明明 JB/JNAE/JC CF=1 JB/JNAE/JC CF=1 低于低于/不高于不等于不高于不等于()JNB/JAE/JNC CF=0 JNB/JAE/JNC CF=0 不低于不低于/高于或等于高于或等于()()JBE/JNA CF=1 JBE/JNA CF=1或或ZF=1 ZF=1 低于或等于低于或等于/不高于不高于()()JNBE/JA CF=0 JNBE/JA CF=0且且ZF=0 ZF=0 不低于不等于不低于不等于/高于高于()指令举例指令举

34、例:AX:AX和和BXBX为为无符号数无符号数,比较大小,将较大的数,比较大小,将较大的数放入放入AXAX中。中。CMP AX CMP AX,BX BX ;JNB NEXTJNB NEXT ;如;如AXBXAXBX,不处理,不处理 XCHG AX XCHG AX,BX BX ;AXAXBXBX,AXAX与与BXBX交换交换 NEXTNEXT:A Above/Below32第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 3.3.比较有符号数大比较有符号数大/小小(条件为标志组合条件为标志组合)助记符助记符 标志标志 说说 明明 JL/JNGE SFOF JL/JNGE SFOF

35、且且ZF=0 ZF=0 小于小于/不大于且不等于不大于且不等于()JNL/JGE SF JNL/JGE SFOF OF 不小于不小于/大于或等于大于或等于 ()()JLE/JNG SFOF JLE/JNG SFOF或或ZF=1 ZF=1 小于或等于小于或等于/不大于不大于 ()()JNLE/JG SF JNLE/JG SFOFOF且且ZF=0 ZF=0 不小于且不等于不小于且不等于/大于大于()指令举例指令举例:AX:AX和和BXBX为为有符号数有符号数,比较大小,将较大的,比较大小,将较大的数放入数放入AXAX中。中。CMP AX CMP AX,BX BX ;JNL NEXTJNL NEXT

36、 ;如;如AXBXAXBX,不处理,不处理 XCHG AX XCHG AX,BX BX;AX AXBXBX,AXAX与与BXBX交换交换 NEXTNEXT:返回返回G Greatreat/Less33第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 2.4.3 循环控制指令(1)2 2 循环控制指令循环控制指令 循环结构是程序设计中使用最多的一种结构,为了循环结构是程序设计中使用最多的一种结构,为了方便和简化设计循环程序,方便和简化设计循环程序,80868086提供了三条专用的循环提供了三条专用的循环控制指令:控制指令:LOOP labelLOOP label ;先减先减1 1

37、后判断后判断 ;CX0CX0,循环,循环 下同下同;否则退出;否则退出LOOPZ/LOOPF labelLOOPZ/LOOPF label;CX0CX0且且ZF=1ZF=1,循环,循环;否则退出;否则退出LOOPNZ/LOOPNE labelLOOPNZ/LOOPNE label;CX0CX0且且ZF=0ZF=0,循环,循环;否则退出;否则退出CXCX-1CXCX-1循环条件循环条件 成成 立立?YN示示 意意 图图34第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 循环控制指令(2)(end)程序举例:统计程序举例:统计ESES段中段中stringstring字符串包含空格

38、的个数,字符串包含空格的个数,设字符串的长度为设字符串的长度为countcount字节,结果存入字节,结果存入resultresult单元。单元。MOV CXMOV CX,COUNT COUNT MOV SIMOV SI,OFFSET STRINGOFFSET STRING;取偏移地址;取偏移地址XOR BXXOR BX,BX BX ;记录空格数目;记录空格数目JCXZ DONE JCXZ DONE ;字符串长度为;字符串长度为0 0,退出,退出MOV ALMOV AL,20H 20H ;空格的;空格的ASCIIASCII码码AGAINAGAIN:CMP ALCMP AL,ES:SIES:SI

39、 JNZ NEXT JNZ NEXT ;不是空格,不计数;不是空格,不计数 INC BX INC BX ;是空格,计数;是空格,计数NEXTNEXT:INC SI INC SI ;调整指针,指向下一个;调整指针,指向下一个 LOOP AGAIN LOOP AGAIN ;字符个数减一,不为;字符个数减一,不为0 0,继续循环,继续循环DONEDONE:MOV RESULT MOV RESULT,BXBX ;返回返回35第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 2.4.4 子程序调用及返回指令(1)3.3.子程序调用及返回指令子程序调用及返回指令(断点保护断点保护)子程序是

40、常用的程序结构。采用子程序可以提高编程效子程序是常用的程序结构。采用子程序可以提高编程效率,使程序结构更为清楚,便于维护。率,使程序结构更为清楚,便于维护。1.1.子程序调用指令子程序调用指令CALLCALL(断点进栈断点进栈)CALL CALL指令位于主程序,指令位于主程序,CALLCALL调用的子程序与调用的子程序与CALLCALL指令可以指令可以处于同一代码段内,也可以在不同的代码段,因而分段内调用处于同一代码段内,也可以在不同的代码段,因而分段内调用和段间调用;调用时可以采用直接寻址,也可采用间接寻址,和段间调用;调用时可以采用直接寻址,也可采用间接寻址,故调用指令有四种格式:段内直接

41、调用、段内间接调用、段间故调用指令有四种格式:段内直接调用、段内间接调用、段间直接调用、段间间接调用。直接调用、段间间接调用。指令中指令中“near ptrnear ptr”表示段内调用,表示段内调用,“far ptrfar ptr”表示段表示段间调用,但是由于汇编程序可自动识别间调用,但是由于汇编程序可自动识别“段内段内”和和“段间段间”,故可省略。故可省略。36第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统图5.11 子程序嵌套示意图 37第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 子程序调用及返回指令(2)CALL near ptr label ;

42、段内直接调用;段内直接调用 ;SPSP-2SPSP-2,SS:SPIP IPIP+D16SS:SPIP IPIP+D16 CALL r16/word ptr m16 ;段内间接调用;段内间接调用 ;SPSP-2SPSP-2,SS:SPIP IPr16/m16 SS:SPIP IPr16/m16 CALL far ptr label ;段间直接调用;段间直接调用 ;SPSP-2SPSP-2,SS:SPCS SS:SPCS;CSlabelCSlabel段地址段地址 SPSP-2SPSP-2,SS:SPIP SS:SPIP;IPlabelIPlabel偏移地址偏移地址CALL dword ptr m

43、emCALL dword ptr mem ;段间间接调用;段间间接调用 ;SPSP-2SPSP-2,SS:SPCS,CSmem32+2SS:SPCS,CSmem32+2 ;SPSP-2SPSP-2,SS:SPIP,SS:SPIP,IPmem32IPmem3238第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 子程序调用及返回指令(3)CALLCALL指令举例指令举例CALL NEAR PTR SUB_PRO1CALL NEAR PTR SUB_PRO1(CALL SUB_PRO1CALL SUB_PRO1)CALL BXCALL BX;r16,;r16,通过寄存器间接给出子程

44、序偏移地址通过寄存器间接给出子程序偏移地址CALL WORD PTR BXCALL WORD PTR BX;mem16;mem16,通过存储器的字单元,通过存储器的字单元 间接给出子程序偏移地址,字单元为寄存器间接寻址。间接给出子程序偏移地址,字单元为寄存器间接寻址。CALL WORD PTR BP+SI+2050H CALL WORD PTR BP+SI+2050H;mem16;mem16CALL far ptr sub_proCALL far ptr sub_pro(call sub_procall sub_pro)CALL FAR PTR BX CALL FAR PTR BX CALL

45、FAR PTR BXCALL FAR PTR BXCALL DWORD PTRBXCALL DWORD PTRBX;通过存储器的双字单元间接给;通过存储器的双字单元间接给出子程序地址,双字单元为寄存器间接寻址,低位字为出子程序地址,双字单元为寄存器间接寻址,低位字为子程序偏移地址,高位字为子程序段地址。子程序偏移地址,高位字为子程序段地址。39第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 子程序调用及返回指令(4)2.2.子程序返回指令子程序返回指令RETRET 返回指令为子程序最后执行的指令,作用为返回指令为子程序最后执行的指令,作用为断点出断点出栈栈,返回相应,返回相应

46、CALLCALL指令的下一条指令。根据子程序与主指令的下一条指令。根据子程序与主程序是否同处于一个代码段内,返回指令分为段内返回程序是否同处于一个代码段内,返回指令分为段内返回和段间返回,两类指令的助记符相同,由汇编程序加以和段间返回,两类指令的助记符相同,由汇编程序加以区分,并产生不同的机器指令。区分,并产生不同的机器指令。RETRET;IPSS:SP;IPSS:SP,SPSP+2(SPSP+2(恢复断点恢复断点)RET i16RET i16;IPSS:SP,SPSP+2 SPSP+i16;IPSS:SP,SPSP+2 SPSP+i16RETRET;IPSS:SP,SPSP+2;IPSS:S

47、P,SPSP+2 CSSS:SP,SPSP+2 CSSS:SP,SPSP+2 RET i16RET i16;IP;IP出栈出栈 CS CS出栈出栈 SPSP+i16 SPSP+i1640第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统 子程序调用及返回指令(5)注注 释释 带立即数的返回指令:主程序与子程序使用堆栈传带立即数的返回指令:主程序与子程序使用堆栈传递参数时,当从子程序返回主程序递参数时,当从子程序返回主程序,(SP+i16),(SP+i16)用以释放参用以释放参数所占的堆栈单元。数所占的堆栈单元。所谓正确使用堆栈:通常是指使用了几条所谓正确使用堆栈:通常是指使用了几

48、条“PUSH”“PUSH”指令,就应使用相同条数的指令,就应使用相同条数的“POP”“POP”指令,堆栈指令,堆栈中既不应中既不应“残留残留”数据,也不应数据,也不应“超额超额”使用,否则,使用,否则,断点不能正确恢复。例如,子程序中使用了断点不能正确恢复。例如,子程序中使用了4 4条条PUSHPUSH指令,指令,应有应有4 4条条POPPOP指令与其相配,如只有指令与其相配,如只有3 3条条POPPOP,为,为“残留残留”,如用了,如用了5 5条条POPPOP,则为,则为“超额超额”,都会造成错误。,都会造成错误。41第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统子程序调用

49、及返回指令(6)(end)子程序举例子程序举例 将将AL低低4位的十六进制数转换成位的十六进制数转换成ASCII码。码。4位二进制数表示成十六进制数为位二进制数表示成十六进制数为09、AF,09的的ASCII码为码为30H39H,对,对09直接加直接加30H,即得到其,即得到其ASCII码;如码;如4位二进制数为位二进制数为1010(A),则),则A的的ASCII码为码为0AH+30H+07H。;主程序;主程序 MOV AL MOV AL,XXHXXH CALL H2ASC CALL H2ASC MOV BX,1234H MOV BX,1234H ;子程序;子程序H2ASCH2ASC:AND

50、ALAND AL,0FH0FH OR AL OR AL,30H30H CMP AL CMP AL,39H39H JBE H2END JBE H2END ADD AL ADD AL,07H07HH2ENDH2END:RET RET 是是AF是是09返回返回42第第四四章章 8 8 0 0 8 8 6 6的的指指令令系系统统1处理器控制指令处理器控制指令1)标志位操作指令标志位操作指令 标志位操作指令有以下标志位操作指令有以下7种:种:CLC(CLear Carry flag):清进位标志。指令的操作为:清进位标志。指令的操作为 (CF)0。STC(SeT Carry flag):置进位标志。指令

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁