版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章
寻址方式与指令系统4.1指令系统概述4.28086寻址方式4.38086指令系统4.4例题解析4.1指令系统概述指令:让计算机完成某种操作的命令。机器指令:指令的二进制代码形式。0011110110101101汇编指令:助记符形式的指令。例如:INT21H指令系统:微处理器(CPU)所能执行的指令的集合。它与微处理器有密切的联系,不同的微处理器有不同的指令系统。8086CPU包含133条指令。在本章中我们主要讲解INTEL公司生产的8086/8088CPU的寻址方式以及各种指令系统,并通过具体实例讲述了各条指令的功能和使用方法。4.1指令系统概述例:
MOVAX,CX;将CX的内容送入AX中指令助记符操作数说明要执行的是什么操作指令运算的数据,可以有0个、1个或2个目的源指令地址的名字,可缺省标号:操作数;注释,对指令功能加以说明,可缺省INCCX;CX计数器加1HLT;停机
4.28086寻址方式1.立即数寻址此寻址方式中,指令所需的操作数就在指令中提供,操作数存在代码段中,不需要运行总线周期,从而具有速度快的特点。立即数用于表示常数,给变量赋初值。立即数可以是8位或16位。立即数(常数)取值范围8位16位无符号数00H-FFH(0-255)0000H-FFFFH(0-65535)带符号数80H-7FH(-128~127)8000H-7FFFH(-32768~32767)例:MOVAL,80H;将16进制数80H送入AL寄存器。MOVAX,1090H;将1090H存入AX寄存器,AH中为10H,;AL中为90H。MOV 8000H,DX MOVAX,12.34H 立即数只能是整数,不能是小数、变量或者其它类型的数据。立即数只能作为源操作数。4.28086寻址方式××2.寄存器寻址操作数在CPU的内部寄存器中,指令指定寄存器的内容为操作数。可使用的16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP;其中AX、BX、CX、DX可分成两个8位使用。例:MOVAX,BX;将BX中的内容送入AX中INCCX;将CX中的内容加1ROLAH,1;将AH中的内容循环左移一位寄存器寻址与段地址无关!4.28086寻址方式内存寻址方式在内存寻址方式中,操作数是某个内存单元的内容,指令中给出的是内存单元的有效地址EA(偏移地址),段地址通常在隐含的某个段寄存器中。3.直接寻址方式在直接寻址方式中,操作数的有效地址由指令直接指出。默认的段寄存器为DS。例:
MOVAX,[1070H];将DS段的1070H和1071H两个单元
;的内容送入AX中。4.28086寻址方式对其它段寄存器进行直接寻址时,必须在指令前指出段寄存器名。例:MOVBX,ES:[3000H];将ES段中的3000H和3001H两个
;单元中的内容送入BX。4.寄存器间接寻址操作数的有效地址由寄存器指出。寄存器要用方括号括起来,表示寄存器中的内容,以便与寄存器操作数相区别。
[BX]
[SI]
[DI]
[BP]有效地址=
段寄存器为DS段寄存器为SS4.28086寻址方式例:
MOVAX,[SI]DS=6000H,
SI=1200H,[61200H]=44H,[61201H]=33H44H33H60001200DSSI6000061200
61200HAX存储器数据段
+)120044H33H寄存器相对寻址指令中寄存器内容与指令指定的位移量之和作为操作数所在单元的有效地址。带位移量的寄存器间接寻址。
[BX]
8位位移量[SI]
[DI]
[BP]
16位位移量有效地址=
段寄存器为DS段寄存器为SS+
常用于存取表格中的元素,把表格的起始地址作为位移量,元素的下标值放在间址寄存器中。4.28086寻址方式例:
MOVAX,[BX+0080H];默认段寄存器为DS等价形式:MOVAX,0080H[BX];此形式不常用
MOVAX,[BP+1000H];默认段寄存器为SS等价形式:
MOVAX,
1000H[BP];此形式不常用例:MOVAX,[BX+2A00H]
若DS=6000H,BX=1000H,[63A00H]=66H,[63A01H]=55H
则物理地址=60000H+1000H+2A00H=63A00H
指令执行后:[AX]=5566H(见下页图示)4.28086寻址方式操作码00偏移量低2A偏移量高DS60000BX1000
+2A0063A0063A00HAHALAX代码段数据段.........66H55HMOVAX,[BX+2A00H]基址加变址的寻址若操作数的偏移地址:由基址寄存器(BX或BP)给出——
基址寻址方式由变址寄存器(SI或DI)给出——
变址寻址方式
由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址+变址寻址。EA=[BX][BP]+[SI][DI]同一组内的寄存器不能同时出现!4.28086寻址方式例:
MOVAX,[BX+SI]
;√
等价形式MOVAX,[BX][SI]
MOVAX,[BX+BP];×
等价形式
MOVAX,[BX][BP]
MOVAX,[DI+SI];×
等价形式MOVAX,[DI][SI]4.28086寻址方式
83000操作码DS
80000BX
2000
+SI
100083000HAHALAX代码段数据段.........12H34H例:MOVAX,[BX+SI]假定:DS=8000H,BX=2000H,SI=1000H则物理地址=80000H+2000H+1000H=83000H指令执行后:AL=[83000H]
AH=[83001H]相对的基址加变址寻址在基址加变址寻址的基础上再加上一个相对位移量注意事项同基址加变址寻址EA=[BX][BP]+[SI][DI]+8位位移量16位位移量例:MOVAX,
[BX+SI+0050H];物理地址=DS*10H+BX+SI+0050H
MOVAX,
ES:0050H[BP][DI];物理地址=ES*10H+BP+DI+0050H4.28086寻址方式例:MOVAX,[BX+DI+0200H]若DS=8000H,BX=2000H,DI=1000H则指令执行后AL=[83020H],AH=[83021H]。8320083200HAHALAX+
0200操作码代码段数据段.........12H34HDS
80000BX
2000
DI
1000使用相对的基址加变址寻址方式可以很方便地访问堆栈中的数组。4.28086寻址方式A(0)......A(n-1)A(n)A(1)A(2)[BP](栈顶地址)位移量低地址高地址[SI]寻址方式可分为立即数寻址直接寻址寄存器相对寻址寄存器寻址基址-变址寻址基址-变址相对寻址寄存器间接寻址4.28086寻址方式总结:4.38086指令系统传送类指令主要用于数据的操作和交换。可分成如下6类:1.数据传送指令2.算术运算指令3.逻辑运算和移位指令4.串操作指令5.程序控制指令6.处理器控制指令4.3.1数据传送指令
存储器寄存器I/O
数据传送指令是最简单、最常用的一类指令,它负责把数据、地址或立即数传送到寄存器或存储单元中。数据传送指令可分为如下四种:通用传送指令目标地址传送指令标志位传送指令输入/输出指令4.3.1数据传送指令1.通用数据传送指令MOV指令格式:MOVdest,src;dest←src功能:将源操作数src复制到目的操作数dest中结果:目的操作数的内容等于源操作数的内容,源操作数src的内容不变对标志位的影响:无语法格式:MOVreg/mem/seg,reg/mem/seg/imm4.3.1数据传送指令注意:(1)双操作数指令不允许两个操作数同时为段寄存器或存储器操作数。
MOVseg,seg;错误
MOVmem,mem;错误
(2)立即数不能传送到段寄存器中。
MOVseg,imm ;错误(3)目的操作数不允许使用CS段寄存器。(4)dest与src必须类型匹配,即同时是字节或字类型。若立即数没有明确的类型,MASM负责将立即数扩展为与目的操作数位数相同。有时MASM不能确定内存操作数的类型,需要用BYTEPTR和WORDPTR明确指出是字节或字类型。(5)IP不能作为目的操作数。4.3.1数据传送指令例:错误的MOV指令如下所示:MOVAX,BL
;类型不匹配MOVDS,1000H
;不允许立即数送段寄存器MOV[BX],[SI]
;不允许内存操作数之间传送MOVES,CS
;不允许段寄存器之间传送MOVCS,AX
;CS不能作为目的操作数例:设B是已定义的字节变量MOVAX,B
;错误,类型不匹配MOVAL,0
;正确,MASM可以判断出要送字节04.3.1数据传送指令不能传送的解决办法:用AX作桥梁
存储器←存储器:
MOVAX,MEM1MOVMEM2,AX段寄存器←段寄存器:
MOVAX,DSMOVES,AX段寄存器←立即数:
MOVAX,1234HMOVDS,AX4.3.1数据传送指令2.堆栈操作指令堆栈:存储器的一段区域,按“先进后出”的原则进行存储操作。8086/8088系统中,堆栈位于堆栈段,其段地址由SS指示,SP寄存器作为指针,SP内容始终指向栈顶所在存储单元。堆栈以“字”为单位进行压入弹出操作。作用:在调用一个过程时,保存返回地址;暂时存放寄存器或存储器单元操作数的内容。主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP’执行子程序2转子程序2返回子程序1IP’(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a)主程序调子程序;(b)子程序嵌套示意图压栈弹出IP(下)规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。注意进栈方向是高地址向低地址发展。SPSS堆栈段进栈方向出栈方向栈底栈顶4.3.1数据传送指令低地址高地址4.3.1数据传送指令压栈指令:
PUSHsrc ;将16位操作数src压入堆栈格式为:
PUSHreg例如:PUSHAXPUSHmem例如:PUSH[BX]PUSHsegreg例如:PUSHDS例:PUSH AX ;将AX内容压栈
执行操作(SP)-1←高字节AH
(SP)-2←低字节AL
(SP)←(SP)-24.3.1数据传送指令设AX=1020H低地址存储区(SS段)执行前AX=1020H(SP)存储区(SS段)进栈方向执行后20H10H(AL)(AH)PUSHAX指令执行示意图(SP)-2(SP)高地址低地址高地址(SP)-14.3.1数据传送指令弹出指令
POP dest;将堆栈栈顶的“字”内容弹出至目的操作数中例:POPBX
执行操作:(BL)←(SP)(BH)←(SP)+1
(SP)←(SP)+24.3.1数据传送指令低地址存储区(SS段)出栈方向执行前20H10HPOPBX指令执行示意图(SP)存储区(SS段)执行后BX=1020H(SP)(SP)+1(SP)+2BX20H10H高地址低地址高地址4.3.1数据传送指令8086/8088系统的堆栈具有如下特点:堆栈具有“先进后出”的特点堆栈有两个基本操作:PUSH和POP。PUSH操作使栈顶向低地址方向移动,而POP操作则刚好相反;堆栈操作只能作“字”操作;堆栈指针SP永远指向栈顶
不能从栈顶弹出一个字给CS4.3.1数据传送指令3.地址传送指令格式:LEAreg,
mem;将指定存储器的16位偏移地址送到指定的寄存器
要求:源操作数必须是一个内存单元地址,目的操作数必须是一个16位的通用寄存器。目的:使一个寄存器成为地址指针4.3.1数据传送指令例:LEABX,[SI+10H]
设:SI=1000H,则执行该指令后,BX=1010H0000H0001H0002H0003H0004H0005H48H00HFEHFFHLEASI,[0002H];执行后:SI=0002HMOVSI,[0002H]
;执行后:SI=0048H段起始地址4AH47H注意以下两条指令差别:4.标志寄存器传送指令
对标志寄存器进堆指令PUSHF执行的操作:(SP)-1←标志寄存器高8位
(SP)-2←标志寄存器低8位
(SP)←(SP)-2对标志寄存器出栈指令POPF执行的操作:
标志寄存器低8位←(SP)
标志寄存器高8位←(SP)+1 (SP)←(SP)+2
PUSHF和POPF指令用于保护和恢复标志寄存器内容。4.3.1数据传送指令例:
PUSH AXPUSH CX
PUSHF;保护标志寄存器内容
;接下来的程序要用到AX,CX以及标志位,
;所以需要保护
POPF ;恢复标志寄存器内容
POP CXPOP AX...4.3.1数据传送指令5.数据交换指令格式:XCHGreg,mem/reg功能:交换两操作数的内容。
要求:两操作数中必须有一个在CPU内部寄存器中;不能在两个存储单元之间进行数据交换。不能在段寄存器和立即数之间进行交换;源操作数和目的操作数类型要一致。例1:XCHGAX,BX;内部寄存器之间XCHG[2000H],CL;内部寄存器和存储单元之间4.3.1数据传送指令例2:XCHG[2000H],[BX];不能在存储单元之间交换XCHGDS,3000H;不能为段寄存器和立即数4.3.1数据传送指令7.输入/输出指令功能:只限于完成累加器AL(AX)与I/O端口之间的数据传送。1)
输入指令IN功能:CPU从一个8位的端口读入一个字节到AL中,也可以从两个连续的8位端口读入一个字到AX中。格式:INAL(AX),PORT;PORT端口号0~255INAL(AX),DX;DX表示的端口范围达64K例:INAL,80H;AL←80H端口的内容INAL,DX;AL←DX端口的内容
INAX,80H;将80H端口的内容读入AL,81H端口的内容;读入AH。4.3.1数据传送指令例:OUT68H,AX;AL中的字节输出到68H端口,;AH中的字节输出到69H端口
OUTDX,AL;将AL中的字节输出到DX所指的端口中2)输出指令OUT
功能:CPU将AL中一个字节写到一个8位端口中,或者将AX中的一个字写到两个连续的8位端口中。
格式:OUTport,AL(AX)
OUTDX,AL(AX)4.3.1数据传送指令在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器中,如:
MOVDX,220H;把I/O端口号设置到DX寄存器中INAL,DX;将220H端口内容读入AL注意:只能AX,或者AL,不能抛开AL只使用AH!数据操作类指令
算术运算类指令加法减法乘法除法逻辑运算与、或、非、异或测试移位指令非循环移位指令循环移位指令加法与减法指令(1)不带进位位的加法指令ADD例:ADD AL,30HADD AX,[BX+20H]ADD CX,SIADD [DI],200H4.3.2算术运算指令涉及两种类型数据:无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意参加运算的操作数必须都是无符号数或都是有符号数。ADD指令对状态标志有影响。4.3.2算术运算指令(2)带进位位的加法指令ADC
ADC指令在形式上和功能上都与ADD类似,只是相加时还要包括进位标志CF的内容。例:
ADCAL,68H;AL←(AL)+68H+(CF) ADCAX,CX;AX←(AX)+(CX)+(CF)ADCBX,[DI];BX←(BX)+[DI+1][DI]+(CF)ADC指令主要用于多字节加法运算中。4.3.2算术运算指令例:有两个4字节的无符号数相加:
2C56F8ACH
+309E47BEH,设被加数、加数分别存放在2000H及3000H开始的两个存储单元内,运算后结果放回2000H开始的存储单元中,如右图所示。因CPU可以进行16位的加法运算,因此可将加法分2次进行。56H2CHBEH47H2000H3000HACHF8H9EH30H被加数加数
......直接寻址方式:CLC;清除进位标志CFMOVAX,[2000H] ADDAX,[3000H]MOV[2000H],AXMOVAX,[2000H+2]ADCAX,[3000H+2]MOV[2000H+2],AX4.3.2算术运算指令地址指针SI,DI进行寄存器间接寻址编程:CLCMOVSI,2000HMOVDI,3000HMOVAX,[SI]ADDAX,[DI]MOV[SI],AXMOVAX,[SI+2]ADCAX,[DI+2]MOV[SI+2],AX4.3.2算术运算指令(3)自增指令INC(单操作数指令)格式:INCreg/mem功能:类似于C语言中的++操作:对指定的操作数加1例:INCALINCSIINCBYTEPTR[BX+4];将BX+4所指的存储单元的内容加1注:本指令不影响CF标志。(4)不带借位的减法指令SUB格式:SUBdest,src操作:
dest←(dest)-(src)注意:1.源操作数和目的操作数不能同时为存储器操作数
2.立即数不能作为目的操作数例:
SUBAL,60HSUB[BX+20H],DXSUBAX,CX4.3.2算术运算指令(5)带借位的减法指令SBBSBB指令主要用于多字节的减法。格式:SBBdest,src操作:
dest←(dest)-(src)-(CF)例:SBBAX,CXSBBWORDPTR[SI],2080HSBB[SI],DX4.3.2算术运算指令(6)自减指令DEC作用类似于C语言中的“--”操作符。格式:DECopr 操作:opr←(opr)-1例:
DECCLDECBYTEPTR[DI+2]
DECSI4.3.2算术运算指令(8)比较指令CMP格式:CMPdest,src操作:
(dest)-(src)CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。例:
CMPAL,0AHCMPCX,SICMPDI,[BX+03]4.3.2算术运算指令根据标志位来判断比较的结果1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。2)若两个数不相等,则分两种情况考虑:①比较的是两个无符号数若CF=0,则dest>src;若CF=1,则dest<src。②比较的是两个有符号数若OF⊕SF=0,则dest>src;
若OF⊕SF=1,则dest<src。4.3.2算术运算指令
比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较结果的转向。例:比较AL、BL、CL中带符号数的大小,将最小数放在AL中。
CMPAL,BL;AL和BL比较
JNGBBB
;若AL≤BL,则转BBB
XCHGAL,BL;若AL>BL,则交换BBB:CMPAL,CL;AL和CL比较
JNGCCC;若AL≤CL,则转CCC
XCHGAL,CL;若AL>CL,则交换CCC:HLT4.3.2算术运算指令运算规则:按位操作,没有进位和借位。对标志位的影响(除NOT指令外):CFOFSFZFPFAF00***无定义
根据运算结果设置4.3.3逻辑运算指令4.3.3逻辑运算指令(1)逻辑“与”
AND对两个操作数进行按位逻辑“与”操作。格式:ANDdest,src用途:保留操作数的某几位,清零其他位。例1:保留AL中低4位,高4位清0。
ANDAL,0FH例2:AL中有字符’a’~’z’之一,将其转换成大写。
ANDAL,01011111B
‘a’—’z’:61H(0110
0001B)—7AH(0111
1010B)
‘A’—‘Z’:41H(0100
0001B)—5AH(0101
1010B)4.3.3逻辑运算指令例3:测试AL的bit7,bit5,bit2是否都是1。
ANDAL,10100100B CMPAL,10100100B
JZYES;若都为1,则执行YES
…
…;不都为1
…
…YES:
…
…;(2)逻辑“或”
OR对两个操作数进行按位逻辑”或”操作。格式:ORdest,src用途:对操作数的某几位置1;对两操作数进行组合。例1:把AL的第5位置为1
ORAL,00100000B例2:把AL中的非压缩BCD码变成相应十进制数的ASCII码。
ORAL,30H
‘0’—‘9’:30H—39H4.3.3逻辑运算指令(3)逻辑“非”(取反)NOT对操作数进行按位逻辑”非”操作。格式:NOTmem/reg例:NOTCX
NOTBYTEPTR[DI]4.3.3逻辑运算指令(4)逻辑“异或”
XOR对两个操作数按位进行”异或”操作。格式:XORdest,src用途:对reg清零(自身异或)
把reg/mem的某几位变反(与’1’异或)例1:把AX寄存器清零。例2:把DH的3、4权位变反。①MOVAX,0XORDH,18H(00011000B)②SUBAX,AX③ANDAX,0④XORAX,AX
4.3.3逻辑运算指令4.3.4移位指令(1)非循环移位指令
算术左移指令SAL(ShiftArithmeticLeft)
算术右移指令SAR(ShiftArithmeticRight)
逻辑左移指令SHL(ShiftLeft)
逻辑右移指令SHR(ShiftRight)这4条指令的格式相同,以SAL为例:
SALmem/reg,CL;移位位数大于1时1;位数等于1时4.3.4移位指令最低位最高位CF0(a)算术/逻辑左移SAL/SHL最低位最高位不变CF(b)算术右移SAR最低位最高位CF(c)逻辑右移SHR0非循环移位指令功能示意图
算术移位——把操作数看做有符号数;逻辑移位——把操作数看做无符号数。移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中。例如:
SHRAL,1
MOVCL,4 SHRAL,CL;AL中的内容右移4位影响C,P,S,Z,O标志。结果未溢出时:左移1位≡操作数*2
右移1位≡操作数/24.3.4移位指令例:把AL中的数x乘10。4.3.4移位指令因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下:
SALAL,1;2x MOVAH,AL SALAL,1;4xSALAL,1;8xADDAL,AH;8x+2x=10x用移位操作代替乘除法可提高运算速度。例:前例中计算x×10。(1)采用乘法指令:
MOV BL,10MUL BL 共需70~77个T周期。(2)采用移位和加法指令:
SAL AL,1;2TMOV AH,AL;2TSAL AL,1;2TSAL AL,1;2TADD AL,AH;3T只需11个T周期,仅相当于乘法的1/7。4.3.4移位指令最低位最高位CF(a)不含进位位的循环左移指令ROL
最低位最高位CF(c)含进位位的循环左移指令RCL
最低位最高位CF(b)不含进位位的循环右移指令ROR最低位最高位CF(d)含进位位的循环右移指令RCR循环移位指令功能示意图4.3.4移位指令(2)循环移位指令循环移位举例:例:将AL的高4位与低4位互换。
MOVCL,4ROLAL,CL4.3.4移位指令特点:格式同非循环移位指令,但不需要补0。移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中。循环移位指令影响标志位CF,因此会产生溢出问题,从而影响OF标志位。4.3.6程序控制指令1.转移指令分成无条件转移指令和条件转移指令。1)无条件转移指令JMP
在86系列系统中,程序的寻址是由CS和IP两部分组成。为了使程序转移到一个新的地址去执行,有两种方法:段内转移(NEAR):在同一段内进行转移,此时只需改变IP的内容,即用目标标号的偏移地址置入IP中。段间转移(FAR):要转到另一个段去执行程序,不仅要修改IP,还需要修改CS,因此要将目标标号的段基址和偏移地址分别置入CS和IP中。4.3.6程序控制指令(1)直接短转移JMPSHORTOPR操作:(IP)(IP)+8位位移量(2)段内直接转移JMPNEARPTROPR操作:(IP)(IP)+16位位移量(3)段内间接转移
JMPWORDPTROPR操作:(IP)(有效地址)(4)段间直接(远)转移
JMPNEARPTROPR操作:(IP)←OPR的段内偏移地址(CS)←OPR所在段的段地址(5)段间间接转移
JMPDWORDPTROPR操作:(IP)←(EA)(CS)←(EA+2)2)
条件转移指令状态标志作为转移的条件,当满足一定的条件时,转移到指定的地址,否则,将顺序执行下一条指令。作为判断条件的状态标志位有:CF、PF、ZF、SF和OF。(1)根据单个标志位的设置情况转移。包括10种指令,它们一般适用于测试某一次运算的结果并根据其不同特征产生程序分支作不同处理的情况。结果为零(或相等)转移JZ/JEOPR;ZF=1结果不为零(或不相等)转移JNZ/JNEOPR;ZF=04.3.6程序控制指令4.3.6程序控制指令结果为负转移JSOPR;SF=1结果为正转移JNSOPR;SF=0溢出转移JOOPR;OF=1无溢出转移JNOOPR;OF=0奇偶位为1转移JP/PEOPR;PF=1奇偶位为0转移JNP/JPOOPR;PF=0低于/不高于或等于/进位为1转移JB/JNAE/JCOPR;CF=1不低于/高于或等于/进位为0转移JNB/JAE/JNCOPR;CF=0(2)比较两个无符号数,并根据比较的结果转移。低于/不高于或不等于/进位为1转移JB/JNAE/JCOPR;CF=1且ZF=0不低于/高于或等于/进位为0转移JNB/JAE/JNCOPR;CF=0或ZF=1低于或等于/不高于转移JBE/JNAOPR;CF=1或CF=1不低于或不等于/高于转移JNBE/JAOPR;CF=0且ZF=04.3.6程序控制指令4.3.6程序控制指令(3)比较两个带符号数,并根据比较结果转移。小于或者不大于或者等于转移JL(或JNGE)OPRSF⊕ZF=1小于或者不大于或者等于转移JNL(或JGE)OPRSF⊕ZF=0小于或等于,或者不大于转移JLE(或JNG)OPR(SF⊕ZF)∨ZF=1小于或等于,或者不大于转移JNLE(或JG)OPR(SF⊕ZF)∨ZF=0
(4)测试CX的值为0则转移指令
JCXZOPR;(CX)=0则转移3)
循环控制指令(1)LOOP循环指令格式:LOOPOPR
测试条件:(CX)≠0(2)LOOPZ/LOOPE当为零或相等时循环指令格式:LOOPZ(或LOOPE)OPR
测试条件:ZF=1且(CX)≠0(3)LOOPNZ/LOOPNE当不为零或不相等时循环指令格式:LOOPNZ(或LOOPNE)OPR
测试条件:ZF=0且(CX)≠04.3.6程序控制指令4.3.7处理器控制指令
处理机控制指令只是完成简单的控制功能,指令中不需要设置地址码,因此又称为无地址指令。对标志位操作指令
CLC,STC,CLI,STI外部同步指令
ESC其它指令
NOP,HLT程序设计步骤汇编语言程序设计的步骤:1.分析问题,全面理解问题。2.建立数学模型:把问题数学化、公式化。3.确定算法:优选逻辑简单、运算速度快、精度高的算法。4.绘制程序流程图。5.内存空间分配:工作单元尽可能设在CPU寄存器中。6.编制程序和静态检查7.程序调试实验顺序结构程序设计程序执行方式为“从头到尾”逐条执行指令语句,直到程序结束。例:用数学运算命令,对两个16位数做加法运算:3281H+2797H
。这两个数从地址10050H开始连续存放,低位在小地址一端,结果放在这两个数之后。1.分析题目:可用16位寄存器进行运算,一次完成。计算之前要清除CF,对累加器AX清零。相加后,结果会影响标志寄存器的进位位CF。10050H81H32H97H27H
和低8位和高8位
顺序结构程序设计2.程序流程图:开始被加数+加数->AXAX->(10054)和(10055)单元暂停初始化:段地址DS:1000H被加数指针SI<-50H加数指针DI<-52H和的指针BX<-54H清除AX和CF被加数->AX3.内存空间分配:内存地址内容10050H被加数低8位81H10051H被加数高8位32H10052H加数低8位97H10053H加数高8位27H10054H和的低8位10055H和的高8位3281H+2797H顺序结构程序设计4.编制的程序如下:MOVAX,1000HMOVDS,AX
;DS=1000HMOVSI,0050H
;被加数指针MOVDI,0052H
;加数指针MOVBX,0054H
;和的指针CLC
;清CFXORAX,AX
;清AXMOVAX,[SI]
;取被加数到AXADDAX,[DI]
;相加运算,AX<-AX+[DI]MOV[BX],AX
;存一个字到[BX]HLT
;暂停为何不把1000H直接赋给DS?为何要定义指针?为什么只用这三个寄存器作为指针?为何不把1000H直接赋给DS?为何不把1000H直接赋给DS?分支结构程序设计
利用条件转移指令,根据条件是否满足,来改变程序执行的顺序。标号:条件满足?处理NYIF…THEN…结构程序结构:
… 测试/比较指令(TEST/CMP)条件转移指令(Jx标号)
处理体
标号:
其他指令 …分支结构程序设计例:求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存(2800H)单元中。1.分析题目:应该先决定哪一个值较大,然后再用大数减去小数,得到绝对值。开始AX-BX>=0?BX-AX->BXBX->内存(2800)和(2801)单元AX->内存(2800)和(2801)单元结束YAX-BX->AXN初始化,清除CF2.程序流程图:分支结构程序设计程序可编制如下:CLC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州大学《结构力学B》2023-2024学年第一学期期末试卷
- 贵州财经大学《小学教育教学叙事研究》2023-2024学年第一学期期末试卷
- 2025青海省建筑安全员《B证》考试题库及答案
- 贵阳信息科技学院《教育史专题研究》2023-2024学年第一学期期末试卷
- 硅湖职业技术学院《计算思维导论》2023-2024学年第一学期期末试卷
- 2025甘肃建筑安全员-A证考试题库及答案
- 广州新华学院《物流与电子商务实验》2023-2024学年第一学期期末试卷
- 2025辽宁省建筑安全员A证考试题库
- 2025年湖南建筑安全员-A证考试题库附答案
- 中华诗词大赛题
- 中考语文真题专题复习 小说阅读(第01期)(解析版)
- 《陆上风电场工程概算定额》NBT 31010-2019
- 商务礼仪培训职业礼仪员工培训PPT
- 2022-2023年河南省驾照考试《小车》科目一预测试题(含答案)
- GB/T 24573-2009金库和档案室门耐火性能试验方法
- ISO27001-2022信息安全管理体系管理手册
- 经济困难学生家庭走访情况登记表
- 《新中国独立自主的外交》 教学课件
- 简支箱梁桥毕业设计
- 监理安全安全通知书(春节假期)
- 启明星辰天镜网站安全监测系统用户手册
评论
0/150
提交评论