8086指令系统简介课件_第1页
8086指令系统简介课件_第2页
8086指令系统简介课件_第3页
8086指令系统简介课件_第4页
8086指令系统简介课件_第5页
已阅读5页,还剩184页未读 继续免费阅读

下载本文档

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

文档简介

8086指令系统简介8086指令系统简介

一、8086的指令格式和寻址方式汇编语言指令要解决的两个问题:要指出进行什么操作——操作符;要指出操作数和操作数地址及操作结果放在何处——寻址方式。

操作码(OP)操作数(EA)8086指令系统简介(一)、指令格式1、零地址指令格式2、一地址指令格式操作码(OP)OPEA操作码操作数8086指令系统简介3、二地址指令格式OPEA1EA2操作码第一操作数(目的操作数)第二操作数(源的操作数)8086指令系统简介二、8086的寻址方式操作数有三种可能存放方式8086指令系统简介

(二)、8086的寻址方式操作数有三种可能存放方式操作数在指令中操作数在CPU内部某一寄存器中操作数在内存的存储单元中8086指令系统简介1、立即数寻址操作数就在指令中提供,叫立即数寻址方式。例:MOVAL,15H立即寻址该指令是把立即数15H送寄存器AL,指令执行后(AL)=15H

例如:MOVAX,7632H

例如:MOVwordptr[BX],20H8086指令系统简介2、寄存器寻址

操作数在CPU内部的寄存器中,指令中指定寄存器号例:MOVDI,AXAXDI执行前(AX)=1234H,(DI)=0018H1234H0018H1234H执行后(AX)=1234H,(DI)=1234H寄存器寻址8086指令系统简介INC CX ;将CX的内容加1ROL AH,1 ;将AH中的内容循环左移一位CXAH8086指令系统简介3、存储器寻址:操作数或地址在存储器中存储器寻址直接寻址间接寻址相对寻址基址变址寻址相对基址变址寻址8086指令系统简介(1)直接寻址操作数的16位有效地址在指令中物理地址=(DS)×16+EA例:MOVAX,[205AH]M......代码段数据段设(DS)=3000HOP5A203000205A物理地址=3205A1234指令执行后(AX)=3412H数据段首地址=300008086指令系统简介注:在汇编语言中有时用符号地址作为有效地址。例如:MOVAX,ARRY也可写成MOVAX,[ARRY]在8086中允许段超越,即允许数据放在数据段以外的其他段中,指令中需加段跨越前缀。例如:MOVAX,ES:[2000H]符号地址注:对于双操作数指令,必须有一个操作数在寄存器中8086指令系统简介(2)间接寻址:操作数的有效地址在寄存器BX,BP或变址寄存器SI,DI中操作数物理地址=(DS)×16+(BX)(DS)×16+(SI)(DS)×16+(DI)(SS)×16+(BP)8086指令系统简介

例如:MOVAX,[BX]

例如:MOVAL,[BX]

例如:MOVAX,[SI]

例如:MOVAL,[DI]

例如:MOV[SI],BX

例如:MOV[BP],AX寄存器间接寻址寄存器寻址8086指令系统简介(3)相对寻址:操作数的有效地址由基址寄存器BX,BP或变址寄存器SI,DI之一中的内容加上指令中指定的8位或16位位移量组成。操作数物理地址=(DS)×16+(BX)+

8位或16位位移量(DS)×16+(SI)+8位或16位位移量(DS)×16+(DI)+8位或16位位移量(SS)×16+(BP)+8位或16位位移量8086指令系统简介例:MOVAX,COUNT[SI]M......代码段数据段设(DS)=3000H,(SI)=0110HOP100030000110+0010=0120物理地址=30120H1234指令执行后(AX)=3412H数据段首地址=300008086指令系统简介

例如:MOVAX,20H[BX]相对寻址

例如:MOVAX,BUF[SI]8086指令系统简介(4)基址变址寻址:操作数的有效地址是指令中指定的基址寄存器(BX或BP)和变址寄存器(SI或DI)之和。操作数物理地址=(DS)×16+(BX)+

(SI)(DS)×16+(BX)+

(DI)(SS)×16+(BP)+

(SI)(SS)×16+(BP)+

(DI)8086指令系统简介

例如:MOVAX,[BX][SI]基址变址寻址

例如:MOVAL,[BX][DI]

例如:MOVAX,[BP][SI]8086指令系统简介(5)相对基址变址寻址:操作数的有效地址是指令中指定的基址寄存器(BX或BP)和变址寄存器(SI或DI)与一个8位或16位位移量之和。操作数物理地址=(DS)×16+(BX)+

(SI)+8位或16位位移量(DS)×16+(BX)+

(DI)+8位或16位位移量(SS)×16+(BP)+

(SI)+8位或16位位移量(SS)×16+(BP)+

(DI)+8位或16位位移量8086指令系统简介

例如:MOVAX,10H[BX][SI]相对基址变址寻址

例如:MOVAL,BUF[BX][DI]8086指令系统简介例如:MOVAX,MASK[BX][DI]设(DS)=2000H,(SS)=3000H(BX)=1100H,(DI)=0010H,(SI)=0030HMASK=0203H,(21313H)=1234H(31313H)=2356H,(21333H)=0056H则:操作数的物理地址=21313H执行后(AX)=1234H8086指令系统简介指出下列指令中源操作数和目的操作数的寻址方式1.MOVAX,1002.MOV[SI],AX3.MOVCX,DATX[SI]4.ADDAX,[BX][DI]5.ANDAX,BX6.MOVAX,TAX[BX][SI]7.SUBAX,[2500H]8086指令系统简介二、8086的指令系统(一)、指令书写格式:[标号]:助记符[目的操作数],[源操作数];[注释](二)、8086的指令系统数据传送指令算术运算指令逻辑操作指令串操作指令控制转移指令处理机控制指令8086指令系统简介1、数据传送:负责把数据、地址或立即数送到寄存器或存储单元中。分类通用传送指令累加器专用传送指令地址传送指令标志传送指令8086指令系统简介(1)通用传送指令最基本的传送指令(MOV)格式:MOVOPRD1,OPRD2;B/WOPRD1:累加器、寄存器、存储器OPRD2:累加器、寄存器、存储器操作数和立即数目的操作数源操作数8086指令系统简介传送路径段寄存器DS、SS、ES存储器立即数通用寄存器AX、BXCX、DXBP、SPSI、DI8086指令系统简介MOV指令的几种形式MOV[BX],AXMOVALPHA,AXMOVALPHA,AHMOVAH,ES:[BX][SI]MOVAL,[BP]MOVAX,ARRAY8086指令系统简介MOVES,DXMOVDS,AXMOVES,SS:[BX]MOVBX,DXMOVBL,AX(错误指令)MOVMEM,DXMOVCH,8AHMOVDL,‘B’MOV[BX],12H

8086指令系统简介堆栈操作指令堆栈是在存储器中开辟的一个栈区。工作方式:“后进先出”的方式进行8086的堆栈是从高地址向低地址方向生长的堆栈操作:入栈指令PUSH出栈指令POP8086指令系统简介在CALL指令、RET指令、中断响应和返回中都有入栈和出栈的操作。PUSH入栈指令格式:PUSHSRC;W字操作执行的操作(SP-1)(SP-2)(SRC)SP(SP-2);先修改后操作SRC是入栈的字操作数[寄存器、段寄存器(不包含CS)、和存储器]8086指令系统简介例如:PUSHAX设执行前(SP)=2500H,SS=5000H,(AX)=3125HSS=5000H堆栈段SP=2500H3125AX31SP=24FEH25栈顶单元物理地址=525008086指令系统简介例如:PUSHBETA[BX][SI]设DS=2000H,BX=2100H,SI=2520H,BETA=03404H,SS=5000H,SP=2500H操作数的物理地址PA=20000+2100+2520+0340=24960(524FE)(24960)(24961)(524FF)8086指令系统简介POP出栈指令格式:POPDST;W字操作执行的操作(DST)(SP+1,SP)SP(SP+2);先操作后修改DST是出栈的字操作数的目的地址(寄存器、段寄存器、和存储器)8086指令系统简介

例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H1000SP8086指令系统简介

例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H10000FFESP34H12H执行后1:AX=1234HBX=2345H

SP=0FFEH8086指令系统简介

例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H10000FFE34H12H执行后2:AX=1234HBX=2345H

SP=0FFCH0FFCSP45H23H8086指令系统简介

例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H10000FFE34H12H执行后3:AX=2345HBX=2345H

SP=0FFCH0FFC45H23HSP0FFE8086指令系统简介

例如:PUSHAXPUSHBXPOPAX执行前:AX=1234HBX=2345HSP=1000H10000FFE34H12H执行后3:AX=2345HBX=2345H

SP=0FFEH0FFC45H23HSP0FFE8086指令系统简介交换指令:XCHG格式:XCHGOPRD1,OPRD2;B/w执行的操作:(OPRD1)(OPRD2)8086指令系统简介例如:XCHGAX,BX执行前:AX=420AH,BX=7955H执行后:AX=7955H,BX=420AH例如:XCHGDX,[BP][SI]8086指令系统简介(2)累加器专用传送指令

IN输入指令固定端口输入数据格式:INAL/AX,Port;Port为端口号功能:从固定端口Port传送一个字节或一个字数据到AL或AX寄存器8086规定,从固定端口输入数据,端口号的范围为:00H~FFH8086指令系统简介可变端口输入数据格式:INAL/AX,DX;功能:从DX寄存器所存放的端口地址中送一个字节或一个字数据到AL或AX寄存器8086规定:外设最多可以有65536个I/O端口,端口号范围为0000H~FFFFH。其中低256个端口为固定端口,指令中可以直接指定。当端口号≥256时必须先把端口号放在DX中然后才使用IN指令,他们称为可变端口8086指令系统简介OUT指令输出指令格式:OUTPort,AL/AXOUTDX,AL/AX例如:INAX,21HINAL,DXOUT25H,AXOUTDX,AX8086指令系统简介(3)地址-目的传送指令:把地址送到指定的寄存器中

LEA指令:有效地址送寄存器指令格式LEAREG,SRC功能把REGEASRC注:SRC只能是各种寻址方式的存储器操作数REG只能是16位的通用寄存器

8086指令系统简介例如:LEACX,[BX][DI]执行前(BX)=1000H,(DI)=0250H操作数的有效地址EA=1000H+0250=1250H执行后(CX)=1250HCX的内容是存储单元的有效地址而非存储单元的内容例:LEADX,BATE[BX]执行前(BX)=1248H,BETA=0020H该指令执行后(DX)=1268H8086指令系统简介2、算术运算指令:用来执行算术运算8086指令系统简介(1)加法指令:ADDADCINCADD:加法指令格式:ADDOPRD1,OPRD2操作:OPRD1OPRD1+OPRD2结果影响标志位AF,CF,OF,PF,SF,ZF

例如:ADDAX,[SI]

例如:ADDAL,BH8086指令系统简介(1)加法指令:ADDADCINCADC:带进位的加法指令格式:ADCOPRD1,OPRD2操作:OPRD1OPRD1+OPRD2+CF结果影响标志位AF,CF,OF,PF,SF,ZF8086指令系统简介例如:在存储区中有两个双字数据,分别存放在FIRST和SECOND单元中(四个字节)将两个数相加后结果放在THIRD单元中7856239110331AB6FIRST33105678SECONDB61A9123THIRD8086指令系统简介相关程序如下:MOVAX,FIRST33105678B61A9123E92AFIRSTSECONDADDAX,SECONDTHIRDMOVTHIRD,AXMOVAX,FIRST+2ADCAX,SECOND+2MOVTHIRD+2,AX8086指令系统简介(1)加法指令:ADDADCINC

INC:加1指令格式:INCOPRD操作:OPRDOPRD+1结果影响标志位AF,OF,PF,SF,ZF例:INCAL例:INCCX例:INCwordPTR[BX][DI]8086指令系统简介(2)减法指令:SUBSBBDECCMPSUB:减法指令格式:SUBOPRD1,OPRD2操作:OPRD1OPRD1-OPRD2结果影响标志位AF,CF,OF,PF,SF,ZF8086指令系统简介(2)减法指令:SUB

SBBDECCMPSBB:带借位减法指令格式:SBBOPRD1,OPRD2操作:OPRD1OPRD1-OPRD2-CF结果影响标志位AF,CF,OF,PF,SF,ZF8086指令系统简介(2)减法指令:SUBSBBDECCMPDEC:减1指令格式:SUBOPRD操作:OPRDOPRD-1结果影响标志位AF,OF,PF,SF,ZF8086指令系统简介(2)减法指令:SUBSBBDECCMPCMP:比较指令格式:CMPOPRD1,OPRD2操作:OPRD1-OPRD2结果影响标志位AF,CF,OF,PF,SF,ZF8086指令系统简介例如:CMPAX,BX例如:CMPAL,20H例如:CMPAL,[SI]8086指令系统简介(3)乘法指令:MULIMULMUL:无符号书乘法指令格式:MULSRC;B/W操作:AXAL*(SRC)DXAXAX*(SRC)指令中隐含目的操作数为累加器(AL/AX)源操作数为寄存器操作数或存储器操作数8086指令系统简介(3)乘法指令:MULIMULIMUL:有符号数乘法指令格式:IMULSRC;B/W操作:AXAL*(SRC)DXAXAX*(SRC)两条指令的执行结果是不同的乘法指令对CF和OF有影响对其他位无定义8086指令系统简介(4)除法指令:DIVIDIVDIV:无符号数除法指令格式:DIVSRC操作:字节操作,16位被除数在AX中8位除数为源操作数,结果的8位商在AL中,8位余数在AH中操作:字操作,位被除数在和中,位除数为源操作数,结果的16位商在AX中,16位余数在DX中DX32AX168086指令系统简介(4)除法指令:DIVIDIVIDIV:有符号数除法指令格式与操作同DIV指令注1:除法运算后,标志位不确定注2:若除数位0,则产生0号中断注3:除法中,若被除数为8位(字节除法或16位(字除法)时必须将被除数进行符号扩展,AL扩展到AH中,AX扩展到DX中8086指令系统简介CBW:字节转换为字指令格式:CBW操作:AL中的符号位扩展到AH中例如:AL=64H=01100100B执行CBW后AX=0064H例如:AL=83H=10000011B执行CBW后AX=FF83H8086指令系统简介CWD:字转换为双字指令格式:CWD操作:AX中的符号位扩展到DX中CBW和CWD指令不影响标志位例如:计算[V-(X*Y+Z)]/X其中X,Y,Z,V均为16位有符号数分别已装入X,Y,Z,V字单元,要求将上式结果的商存入AX中,余数存入DX中,请编写相应程序8086指令系统简介[V-(X*Y+Z)]/XMOVAX,XXYZVIMULYMOVCX,AXMOVBX,DXMOVAX,ZCWDADDCX,AXADCBX,DXMOVAX,VCWDSUBAX,CXSBBDX,BX;X*YIDIVX8086指令系统简介3、逻辑运算指令和移位指令(1)逻辑运算指令ANDORXORTESTNOTAND:逻辑与指令格式:ANDOPRD1,OPRD2;B/W功能:OPRD1OPRD1OPRD2∧AND指令执行后,CF=0,OF=0.对AF无定义对SF,PF,ZF有影响8086指令系统简介注:0∧A=01A∧=A

例1:屏蔽一个字节的高4位(AL)=39H=00111001B则屏蔽字:00001111则指令ANDAL,0FH执行后(AL)=09H

例2:ANDAL,AL

执行后AL寄存器的内容不变但使CF=08086指令系统简介(1)逻辑运算指令ANDORXORTESTNOTOR:逻辑或指令格式:OROPRD1,OPRD2;B/W功能:OPRD1OPRD1OPRD2∨OR指令执行后,CF=0,OF=0.对AF无定义对SF,PF,ZF有影响8086指令系统简介注:0∨A=A1A∨=1

例1:将一个字节的高4位置1(AL)=39H=00111001B则屏蔽字:11110000则指令ORAL,F0H执行后(AL)=F9H

例2:ORAL,80HORAL,AL8086指令系统简介(1)逻辑运算指令ANDORXOR

TESTNOTXOR:逻辑异或指令格式:XOROPRD1,OPRD2;B/W功能:OPRD1OPRD1OPRD2⊕XOR指令执行后,CF=0,OF=0.对AF无定义对SF,PF,ZF有影响8086指令系统简介注:0⊕A=A1A⊕=A

例1:将某个操作数清零

则执行指令XORAL,AL则屏蔽字:10011000

例2:将操作数的某些位取反(AL)=38H=00111000B

则执行指令XORAL,98H8086指令系统简介(1)逻辑运算指令ANDORXORTESTNOTTEST:测试指令格式:TESTOPRD1,OPRD2;B/W功能:OPRD1OPRD2∧TEST指令执行后,CF=0,OF=0.对AF无定义对SF,PF,ZF有影响8086指令系统简介作用:测试某一位或某几位的条件是否满足例1:TESTAL,01HJNZTHERETHERE:…(AL)=1010001100000001例2:TESTAX,8000HJNZTHERETHERE:…8086指令系统简介(1)逻辑运算指令ANDORXORTESTNOT

NOT:逻辑非指令格式:NOTOPRD;B/W功能:OPRDOPRDNOT指令不影响标志位例NOTAL8086指令系统简介3、逻辑运算指令和移位指令(2)逻辑移位指令SHLSHRSALSARROLRORRCLRCRSHL:逻辑左移指令格式:SHLOPRD,CNT;B/W功能:移位次数由CNT决定可以是1或CL寄存器的值D0D70CF8086指令系统简介(2)逻辑移位指令SHLSHRSALSARROLRORRCLRCRSHR:逻辑右移指令格式:SHROPRD,CNT;B/W功能:D0D70CF8086指令系统简介(2)逻辑移位指令SHLSHRSALSARROLRORRCLRCRSAL:算术左移指令格式:SALOPRD,CNT;B/W功能:D0D70CF8086指令系统简介(2)逻辑移位指令SHLSHRSALSAR

ROLRORRCLRCRSAR:算术右移指令格式:SHROPRD,CNT;B/W功能:D0D7CF8086指令系统简介(2)逻辑移位指令SHLSHRSALSARROLRORRCLRCRROL:循环左移指令格式:ROLOPRD,CNT;B/W功能:D0D7CF8086指令系统简介(2)逻辑移位指令SHLSHRSALSARROLRORRCLRCRROR:循环右移指令格式:ROROPRD,CNT;B/W功能:D0D7CF8086指令系统简介(2)逻辑移位指令SHLSHRSALSARROLRORRCLRCRRCL:带进位循环左移指令格式:RCLOPRD,CNT;B/W功能:D0D7CF8086指令系统简介(2)逻辑移位指令SHLSHRSALSARROLRORRCLRCR

RCR:带进位循环右移指令格式:RCROPRD,CNT;B/W功能:D0D7CF8086指令系统简介MOVCL,3SAR20H[BX],CL执行前(DS)=2000H(BX)=1200H(21220)=38H=00111000B执行后(21220)=00000111B=07H8086指令系统简介例2:SALAH,1执行前(AH)=A5H10100101CF执行后(AH)=4AHCF=10F=1ZF=0SF=0PF=08086指令系统简介4、串操作指令8086指令系统简介5、控制转移指令(1)无条件转移指令JPM段内转移段间转移IPCSIP8086指令系统简介DatasegmentAddrdwnumberNumberdwyCountdw?DataendsCodesegmentAssumecs:code,ds:dataStart:movax,dataMovds,axMovcx,0Movbx,addrMovax,[bx]Repeat:testax,0ffffhJz

exit

Jns

shiftInccxShift:shlax,1

Jmp

repeatExit:movcount,cxMovah,4chInt21hCodeendsEndstart8086指令系统简介(2)条件转移指令条件判断Y转向目标指令N顺序执行指令8086指令系统简介根据单个标志位的条件进行转移JZOPR;ZF=1转移JNZOPR;ZF=0转移JSOPR;SF=1转移JNSOPR;SF=0转移JOOPR;OF=1转移JNOOPRJPOPRJNPOPR;OF=0转移;PF=1转移;PF=0转移例如:CMPAX,DXJZNEXT8086指令系统简介比较两个无符号数根据比较结果转移JB(JNAE,JC)OPRJNB(JAE,JNC)OPRA和BJBE(JNA,)OPRJNBE(JA,)OPR8086指令系统简介例如:当一个无符号数x小于、等于、或大于100时的三种情况下,应去执行三个不同的程序段MOVAL,XCMPAL,100JAPROG3PROG1:X<100程序段PROG2:X=100程序段PROG3:X>100程序段JZPROG28086指令系统简介比较两个有符号数根据比较结果转移JL(JNGE)OPRJNL(JGE)OPRJLE(JNG)OPRJNLE(JG)OPR测试CX的值为0则转移指令JCXZ格式:JCXZOPR8086指令系统简介(3)循环指令LOOP循环指令格式:LOOPOPR测试条件:CX≠0LOOPZ/LOOPE为零或相等时循环指令格式:LOOPZ/LOOPEOPR测试条件:ZF=1且CX≠0LOOPNZ/LOOPNE不为零或不相等时循环指令格式:LOOPNZ/LOOPNEOPR测试条件:ZF=0且CX≠08086指令系统简介例如:有一个首地址为ARRAY的M个字数组试编写一个程序,求出该数组的内容之和(不考虑溢出)并把结果存入TOTAL中存储器数据段ARRAYM个TOTAL'MOVCX,MMOVAX,0MOVSI,0STARTLOOP:ADDAX,ARRAY[SI]ADDSI,2LOOPSTARTLOOPMOVTOTAL,AX8086指令系统简介5、处理器控制指令CLCCMCSTCCLDSTDCLISTIHLT8086指令系统简介§3.3汇编语言程序设计一、8086汇编语言源程序的格式1、一般格式Name1segment

语句Name1endsName2segment

语句Name2ends8086指令系统简介Name3segment

语句Name3endsend[标号]2、指令的种类

指令语句指示性语句MOV,ADD,LMPMYPLACEDB?8086指令系统简介二、语句的格式[名字项]操作项操作数项[;注释项]1、名字项标号变量某条指令所在存储单元的符号地址某操作数所在存储单元的符号地址(1)标号在代码段定义,后面跟“:”(2)变量在代码段以外的段定义,后不跟“:”2、操作项指令、伪指令、或宏指令助记符3、操作数项由一个或多个项组成,多个操作数之间用“,”分开8086指令系统简介(1)对于指令语句一般为操作数地址、变量、寄存器、标号、变量或表达式(2)对于伪指令语句或宏指令语句一般为所要的参数8086指令系统简介DEBUG.EXE调试程序一、程序的编制和运行1、用编辑程序EDIT建立以.ASM为扩展名的源程序文件。2、用汇编程序MASM对源文件进行汇编,生成以.OBJ为扩展名的目标文件3、用LINK(连接程序)对目标文件进行连接,形成以.EXE为扩展名的可执行文件。8086指令系统简介二、DEBUG.EXE调试程序的使用1、进入DEBUG在根目录下键入DEBUG例如:C>DEBUG或者C>DEBUGDEBUG调入后出现提示符8086指令系统简介2、DEBUG的常用命令(1)显示内存单元内容命令D格式:-D地址或-D范围(2)修改内存单元内容命令E格式1:-E地址内容表例如:-EDS:1200011’ABC’22格式2:-E地址逐个单元相继修改例如:-E1008086指令系统简介8086指令系统简介8086指令系统简介2、DEBUG的常用命令(1)显示内存单元内容命令D格式:-D地址或-D范围(2)修改内存单元内容命令E格式1:-E地址内容表例如:-EDS:1200011’ABC’22格式2:-E地址逐个单元相继修改例如:-E1008086指令系统简介8086指令系统简介2、DEBUG的常用命令(1)显示内存单元内容命令D格式:-D地址或-D范围(2)修改内存单元内容命令E格式1:-E地址内容表例如:-EDS:1200011’ABC’22格式2:-E地址逐个单元相继修改例如:-E1008086指令系统简介8086指令系统简介(3)检查和修改寄存器命令R格式1:-R显示CPU内所有寄存器内容和标志位格式2:-R寄存器名显示和修改某个寄存器内容格式3:-RF显示和修改标志位状态8086指令系统简介8086指令系统简介8个标志位的置位复位名称标志位置位复位溢出OFOVNV方向DFDNUP符号SFNGPL零ZFZRNZ辅助进位AFACNA奇偶PFPEPO进位CFCYNC中断IFEIDI8086指令系统简介(3)检查和修改寄存器命令R格式1:-R显示CPU内所有寄存器内容和标志位格式2:-R寄存器名显示和修改某个寄存器内容格式3:-RF显示和修改标志位状态8086指令系统简介8086指令系统简介8086指令系统简介(3)检查和修改寄存器命令R格式1:-R显示CPU内所有寄存器内容和标志位格式2:-R寄存器名显示和修改某个寄存器内容格式3:-RF显示和修改标志位状态8086指令系统简介8086指令系统简介8086指令系统简介8086指令系统简介(4)运行命令G格式:-G[=地址1][地址2[地址3…]](5)跟踪命令T格式1:-T[=地址]逐条指令跟踪格式2:-T[=地址][值](6)汇编命令A格式:-A[地址]8086指令系统简介8086指令系统简介8086指令系统简介(4)运行命令G格式:-G[=地址1][地址2[地址3…]](5)跟踪命令T格式1:-T[=地址]逐条指令跟踪格式2:-T[=地址][值](6)汇编命令A格式:-A[地址]8086指令系统简介8086指令系统简介8086指令系统简介(4)运行命令G格式:-G[=地址1][地址2[地址3…]](5)跟踪命令T格式1:-T[=地址]逐条指令跟踪格式2:-T[=地址][值](6)汇编命令A格式:-A[地址]8086指令系统简介8086指令系统简介8086指令系统简介(4)运行命令G格式:-G[=地址1][地址2[地址3…]](5)跟踪命令T格式1:-T[=地址]逐条指令跟踪格式2:-T[=地址][值](6)汇编命令A格式:-A[地址]8086指令系统简介8086指令系统简介8086指令系统简介8086指令系统简介注:若输入的语句有语法错误,则DEBUG显示^ERROR且重新显示现行的汇编地址等待新的输入(7)反汇编命令U格式:-U[范围]8086指令系统简介8086指令系统简介8086指令系统简介8086指令系统简介8086指令系统简介8086指令系统简介(8)退出命令Q格式:-Q退出DEBUG返回DOS8086指令系统简介8086指令系统简介8086指令系统简介8086指令系统简介8086指令系统简介三、指示性语句

伪指令语句不形成指令的机器码,仅告诉汇编程序为指令中的操作数如何存放,指令如何产生机器码伪指令语句前如有标号,其后无冒号“:”如有操作数,可以有两个以上的操作数。伪指令在程序中起着定义、赋置说明、分段等作用。8086指令系统简介1、数据定义伪指令格式:[变两名]助记符操作数[;注释]DB:定义字节,其后的每个操作数占用一个字节DW:定义字,其后的每个操作数占用一个字DD:定义双字,其后的每个操作数占用两个字DQ:定义4个字,其后的每个操作数占用4个字Dt:定义10个字节,其后的每个操作数占用10个字节8086指令系统简介归纳为以下几种情况

(1)操作数可以是常量或常量表达式例如:XDB25,42,14H,0,-30YDW123H,6×10,3A60HZDD3705H,15X192A1400E2Y23013C00603A05Z3700008086指令系统简介(2)伪指令后可用操作数“?”分配并保留空间,不存数据例如:ADB5,?DB?,?,10BDW?,15,?A05---0AB--0F00--8086指令系统简介(3)可以用操作符DUP来复制一些操作数格式:EXP–COUNTDUP(操作数….操作数)例如:Y1DB2DUP(11,?,15)Y2DW3DUP(2500H,?)8086指令系统简介Y1DB2DUP(11,?,15)Y2DW3DUP(2500H,?)Y10B-0F0B-0FY20025--0025-8086指令系统简介例如:PARADB2DUP(3,2DUP(5,7),0),?0305PARA07050700030507050700-复制操作数DUP可以嵌套8086指令系统简介(4)可以定义一个表或一个字符串例如:1~10的平方值表可以定义如下:PFBDB1,4,9,16,25,36,49,64,81定义字符串STRINGSDB“GOODMORNING”8086指令系统简介2、符号定义语句格式:符号名EQU表达式伪指令可以把符号名定义为常量,或一个能求出常数值得表达式例如:RT1EQU123FSEQU32B5EQURT1+18086指令系统简介3、段定义伪指令(1)段定义伪指令SEGMENT/ENDS格式:段名segment[定位类型][组合类型][类别]段名ends功能:定义一个逻辑段,由若干逻辑段组成源程序8086指令系统简介定位类型说明段的开始地点的特点PARAWORDBYTEPAGE组合类型告诉连接程序本段与其他段的关系PUBLICSTACKCOMMON8086指令系统简介(2)段寄存器说明伪指令格式:ASSUME段寄存器名:段名[段寄存器名:段名]功能:说明段寄存器与段的关系在一般程序中,本伪指令通常位于代码段的前面,指明程序中各段所用到的段寄存器的情况8086指令系统简介CodesegmentAssumecs:code,ds:date,ss:stack,es:date1,Movax,dateMovds,axMovax,date1Moves,axCodeends8086指令系统简介返回dos通常在代码段结束之前插入两条语句MOVAH,4CHINT21H8086指令系统简介四、程序设计举例1、直线运行程序例如:求两个数的平均值。两个数分别放在X和Y单元中,结果放在Z单元中。设两个数分别为32和64编程如下:8086指令系统简介DATEsegmentXDB20HYDB40HX20Y40ZDB?DATEENDSCODEsegmentASSUMECS:CODE,

DS:DATESTART:MOVAX,DATEMOVDS,AXMOVAL,X8086指令系统简介MOVAL,XADDAL,YMOVAH,00HADCAH,00HMOVBL,02HDIVBLMOVZ,ALCODEENDSENDSTART8086指令系统简介2、分支程序设计分支程序:根据某种判断结果,从两个以上的程序中选择一个执行。条件分支段1分支段2或条件分支段28086指令系统简介例3、比较两个无符号数的大小,把大数存入MAX单元。DATEsegment

SHUJUDBX1,X2

MAXDB?

DATEENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

8086指令系统简介MOVAX,DATA

MOVDS,AX

MOVAL,SHUJU

CMPAL,SHUJU+1JABRANCHBRANCH:MOVMAX,ALMOVAL,SHUJU+1CODEENDSENDMOVAH,4CHINT21H8086指令系统简介3、循环程序设计循环程序一般由四部分组成循环初值循环次数,循环正常工作的初始状态循环体循环工作的主体部分,为完成特定功能而设计的程序段修改部分保证每次循环时,相关信息发生有规律的变化,为下一次循环作准备循环控制部分控制循环的运行和结束8086指令系统简介例4、从XX单元开始10个连续单元中存放有10个无符号数,从中找出最大者送YY单元。XXYY分析AL8086指令系统简介Datasegment

Xxdb15,22,16,9,3,44,26,88,39,52

Yydb?

Dataends

Codesegment

Assumecs:code,ds:data

Assumecs:code,ds:data

Movax,dataMovds,axMoval,xx8086指令系统简介leabx,xxincbxCmpal,[bx]Movcx,9JaenextXchgal,[bx]Loopnext:loop1:loop1Movyy,alMovah,4chInt21hCodeendsEnd8086指令系统简介常用系统功能调用01H号读取键盘字符并回显(单字符)调用方式MOVAH,01HINT21H说明等待按键若是CTRL-BREAK则退出其他键,将其ASCLL码送AL寄存器,同时送显示器显示8086指令系统简介02H号显示字符调用方式MOVAH,02HINT21HDL要显示字符的ASCLL码说明将置入DL寄存器的字符送显示器显示8086指令系统简介08H号键盘输入单字符不显示调用方式MOVAH,08HINT21H说明将输入的字符送AL寄存器8086指令系统简介09H号字符串输出显示调用方式DX要显示字符串的首地址MOVAH,09HINT21H说明要显示的字符串一般定义在数据段该字符串必须以定界符“$”为结束标志“$”字符不显示8086指令系统简介STRINGDB‘Howareyou’,‘$’例如:

MOVDX,OFFSETSTRINGMOVAH,09HINT21H8086指令系统简介0AH号字符串输入调用方式DX接收字符串缓冲区的首地址MOVAH,0AHINT21H说明从键盘接收字符串到内存指定的缓冲区,直到回车为止

缓冲区的第一个字节为指定缓冲区的字符个数

缓冲区的第二个字节保留,填写实际输入字符的个数

8086指令系统简介缓冲区的第三个字节开始存入输入的字符

例如:

DATASEGMENTBUFDB80DB?DB80DUP(?)DATAENDS8086指令系统简介4CH号结束程序返回操作系统调用方式MOVAH,4CHINT21H8086指令系统简介从键盘输入07中的一个数,然后将数字转换成对应位为1的8位二进制数存入AL中,根据AL中哪一位为1转入相应的分支程序处,实现散转,设8个分支程序分别显示‘A’’H’中的一个。分析:

输入0

AL00000001

显示’A’

输入1AL00000010

显示’B’

输入2AL00000100

显示’C’

输入3AL00001000

显示’D’

输入7AL10000000

显示’H’8086指令系统简介实际:

输入0AL0011000000000001

输入10011000100000010AL

输入30011001100001000AL

输入70011011110000000AL设置初值寄存器DL00000001移动次数由AL低4位得到送CL寄存器移动DL后送显示80

温馨提示

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

评论

0/150

提交评论