版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章86系列微型计算机的指令系统5.1汇编语言指令语句格式5.280x86指令(编码)格式及寻址方式
5.38086/8088指令系统
难点和重点
5.1汇编语言指令语句格式MOV传送CMP比较ADD加法OUT输出立即数寄存器存储器(地址信息)1.指令:让计算机完成某种操作的命令称为指令。2.指令系统:指令的集合即为指令系统。3.指令的一般格式:[标号:]操作码[操作数][,操作数];[注释]
计算机中的指令由标号、操作码字段和操作数字段组成。[]:任选项。标号字段:是一个任选字段,性质为符号偏移量,一般用于标记跳转指令的目的地址.在汇编过程中标号会被替换为一个16位的数值偏移量.标号必须位于语句开头,结尾必须使用冒号。操作码字段:也称为指令助记符,指令助记符是必不可少的,指计算机所要执行的操作,或称为指出操作类型,是一种助记符。5.1汇编语言指令语句格式操作数字段:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。注释字段:是一个任选字段,用于说明程序片段或指令的功能,汇编过程中不处理这样的字段,它只是用于提高源程序的可读性.注释必须使用分号作为开始。注释是对该条或该段程序的解释,可选项。
不同的计算机有不同的指令系统,汇编语言的指令语句都与机器指令一一对应,汇编语言通过汇编程序将其翻译成机器指令代码(目标代码),让CPU执行某种操作。5.1汇编语言指令语句格式5.28086/8088的寻址方式与数据有关的寻址方式:以MOV指令为例立即寻址MOVAX,3069H寄存器寻址MOVAL,BH直接寻址MOVAX,[2000H]寄存器间接寻址MOVAX,[BX]
寄存器相对寻址MOVAX,COUNT[SI]
基址变址寻址MOVAX,[BP][DI]相对基址变址寻址MOVAX,MASK[BX][SI]存储器寻址(1)立即寻址方式*——操作数在指令中给出指令格式:MOVAL,5MOVAX,3064HMOVAL,‘A’*
只能用于SRC字段MOV40H,AL
*SRC和DST的字长一致
MOVAH,3064H
立即数寻址的功能立即数寻址的执行例如:MOVAL,80H ;将8位立即数80H送入AL寄存器中。MOVAX,1234H ;将16位立即数1234H送入AX寄存器中,其中 (AH)=12H,(AL)=34H。ADDAX,3064H ;将立即数3064H与AX内容相加,结果存入AX中,即 (AX)+3064H→(AX)。图5.1立即数寻址方式举例(a)MOVAL,80H;(b)MOVAX,1234H(2)寄存器寻址方式*—操作数在指定的寄存器中
MOVAX,BXMOVAL,BH*
字寄存器AX、BX、CX、DX、SI、DI、SP或BP*
字节寄存器只有AHALBHBLCHCLDHDL*SRC和DST的字长一致MOVAH,BX寄存器寻址的功能寄存器寻址的执行INCCX ;将CX的内容加1,即(CX)+1→(CX)。MOVAX,CX ;将CX的内容传送到AX寄存器中,即CX)→(AX)。图4.6MOVAX,CX指令的寻址及执行示意图(3)直接寻址方式*—有效地址EA由指令直接给出
例:MOVAX,[2000H]
EA=2000H,假设(DS)=3000H,那么PA=32000H*
隐含的段为数据段DS*
可使用段跨越前缀
MOVAX,ES:[2000H]*操作数地址可由变量(符号地址)表示,但要注意VALUEDB10变量的属性MOVAH,VALUE
MOVAX,VALUEMOVAX,WORDPTRVALUE5030
32000AHAL3050(AX)=3050H直接寻址的功能直接寻址的执行例如MOVAL,[1064H];将有效地址EA=1064H单元中的内容传送到AL寄存器中。图4.7直接寻址示意图(4)寄存器间接寻址*—EA在基址寄存器(BX/BP)
或变址寄存器(SI/DI)中
MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允许使用AX、CX、DX存放EAMOVAX,[CX]*
SRC和DST的字长一致
MOVDL,[BX];[BX]指示一个字节单元MOVDX,[BX];[BX]指示一个字单元*
适于数组、字符串、表格的处理寄存器间接寻址的功能寄存器间接寻址的执行例如:
MOVAX,[BX];将BX中的内容作为有效地址,对有效地址进行字的 读操作,并传送到AX中。
有效地址=(BX)(BP)8位(SI)16位(DI)+位移量(5)寄存器相对寻址方式*指令格式:MOVAX,COUNT[SI]或MOVAX,[COUNT+SI]
假设(DS)=3000H,(SI)=2000H,COUNT=3000H,则:PA=35000H
假设(35000H)=1234H,那么(AX)=1234H适于数组、字符串、表格的处理如果使用BP,则隐含地表示操作数存放在堆栈段中。寄存器相对寻址的功能寄存器相对寻址的执行图4.9寄存器相对寻址操作过程示意图(6)基址变址寻址方式*指令格式:MOVAX,[BX][DI]MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*适于数组、字符串、表格的处理*必须是一个基址寄存器和一个变址寄存器的组合
MOVAX,[BX][BP]MOVAX,[SI][DI]有效地址=(BX)(SI)(BP)(DI)+基址变址寻址的功能基址变址寻址的执行(7)相对基址变址寻址方式
MOVAX,MASK[BX][SI]
或MOVAX,MASK[BX+SI]或MOVAX,[MASK+BX+SI]如果使用BP,则隐含地表示操作数存放在堆栈段中。
有效地址=(BX)(SI)8位(BP)(DI)16位++位移量相对基址变址寻址的功能相对基址变址寻址的执行例如:MOVAH,[BX+DI+1234H]若DS=4000H,BX=0200H,DI=0010H,则此指令计算出的有效地址EA=1444H,操作数的物理地址为41444H,执行本指令后将41444H单元中的内容传送至AH寄存器中。访问存储器的方式默认的段寄存器可跨越的段寄存器偏移地址取指令CS无IP堆栈操作SS无SP一般数据访问DSCSESSS有效地址EABP作为基址的寻址SSCSDSESBP串操作的源操作数DSCSESSSSI串操作的目的操作数ES无DI段寄存器的使用规定
数据传送指令算术指令逻辑指令串处理指令控制转移指令处理机控制与杂项操作指令5.38086/8088指令系统数据传送指令:
通用数据传送指令MOV、PUSH、POP、XCHG累加器专用传送指令IN、OUT、XLAT目标地址传送指令LEA、LDS、LES标志寄存器传送指令LAHF、SAHF、PUSHF、POPF类型转换指令CBW、CWD5.3.1数据传送类指令传送指令:MOVDST,SRC执行操作:(DST)(SRC)注意:
*DST、SRC不能同时为段寄存器MOVDS,ES*立即数不能直接送段寄存器
MOVDS,2000H*DST不能是立即数和CSMOVCS,AX
*DST、SRC不能同时为存储器寻址*不影响标志位1
通用数据传送指令表基本传送指令MOV进栈指令:PUSHSRC执行操作:(SP)(SP)–2((SP)+1,(SP))(SRC)
出栈指令:POPDST执行操作:(DST)((SP)+1,(SP)) (SP)(SP)+2堆栈:‘先进后出’的存储区,段地址存放在SS中,
SP在任何时候都指向栈顶,进出栈后自动修改SP。
注意:
*堆栈操作必须以字为单位。
*不影响标志位
*不能用立即寻址方式PUSH1234H
*DST不能是CSPOPCS例:假设(AX)=2107H,执行PUSHAX(SP)低地址高地址(SP)
07H21H低地址高地址********PUSHAX执行前PUSHAX执行后进栈操作:先SP减2,再内容进栈。进栈方向例:POPBX(SP)低地址高地址(SP)07H21H低地址高地址
(BX)=2107HPOPBX执行前POPBX执行后********出栈方向07H21H出栈操作:先栈顶内容出栈,再修改SP,使SP加2。(字操作)例:PUSHAXPUSHBXPUSHCX……;其间用到AX、BX、CXPOPCX;后进先出POPBXPOPAX交换指令
XCHGOPR1,OPR2执行操作:(OPR1)(OPR2)注意:
*不影响标志位*不允许使用段寄存器 *两操作数不能均为内存单元例:XCHGBX,[BP+SI]XCHGAL,BH2
累加器专用传送指令(只限使用AX或AL)
输入指令IN(I/OCPU)
直接寻址:INAL,PORT(字节)INAX,PORT(字)执行操作:(AL)(PORT)(字节)(AX)(PORT+1,PORT)(字)间接寻址:INAL,DX(字节)INAX,DX(字)执行操作:(AL)((DX))(字节)(AX)((DX)+1,(DX))(字)
输出指令OUT(CPUI/O)直接寻址:OUTPORT,AL(字节)OUTPORT,AX(字)执行操作:(PORT)(AL)(字节)(PORT+1,PORT)(AX)(字)间接寻址:OUTDX,AL(字节)OUTDX,AX(字)执行操作:((DX))(AL)(字节)((DX)+1,(DX))(AX)(字)注意:
*不影响标志位*
前256个端口号00H~FFH可直接在指令中指定(直接寻址)*如果端口号256,端口号
DX(间接寻址)例:INAX,28H;MOVDX,28H;INAX,DXMOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:测试某状态寄存器(端口号27H)的第2位是否为1INAL,27HTESTAL,00000100BJNZERROR;若第2位为1,转ERROR处理换码指令:将一种字节代码转换成另一种字节代码XLAT或XLATOPR执行操作:(AL)((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLAT指令执行后(AL)=33H注意:
*不影响标志位*字节表格(长度不超过256)
首地址(BX)*需转换的代码位移量(AL)(BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H3.地址传送指令
有效地址送寄存器指令:LEAREG,SRC执行操作:(REG)SRC
指针送寄存器和DS指令:LDSREG,SRC执行操作:(REG)(SRC)(DS)(SRC+2)
相继二字寄存器(通常是SI)、DS
指针送寄存器和ES指令:LESREG,SRC执行操作:(REG)(SRC)(ES)(SRC+2)
相继二字寄存器(通常是DI)、ES例:40H00H00H30H
TABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE
;(BX)=1000HLEABX,TABLE
;(BX)=1000HLDSBX,TABLE;(BX)=0040H
;(DS)=3000HLESBX,TABLE;(BX)=0040H
;(ES)=3000H注意:
*不影响标志位*REG不能是段寄存器*SRC必须为存储器寻址方式例:LEAAX,[2728H];(AX)=2728LEACX,[BX][DI]若执行前:(BX)=1000H,(DI)=500H则执行后:(CX)=1000+500=1500HLDSSI,[500H]若执行前:(DS)=2000H则执行后:(SI)=1234H(DS)=3000HLESDI,50H[BX]若执行前:(DS)=2000H,(BX)=200H(20250H)=0237H,(20252)=40000H则执行后:(DI)=0237H(ES)=4000H34H12H00H30H
20500H20502H图LEA和LDS指示执行示意(a)LEABX,[BX+SI+jjkk]图4.13LEA和LDS指示执行示意(b)LDSSI,[jjkk]4.标志传送指令图LAHF指令的功能↓↓标志寄存器传送指令
标志送AH指令:LAHF执行操作:(AH)(PSW的低字节)
AH送标志寄存器指令:SAHF执行操作:(PSW的低字节)(AH)
标志进栈指令:PUSHF执行操作:(SP)(SP)-2((SP)+1,(SP))(PSW)
标志出栈指令:POPF执行操作:(PSW)((SP)+1,(SP))(SP)(SP)+2*影响标志位
PUSHF和POPF指令一般用在子程序和中断处理程序的首尾,用以保存主程序标志和恢复主程序标志。有时还被用于改变陷阱标志TF的状态。PUSHF ;将Flag各标志位压入堆栈。POPAX ;弹出标志至AX中。ORAH,01H;TF位置“1”。PUSHAX ;修改后的标志,各位压入堆栈。POPF ;从堆栈中弹出一个字(此时为修改后的16 位标志),送入标志寄存器。5.3.2算术运算指令
加法指令
ADD、ADC、INC
减法指令
SUB、SBB、DEC、NEG、CMP
乘法指令
MUL、IMUL
除法指令
DIV、IDIV加法指令
加法指令:ADDDST,SRC执行操作:(DST)(SRC)+(DST)
带进位加法指令:ADCDST,SRC执行操作:(DST)(SRC)+(DST)+CF
加1指令:INCOPR执行操作:(OPR)(OPR)+1注意:
*除INC指令不影响CF标志外,均对条件标志位有影响。加法指令对条件标志位的影响CF位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。1结果为负0否则SF=1结果为00否则ZF=1和的最高有效位有向高位的进位0否则CF=1两个操作数符号相同,而结果符号与之相反0否则OF=举例:n=8bit带符号数(-128~127),无符号数(0~255)
00000100+0000101100001111带:(+4)+(+11)=+15OF=0无:4+11=15CF=0带符号数和无符号数都不溢出00001001+0111110010000101带:(+9)+(+124)=-123
OF=1无:9+124=133CF=0带符号数溢出无符号数溢出00000111+11111011100000010带:(+7)+(-5)=+2OF=0无:7+251=2
CF=1带符号数和无符号数都溢出10000111+11110101101111100带:(-121)+(-11)=+124
OF=1无:135+245=124
CF=1例:双字的加法
(DX)=0002H(AX)=0F365H
(BX)=0005H(CX)=8100H指令序列
ADDAX,CX;(1)
ADCDX,BX;(2)
(1)执行后,(AX)=7465H
CF=1OF=0SF=0ZF=0(2)执行后,(DX)=0008HCF=0OF=0SF=0ZF=0ADD指令的常用形式还有:ADDCX,2000H ;立即数与寄存器内容相加。ADD[BX],67H ;存储单元与立即数相加。ADDAX,[BX+SI] ;存储单元与寄存器内容相加。ADDAX,BX ;寄存器之间相加。ADD[BX+6000H],AX;寄存器与“基地址加位移量”之 存储单元内容相加。2.减法指令减法指令:SUBDST,SRC执行操作:(DST)(DST)-(SRC)带借位减法指令:SBBDST,SRC执行操作:(DST)(DST)-(SRC)-CF减1指令:DECOPR执行操作:(OPR)(OPR)-1求补指令:NEGOPR执行操作:(OPR)-(OPR)比较指令:CMPOPR1,OPR2执行操作:(OPR1)-(OPR2)注意:
*除DEC指令不影响CF标志外,均对条件标志位有影响。减法指令对条件标志位(CF/OF/ZF/SF)的影响:CF位表示无符号数减法的溢出。OF位表示带符号数减法的溢出。1被减数的最高有效位有向高位的借位0否则CF=1两个操作数符号相反,而结果的符号与减数相同0否则OF=1减法转换为加法运算时无进位0否则CF=或NEG(取补)指令对CF/OF的影响0操作数为01否则CF=1操作数为-128(字节运算)或操作数为-32768(字运算)0否则OF=例:x、y、z均为双精度数,分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现wx+y+24-z,并用W,W+2单元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;结果存入W,W+2单元例SUB[SI+14H],0136H;指令功能为求出目的数有效地址EA=SI+14H,将(EA)-0136H→EA。设DS=3000H,SI=0040H,则EA=0054H,目的数的物理地址为30054H,其内容设为4336H,则此指令的结果及对标志位的影响如下所示。比较指令CMPA-B(1)两个无符号数比较判断方法ZF=1,A=BZF=0,CF=0则A>BCF=1则A<B(2)带符号数比较ZF=1,A=BZF=0OF=0SF=0则A>BSF=1则A<BOF=1SF=0则A<BSF=1则A>BOF=0SF=0,OF=1SF=1A>B(OFSF=0)OF=0SF=1,OF=1SF=0A<B(OFSF=1)例:比较54与24的大小A>0,B>0解:54-24=54+(-24)[-24]补=11101000,[54]补=0011011000110110+11101000100011110OF=0,SF=0,则目的>源,即54>24例:比较112D与-64D的大小A>0,B<0解:112-(-64)=112+64=176[-64]补=11000000011100000100000010110000OF=1,SF=1,则目的>源,即120>-74例:比较24与54的大小解:24-54=24+(-54)0001100024的补码+11001010-54的补码11100010OF=0,SF=1,则目的<源,即24<54例:比较-64D与112D的大小A<0,B>0解:-64-112=[-64]补+[-112]补11000000=[-64]补+10010000=[-112]补101010000OF=1,SF=0,则目的<源,即-64<1123乘法指令
无符号数乘法指令:MULSRC带符号数乘法指令:IMULSRC执行操作:字节操作数(AX)(AL)*(SRC)字操作数(DX,AX)(AX)*(SRC)注意:
*AL(AX)为隐含的乘数寄存器。*AX(DX,AX)为隐含的乘积寄存器。*SRC不能为立即数。*除CF和OF外,对条件标志位无定义。图4.17乘法运算的操作数及运算结果乘法指令对CF/OF的影响:例:(AX)=16A5H,(BX)=0611H
(1)
IMULBL
;(AX)(AL)*(BL)
;A5*115B*11=060BF9F5
;
(AX)=0F9F5H
CF=OF=1(2)
MULBX
;(DX,AX)(AX)*(BX)
;16A5*0611=00895EF5
;
(DX)=0089H(AX)=5EF5H
CF=OF=100乘积的高一半为零11否则MUL指令:CF,OF=00乘积的高一半是低一半的符号扩展11否则
IMUL指令:CF,OF=1010010101011011A5H对应原码的绝对值再求补码4.除法指令
无符号数除法指令:DIVSRC带符号数除法指令:IDIVSRC执行操作:字节操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余数字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余数注意:
*AX(DX,AX)为隐含的被除数寄存器。*AL(AX)为隐含的商寄存器。*AH(DX)为隐含的余数寄存器。*SRC不能为立即数。*对所有条件标志位均无定义。除法运算的操作数和运算结果(a)8位源操作数;(b)16位源操作数
符号扩展指令:
CBWALAX执行操作:若(AL)的最高有效位为0,则(AH)=00H若(AL)的最高有效位为1,则(AH)=0FFHCWDAX(DX,AX)执行操作:若(AX)的最高有效位为0,则(DX)=0000H若(AX)的最高有效位为1,则(DX)=0FFFFH注意:*无操作数指令*隐含对AL或AX进行符号扩展*不影响条件标志位例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H例:x,y,z,v均为16位带符号数,计算(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX) 余数→(DX)3.3.3逻辑运算和移位指令
逻辑运算指令
AND、OR、NOT、XOR、TEST
移位指令
SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR逻辑非指令:NOTOPR*OPR不能为立即数执行操作:(OPR)
(OPR)*不影响标志位
逻辑与指令:ANDDST,SRC执行操作:(DST)(DST)(SRC)逻辑或指令:ORDST,SRC执行操作:(DST)(DST)(SRC)异或指令:XORDST,SRC执行操作:(DST)(DST)(SRC)测试指令:TESTOPR1,OPR2
执行操作:(OPR1)(OPR2)CFOFSFZFPFAF00***无定义
根据运算结果设置1.逻辑运算指令例:屏蔽AL的第0、1两位
ANDAL,0FCH例:置AL的第5位为1
ORAL,20H
例:使AL的第0、1位变反
XORAL,3例:测试某些位是0是1
TESTAL,1JZEVEN
********OR00100000**1*****
******01XOR00000011
******10
********AND11111100******00********AND000000010000000*例如,传输ASCII码给某台外部设备或另一台微型计算机时,常将其最高位作为奇/偶校验位使用,特别在串行传送时可以有效地判别传输过程是否产生差错。假定7位ASCII码已存入AL中,AL的最高位初始态为0。现采用偶校验,则采用下列程序段可以完成补偶操作:ANDAL,AL;(AL)与(AL)进行与操作,仅用以影响标志位PF。JPNEXT;若PF=1,则转至NEXT指令处若PF=0,则顺序执行。ORAL,10000000B;最高位(奇偶校验位)补“1”,以使传送操作数字节中1的个数为偶数。NEXT:;补偶后往下执行程序。…↓逻辑运算指令,可以通过选用不同的源操作数的各位代码,使目的操作数的某些位置1、清0和测试目的操作数的某些位。例如:ORCL,03H ;将CL的位0、位1置1,其余位不变。ANDAL,0F5H ;将AL中的位1、位3清0,其余位不变。XORAH,0FH ;将AH中高4位不变,低4位取反。ANDDX,[BX+SI] ;DX和两存储单元的内容相“与”,其内存单元地址由 BX+SI和BX+SI+1指出,结果存在DX中。ORAX,00F0H ;AX和00F0H相“或”,结果存在AX中。XORAX,AX ;AX的内容本身进行“异或”,结果AX清零。2.移位与循环移位指令逻辑左移SHLOPR,CNT逻辑右移SHROPR,CNT算术左移SALOPR,CNT(同逻辑左移)算术右移SAROPR,CNT
CF0
0CFCF移位指令循环左移ROLOPR,CNT循环右移ROROPR,CNT带进位循环左移RCLOPR,CNT带进位循环右移RCROPR,CNTCF
CFCFCF注意:
*OPR可用除立即数以外的任何寻址方式*CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL为例*条件标志位:
CF=移入的数值
1CNT=1时,最高有效位的值发生变化0CNT=1时,最高有效位的值不变
移位指令:
SF、ZF、PF根据移位结果设置,AF无定义
循环移位指令:
不影响SF、ZF、PF、AFOF=图4.17移位/循环移位指令执行流程例:(AX)=0012H,(BX)=0034H,把它们装配成(AX)=1234H例:(BX)=84F0H
(1)(BX)为无符号数,求(BX)/2
SHRBX,1
;(BX)=4278H(2)(BX)为带符号数,求(BX)×2
SALBX,1
;(BX)=09E0H,OF=1(3)(BX)为带符号数,求(BX)/4MOVCL,2 SARBX,CL;(BX)=0E13CHMOVCL,8ROLAX,CLADDAX,BXMOVCH,4;循环次数MOVCL,4;移位次数NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT00080004000F0000(SP)(3)(BX)=84F0H,把
(BX)
中的16位数每4位压入堆栈串操作指令:
设置方向标志指令
CLD、STD
串处理指令
串重复前缀
MOVSB/MOVSWREPSTOSB/STOSWREPE/REPZLODSB/LODSWREPNE/REPNZ
CMPSB/CMPSWSCASB/SCASW
与REP配合工作的MOVS/STOS
REPMOVS/STOS执行操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1(3)执行MOVS/STOS(4)重复(1)~(3)MOVS串传送指令:MOVSDST,SRCMOVSB(字节)MOVSW(字)例:MOVSES:BYTEPTR[DI],DS:[SI]执行操作:
(1)((DI))←((SI))(2)字节操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2
方向标志DF=0时用+,DF=1时用-。
REPMOVS:将数据段中的整串数据传送到附加段中。源串(数据段)→目的串(一定在附加段)执行REPMOVS之前,应先做好:(1)源串首地址(末地址)→SI(2)目的串首地址(末地址)→DI(3)串长度→CX(4)建立方向标志(CLD使DF=0,STD使DF=1)(SI)(DI)
DF=0DF=1数据段附加段(SI)(DI)
datasegmentmess1db‘personal_computer’dataendsextrasegmentmess2db17dup(?)extraendscodesegmentmovax,datamov ds,axmov ax,extramoves,ax
leasi,mess1leadi,mess2movcx,17cldrepmovsb…codeendsleasi,mess1+16leadi,mess2+16movcx,17stdrepmovsbSTOS存入串指令:STOSDSTSTOSB(字节)STOSW(字)执行操作:
字节操作:((DI))←(AL),(DI)←(DI)±1字操作:((DI))←(AX),(DI)←(DI)±2
例:把附加段中的10个字节缓冲区置为20Hleadi,mess2moval,20Hmovcx,10cldrepstosbleadi,mess2movax,2020Hmovcx,5cldrepstosw例如,若要对某一数据缓冲区清零,并设(ES)=3000H,数据缓冲区首地址DI=0200H,缓冲区长度为100个字节,则可用以下的程序段:CLDMOV AX,3000H ;对段寄存器赋值。MOV ES,AXMOV DI,0200H ;数据缓冲区,首地址→DI。MOV CX,100 ;数据缓冲区长度为100字节→CX。MOV AL,00 ;对100个字节数据缓冲区单元清零。REP STOSBLODS从串取指令:
LODSSRCLODSB(字节)LODSW(字)执行操作:字节操作:(AL)←((SI)),(SI)←(SI)±1字操作:(AX)←((SI)),(SI)←(SI)±2注意:*LODS指令一般不与REP联用*源串一般在数据段中(允许使用段跨越前缀来修改),目的串必须在附加段中*不影响条件标志位例如,编制一程序段,要求将0700H单元开始的5个字节的内容逐一装入累加器中进行处理,处理完后,再送入0700H为首址的内存区中。 CLD ;方向标志DF=0,地址为增量。 MOVSI,0700H ;SI的首地址。MOVDI,SI MOVCX,5 ;处理的字节数为5。LOOP1:LODSB ;取一个字节到AL中,(SI)+1→(SI)。 PUSHCX ;保留计数值。 … ;字符处理。 POPCX ;恢复计数值。 DECCX ;计数值减1。 MOV[DI],AL ;送回处理结果。 JNZLOOP1 ;如未处理完,则继续。与REPE/REPZ(REPNE/REPNZ)配合工作的
CMPS和SCAS
REPE/REPZREPNE/REPNZ
执行操作:(1)如(CX)=0或ZF=0(ZF=1)则退出串操作,否则转(2)(2)(CX)←(CX)-1(3)执行CMPS/SCAS(4)重复(1)~(3)CMPS串比较指令:
CMPSSRC,DSTCMPSB(字节)CMPSW(字)
执行操作:
(1)((SI))-((DI))根据比较结果置条件标志位:相等ZF=1不等ZF=0(2)字节操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2SCAS串扫描指令:
SCASDSTSCASB(字节)SCASW(字)执行操作:
字节操作:(AL)-((DI)),(DI)←(DI)±1字操作:(AX)-((DI)),(DI)←(DI)±2例:从一个字符串中查找一个指定的字符messdb‘COMPUTER’leadi,messmoval,‘T’movcx,8cld
repnescasbCOMPUTER(di)
(di):相匹配字符的下一个地址(cx):剩下还未比较的字符个数(di)(CX)=2例:比较两个字符串,找出它们不相匹配的位置例:反向传送leasi,mess1leadi,mess2movcx,8cldrepecmpsbleasi,mess1+7leadi,mess2+7movcx,8STdrepmovsbCOMPUTERCOMPUTER
控制转移类指令:
无条件转移指令
JMP
条件转移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ
循环指令
LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE
子程序调用和返回指令
CALL、RET
中断与中断返回指令
INT、INTO、IRET无条件转移指令:段内直接短转移:JMPSHORTOPR执行操作:(IP)←(IP)+8位位移量段内直接近转移:JMPNEARPTROPR执行操作:(IP)←(IP)+16位位移量段内间接转移:JMPWORDPTROPR执行操作:(IP)←(EA)段间直接远转移:JMPFARPTROPR执行操作:(IP)←OPR的段内偏移地址(CS)←OPR所在段的段地址段间间接转移:JMPDWORDPTROPR执行操作:(IP)←(EA)
(CS)←(EA+2)条件转移指令:注意:只能使用段内直接寻址的8位位移量(1)根据单个条件标志的设置情况转移
格式
测试条件JZ(JE)OPRZF=1JNZ(JNE)OPRZF=0JSOPRSF=1JNSOPRSF=0JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JCOPRCF=1JNCOPRCF=0(2)比较两个无符号数,并根据比较结果转移*
格式
测试条件
<JB(JNAE,JC)OPRCF=1≥JNB(JAE,JNC)OPRCF=0≤
JBE(JNA)OPRCF∨ZF=1>JNBE(JA)OPRCF∨ZF=0*
适用于地址或双精度数低位字的比较(3)比较两个带符号数,并根据比较结果转移*
格式
测试条件
<JL(JNGE)OPRSFOF=1
≥JNL(JGE)OPRSFOF=0
≤JLE(JNG)OPR(SFOF)∨ZF=1>JNLE(JG)OPR(SFOF)∨ZF=0*
适用于带符号数的比较(4)测试CX的值为0则转移
格式测试条件
JCXZOPR(CX)=0例:如果X>50,转到TOO_HIGH;否则|X-Y|→RESULT,如果溢出转到OVERFLOW,
JGJOJNS
MOVAX,XCMPAX,50TOO_HIGHSUBAX,YOVERFLOWNONNEGNEGAXNONNEG:MOVRESULT,AXTOO_HIGH:……OVERFLOW:……例:、是双精度数,分别存于DX,AX及BX,CX中,
>时转L1,否则转L2
CMPDX,BXJGL1JLL2CMPAX,CXJAL1L2:……L1:……例设有10个数据存放在以2000H单元为首地址的数据缓冲区中,试编出要求找出其中的最大的数,并存入2100H单元的程序。解:
MAXSTA:MOVBX,2000H ;首址2000H→BX中。MOVAL,[BX] ;取第一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 永寿县2025年三年级数学第二学期期末教学质量检测试题含解析
- AI在柔性电子学中的应用
- 2026年1月试卷8年级(数学)期末复习易错题(59个考点)(浙教版)(解析版)
- DB37∕T 1207.6-2026 规模化养殖场生物安全规范 第6部分:SPF鸭场
- 2025-2026学年高二下学期语文试题(解析版)
- 2026年小班教学活动与实施策略研究
- 2026年现代企业管理调查报告
- 2026年职业道德正反人物事例
- 2026年安全检查员操作规程
- 2026年社区安全问题研究及防范工作
- 2026年湖南省高考物理试卷
- 2026内蒙古鄂尔多斯市本级事业单位第二批引进高层次和紧缺人才28人备考题库及答案详解一套
- 2026年初中差异化教学与分层作业设计专题讲座
- 2026年沈阳联考面试题及答案
- 2026年高考(重庆卷)化学试题及答案
- T∕CASME 2157-2026 手机支架通 用技术规范
- 2025年北京京能同鑫投资管理有限公司市场化选聘管理人员3人笔试参考题库附带答案详解
- 化工企业节能减排课件
- 质量管理体系文件编制模板与指南
- GB/T 2423.57-2008电工电子产品环境试验第2部分:试验方法试验Ei:冲击冲击响应谱合成
- GB/T 20319-2017风力发电机组验收规范
评论
0/150
提交评论