8086指令系统简介ppt课件

上传人:工**** 文档编号:569742472 上传时间:2024-07-30 格式:PPT 页数:188 大小:3.53MB
返回 下载 相关 举报
8086指令系统简介ppt课件_第1页
第1页 / 共188页
8086指令系统简介ppt课件_第2页
第2页 / 共188页
8086指令系统简介ppt课件_第3页
第3页 / 共188页
8086指令系统简介ppt课件_第4页
第4页 / 共188页
8086指令系统简介ppt课件_第5页
第5页 / 共188页
点击查看更多>>
资源描述

《8086指令系统简介ppt课件》由会员分享,可在线阅读,更多相关《8086指令系统简介ppt课件(188页珍藏版)》请在金锄头文库上搜索。

1、8086指令系统简介指令系统简介1;. 一、一、 8086的指令格式和寻址方式的指令格式和寻址方式汇编语言指令要解决的两个问题:要指出进行什么操作操作符;要指出操作数和操作数地址及操作结果放在何处寻址方式。 操作码(OP)操作数(EA)2(一)、指令格式(一)、指令格式n1、零地址指令格式n2、一地址指令格式操作码(操作码(OP)OP EA操作码操作数3n3、二地址指令格式OP EA1 EA2操作码第一操作数(目的操作数)第二操作数(源的操作数)4n二、8086的寻址方式操操作作数数有有三三种种可可能能存存放放方方式式5n (二)、(二)、8086的寻址方式的寻址方式操操作作数数有有三三种种可

2、可能能存存放放方方式式操作数在指令中操作数在CPU内部某一寄存器中操作数在内存的存储单元中6n1、立即数寻址、立即数寻址n操作数就在指令中提供,叫立即数寻址方式寻址方式。n例:MOV AL,15H立即寻址立即寻址该指令是把立即数该指令是把立即数15H送寄存器送寄存器AL,指令执行后指令执行后(AL)=15H 例如:例如: MOV AX,7632H 例如:例如: MOV word ptr BX,20H7n2、寄存器寻址寄存器寻址 n操作数在操作数在CPU内部的寄存器中,指令中指定寄存器号内部的寄存器中,指令中指定寄存器号n例:例:MOV DI,AXAXDI执行前(AX)=1234H,(DI)=0

3、018H1234H0018H1234H执行后(AX)=1234H,(DI)=1234H寄存器寻址寄存器寻址8INCCX;将CX的内容加1ROLAH,1 ;将AH中的内容循环左移一位CXAH9n3、存储器寻址:操作数或地址在存储器中存储器寻址直接寻址间接寻址相对寻址基址变址寻址相对基址变址寻址10n(1)直接寻址n操作数的16位有效地址在指令中n物理地址=(DS)16+EAn例:MOV AX,205AHM.代码段数据段设(DS)=3000HOP5A203 0 0 0205A物理地址=3205A1234指令执行后(AX)=3412H数据段首地址=3000011n注:在汇编语言中有时用符号地址作为有

4、效地址。n例如:MOV AX,ARRYn也可写成 MOV AX,ARRYn在8086中允许段超越,即允许数据放在数据段以外的其他段中,指令中需加段跨越前缀。n例如:MOV AX,ES:2000H符号地址注注:对于双操作数指令,必须有一个操作数在寄存器中12n(2)间接寻址:操作数的有效地址在寄存器BX,BP或变址寄存器SI,DI中操作数物理地址=(DS)16+(BX)(DS)16+(SI)(DS)16+(DI)(SS)16+(BP)13 例如:例如: MOV AX,BX 例如:例如: MOV AL,BX 例如:例如: MOV AX,SI 例如:例如: MOV AL,DI 例如:例如: MOV

5、SI,BX 例如:例如: MOV BP,AX寄存器间接寻址寄存器间接寻址寄存器寻址寄存器寻址14n(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位位移量15n例:MOV AX,COUNTSIM.代码段数据段设(DS)=3000H,(SI)=0110HOP10003 0 0 00110+0010=0120物理地址=30120H1

6、234指令执行后(AX)=3412H数据段首地址=3000016 例如:例如: MOV AX,20HBX相对寻址相对寻址 例如:例如: MOV AX,BUFSI17n(4)基址变址寻址:操作数的有效地址是指令中指定的基址寄存器(BX或BP)和变址寄存器(SI或DI)之和。操作数物理地址=(DS)16+(BX)+ (SI)(DS)16+(BX)+ (DI)(SS)16+(BP)+ (SI)(SS)16+(BP)+ (DI)18 例如:例如: MOV AX,BXSI基址变址寻址基址变址寻址 例如:例如: MOV AL,BXDI 例如:例如: MOV AX,BPSI19n(5)相对基址变址寻址:操作

7、数的有效地址是指令中指定的基址寄存器(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位位移量20 例如:例如: MOV AX,10HBXSI相对基址变址寻址相对基址变址寻址 例如:例如: MOV AL,BUFBXDI21n例如:MOV AX,MASKBXDIn设(DS)=2000H,(SS)=3000Hn(BX)=1100H,(DI)=0010

8、H,(SI)=0030HnMASK=0203H,(21313H)=1234Hn(31313H)=2356H,(21333H)=0056Hn则:操作数的物理地址=2 1 3 1 3H执行后(AX)=1234H22n指出下列指令中源操作数和目的操作数的寻址方式n1.MOV AX,100n2.MOV SI,AXn3.MOV CX,DATXSIn4.ADD AX,BXDIn5.AND AX,BXn6.MOV AX,TAXBXSIn7.SUB AX,2500H23二、二、 8086的指令系的指令系统n(一)、指令书写格式:标号:助记符 目的操作数,源操作数;注释n(二)、8086的指令系统数据传送指令数

9、据传送指令算术运算指令算术运算指令逻辑操作指令逻辑操作指令串操作指令串操作指令控制转移指令控制转移指令处理机控制指令处理机控制指令24n1、数据传送:负责把数据、地址或立即数送到寄存器或存储单元中。分类通用传送指令通用传送指令累加器专用传送指令累加器专用传送指令地址传送指令地址传送指令标志传送指令标志传送指令25n(1)通用传送指令最基本的传送指令(最基本的传送指令(MOV) 格式:格式:MOV OPRD1,OPRD2;B/WOPRD1:累加器、寄存器、存储器累加器、寄存器、存储器OPRD2:累加器、寄存器、存储器操作数和立即数累加器、寄存器、存储器操作数和立即数目的操作数目的操作数源操作数源

10、操作数26传送路径段寄存器DS、SS、ES存储器立即数通用寄存器AX、BXCX、DXBP、SPSI、DI27MOV 指令的几种形式nMOV BX,AXnMOV ALPHA,AXnMOV ALPHA,AHnMOV AH,ES:BXSInMOV AL,BPnMOV AX,ARRAY28MOV ES,DXMOV DS,AXMOV ES,SS:BXMOV BX,DXMOV BL,AX(错误指令)MOV MEM,DXMOV CH,8AHMOV DL,B MOV BX,12H 29堆栈操作指令堆栈是在存储器中开辟的一个栈区 。工作方式:“后进先出”的方式进行8086的堆栈是从高地址向低地址方向生长的 堆栈

11、操作:入栈指令入栈指令PUSH出栈指令出栈指令POP30n在CALL指令、 RET指令、中断响应和返回中都有入栈和出栈的操作。PUSH入栈指令格式:PUSH SRC;W字操作执行的操作(SP-1)(SP-2) (SRC)SP (SP-2);先修改后操作SRC是入栈的字操作数寄存器、段寄存器(不包含CS)、和存储器31n例如:PUSH AX n设执行前(SP)=2500H,SS=5000H,(AX)=3125HSS=5000H堆栈段SP=2500H3 1 2 5AX3 1SP=24FEH2 5栈顶单元物理地址=5250032n例如:PUSH BETABXSIn设DS=2000H,BX=2100H

12、,SI=2520H,nBETA=03404H,SS=5000H,SP=2500H操作数的物理地址PA=20000+2100+2520+0340=24960(524FE)(24960)(24961)(524FF)33POP出栈指令格式:POP DST;W字操作执行的操作(DST) (SP+1,SP)SP (SP+2);先操作后修改DST是出栈的字操作数的目的地址(寄存器、段寄存器、和存储器)34 例如:例如: PUSH AX PUSH BX POP AX执行前:执行前: AX=1234H BX=2345H SP=1000H1000SP35 例如:例如: PUSH AX PUSH BX POP A

13、X执行前:执行前: AX=1234H BX=2345H SP=1000H10000FFESP34H12H执行后执行后1: AX=1234H BX=2345H SP=0FFEH36 例如:例如: PUSH AX PUSH BX POP AX执行前:执行前: AX=1234H BX=2345H SP=1000H10000FFE34H12H执行后执行后2: AX=1234H BX=2345H SP=0FFCH0FFCSP45H23H37 例如:例如: PUSH AX PUSH BX POP AX执行前:执行前: AX=1234H BX=2345H SP=1000H10000FFE34H12H执行后执

14、行后3: AX=2345H BX=2345H SP=0FFCH0FFC45H23HSP0FFE38 例如:例如: PUSH AX PUSH BX POP AX执行前:执行前: AX=1234H BX=2345H SP=1000H10000FFE34H12H执行后执行后3: AX=2345H BX=2345H SP=0FFEH0FFC45H23HSP0FFE39交换指令:XCHG格式:XCHG OPRD1,OPRD2;B/w执行的操作:(OPRD1) (OPRD2)40n例如:XCHG AX,BXn执行前:AX=420AH , BX=7955Hn执行后:AX=7955H ,BX=420AHn例如

15、:XCHG DX,BPSI41n(2) 累加器专用传送指令 IN 输入指令 固定端口输入数据格式:IN AL/AX,Port;Port为端口号功能:从固定端口Port传送一个字节或 一个字数据到AL或AX寄存器8086规定,从固定端口输入数据,端口号的范围为: 00HFFH42可变端口输入数据格式:IN AL/AX,DX;功能:从DX寄存器所存放的端口地址中送 一个字节或 一个字数据到AL或AX寄存器8086规定:外设最多可以有65536个I/O端口,端口号范围为0000HFFFFH。其中低256个端口为固定端口,指令中可以直接指定。当端口号256时必须先把端口号放在DX中然后才使用IN指令,

16、他们称为可变端口43nOUT 指令 输出指令n格式:OUT Port,AL/AXn OUT DX,AL/AXn例如:IN AX,21Hn IN AL,DXn OUT 25H,AXn OUT DX,AX44n(3)地址-目的传送指令:n把地址送到指定的寄存器中 LEA指令:有效地址送寄存器指令格式LEA REG,SRC功能把REG EASRC注:SRC只能是各种寻址方式 的存储器操作数 REG 只能是16位的通用寄存器 45n例如:LEA CX,BXDIn执行前 (BX)=1000H ,(DI)=0250H操作数的有效地址EA=1000H+0250=1250H执行后(CX)=1250HCX 的内

17、容是存储单元的有效地址而非存储单元的内容例:LEA DX,BATEBX执行前(BX)=1248H ,BETA=0020H该指令执行后(DX)=1268H46n2、算术运算指令:用来执行算术运算47n(1)加法指令:ADD ADC INC ADD:加法指令格式:ADD OPRD1,OPRD2操作: OPRD1 OPRD1+OPRD2结果影响标志位 AF,CF,OF,PF,SF,ZF 例如:例如: ADD AX,SI 例如:例如: ADD AL,BH48n(1)加法指令:ADD ADC INC ADC:带进位的加法指令格式:ADC OPRD1,OPRD2操作: OPRD1 OPRD1+OPRD2+

18、CF结果影响标志位 AF,CF,OF,PF,SF,ZF49n例如:在存储区中有两个双字数据,分别存放在FIRST和SECOND单元中(四个字节)将两个数相加后结果放在THIRD单元中7 8 5 62 3 9 11 0 3 31 A B 6FIRST3 31 05 67 8SECONDB 61 A9 12 3THIRD50相关程序如下:MOV AX,FIRST3 31 05 67 8B 61 A9 12 3 E 9 2 AFIRSTSECONDADD AX,SECONDTHIRDMOV THIRD,AXMOV AX,FIRST+2ADC AX,SECOND+2MOV THIRD+2,AX51n(

19、1)加法指令:ADD ADC INC INC:加1指令格式:INC OPRD操作: OPRD OPRD+1结果影响标志位 AF,OF,PF,SF,ZF例:INC AL例:INC CX例:INC word PTR BXDI52n(2)减法指令:SUB SBB DEC CMPSUB:减法指令格式:SUB OPRD1,OPRD2操作: OPRD1 OPRD1-OPRD2结果影响标志位 AF,CF,OF,PF,SF,ZF53n(2)减法指令:SUB SBB DEC CMPSBB:带借位减法指令格式:SBB OPRD1,OPRD2操作: OPRD1 OPRD1-OPRD2-CF结果影响标志位 AF,CF

20、,OF,PF,SF,ZF54n(2)减法指令:SUB SBB DEC CMPDEC:减1指令格式:SUB OPRD操作: OPRD OPRD-1结果影响标志位 AF,OF,PF,SF,ZF55n(2)减法指令:SUB SBB DEC CMPCMP:比较指令格式:CMP OPRD1,OPRD2操作: OPRD1-OPRD2结果影响标志位 AF,CF,OF,PF,SF,ZF56例如:CMP AX,BX例如:CMP AL,20H例如:CMP AL,SI57n(3)乘法指令:MUL IMULMUL:无符号书乘法指令格式:MUL SRC;B/W操作:AX AL*(SRC)DX AX AX*(SRC)指令

21、中隐含目的操作数为累加器(AL/AX)源操作数为寄存器操作数寄存器操作数或存储器操作数存储器操作数58n(3)乘法指令:MUL IMULIMUL:有符号数乘法指令格式:IMUL SRC;B/W操作:AX AL*(SRC)DX AX AX*(SRC)两条指令的执行结果是不同的乘法指令对乘法指令对CF和和OF有影响对其他位无定义有影响对其他位无定义59n(4) 除法指令:DIV IDIVDIV:无符号数除法指令格式:DIV SRC操作:字节操作字节操作,16位被除数在AX中8位除数为源操作数,结果的8位商在AL中,8位余数在AH中操作:字操作字操作, 位被除数在 和 中, 位除数为源操作数, 结果

22、的16位商在AX中,16位余数在DX中DX 32AX 16 60n(4) 除法指令:DIV IDIVIDIV:有符号数除法指令格式与操作同DIV 指令注1:除法运算后,标志位不确定 注2:若除数位0,则产生0号中断 注3:除法中,若被除数为8位(字节除法或16位(字除法)时必须将被除数进行符号扩展,AL扩展到AH中,AX扩展到DX中61CBW:字节转换为字指令格式:CBW操作:AL中的符号位扩展到AH中例如: AL=64H=0 1 1 0 0 1 0 0B执行CBW后AX=00 64H例如: AL=83H=1 0 0 0 0 0 1 1B执行CBW后AX=FF 83H62CWD:字转换为双字指

23、令格式:CWD操作:AX中的符号位扩展到DX中CBW和CWD指令不影响标志位例如:计算 V-(X*Y+Z)/X其中X,Y,Z,V均为16位有符号数分别已装入X,Y,Z,V字单元,要求将上式结果的商存入AX中,余数存入DX中,请编写相应程序63V-(X*Y+Z)/XMOV AX,XXYZVIMUL Y MOV CX,AXMOV BX,DXMOV AX,ZCWD ADD CX,AXADC BX,DXMOV AX,VCWD SUB AX,CXSBB DX,BX;X*Y IDIV X643、逻辑运算指令和移位指令、逻辑运算指令和移位指令(1)逻辑运算指令AND OR XOR TEST NOT AND:

24、逻辑与指令格式:AND OPRD1,OPRD2;B/W 功能: OPRD1 OPRD1 OPRD2AND指令执行后,CF=0,OF=0. 对AF无定义对 SF ,PF ,ZF 有影响65注: 0A=01A=A 例1:屏蔽一个字节的高4位 (AL)=39H =0011 1001B则屏蔽字: 00001111则指令AND AL,0FH执行后 (AL)= 09H 例2:AND AL,AL 执行后AL寄存器的内容不变 但使CF=0 66(1)逻辑运算指令AND OR XOR TEST NOT OR:逻辑或指令格式:OR OPRD1,OPRD2;B/W 功能: OPRD1 OPRD1 OPRD2OR指令

25、执行后,CF=0,OF=0. 对AF无定义对 SF ,PF ,ZF 有影响67注: 0A=A1A=1 例1:将一个字节的高4位置1 (AL)=39H =0011 1001B则屏蔽字: 11110000则指令OR AL,F0H执行后 (AL)= F9H 例2:OR AL,80H OR AL,AL 68(1)逻辑运算指令AND OR XOR TEST NOT XOR:逻辑异或指令格式:XOR OPRD1,OPRD2;B/W 功能: OPRD1 OPRD1 OPRD2XOR指令执行后,CF=0,OF=0. 对AF无定义对 SF ,PF ,ZF 有影响69注: 0A=A1A=A 例1:将某个操作数清零

26、 则执行指令 XOR AL,AL则屏蔽字: 10011000 例2:将操作数的某些位取反 (AL)=38H= 0011 1000B 则执行指令 XOR AL,98H70(1)逻辑运算指令AND OR XOR TEST NOT TEST:测试指令格式:TEST OPRD1,OPRD2;B/W 功能: OPRD1 OPRD2TEST指令执行后,CF=0,OF=0. 对AF无定义对 SF ,PF ,ZF 有影响71作用:测试某一位或某几位的条件是否满足例1:TEST AL,01HJNZ THERE THERE : (AL)=1010 0011 0000 0001例2:TEST AX,8000HJNZ

27、 THERE THERE : 72(1)逻辑运算指令AND OR XOR TEST NOT NOT:逻辑非指令格式:NOT OPRD;B/W 功能: OPRD OPRDNOT指令不影响标志位例 NOT AL733、逻辑运算指令和移位指令、逻辑运算指令和移位指令(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR SHL:逻辑左移指令格式:SHL OPRD,CNT;B/W 功能:移位次数由CNT决定 可以是1或CL寄存器的值D0D70CF74(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR SHR:逻辑右移指令格式:SHR OPRD,C

28、NT;B/W 功能:D0D70CF75(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR SAL:算术左移指令格式:SAL OPRD,CNT;B/W 功能:D0D70CF76(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR SAR:算术右移指令格式:SHR OPRD,CNT;B/W 功能:D0D7CF77(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR ROL:循环左移指令格式:ROL OPRD,CNT;B/W 功能:D0D7CF78(2)逻辑移位指令SHL SHR SAL SAR ROL ROR R

29、CL RCR ROR:循环右移指令格式:ROR OPRD,CNT;B/W 功能:D0D7CF79(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR RCL:带进位循环左移指令格式:RCL OPRD,CNT;B/W 功能:D0D7CF80(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR RCR:带进位循环右移指令格式:RCR OPRD,CNT;B/W 功能:D0D7CF81MOV CL,3SAR 20HBX,CL执行前(DS)=2000H (BX)=1200H (21220)=38H =0011 1000B 执行后(21220)= 0

30、000 0111B=07H82n例2: SAL AH,1执行前(AH)=A5H 1 0 1 0 0 1 0 1CF执行后(AH)= 4AHCF=10F=1ZF=0SF=0PF=083 4、串操作指令、串操作指令84n 5、控制转移指令、控制转移指令(1)无条件转移指令JPM段内转移段间转移IPCS IP85Data segmentAddr dw numberNumber dw yCount dw ?Data endsCode segmentAssume cs:code,ds:dataStart:mov ax,data Mov ds,ax Mov cx,0 Mov bx,addr Mov ax,

31、bxRepeat:test ax,0ffffh Jz exit Jns shiftInc cxShift: shl ax,1 Jmp repeatExit: mov count,cx Mov ah,4chInt 21h Code ends End start 86(2)条件转移指令条件判断Y转向目标指令N顺序执行指令87根据单个标志位的条件进行转移JZ OPR;ZF=1 转移JNZ OPR;ZF=0 转移JS OPR;SF=1 转移JNS OPR;SF=0 转移JO OPR;OF=1 转移JNO OPRJP OPRJNP OPR;OF=0转移;PF=1转移;PF=0转移例如: CMP AX,D

32、XJZ NEXT 88比较两个无符号数根据比较结果转移JB(JNAE,JC) OPRJNB(JAE,JNC) OPRA和BJBE(JNA,) OPRJNBE(JA,) OPR89n例如:当一个无符号数x小于、等于、或大于100时的三种情况下,应去执行三个不同的程序段MOV AL,XCMP AL,100JA PROG3PROG1: X100程序段 JZ PROG290比较两个有符号数根据比较结果转移JL(JNGE) OPRJNL(JGE) OPRJLE(JNG) OPRJNLE(JG) OPR测试CX的值为0则转移指令 JCXZ格式:JCXZ OPR91(3)循环指令LOOP 循环指令格式:LO

33、OP OPR测试条件:CX0LOOPZ/LOOPE 为零或相等时循环指令格式:LOOPZ/LOOPE OPR测试条件:ZF=1且CX0LOOPNZ/LOOPNE 不为零或不相等时循环指令格式:LOOPNZ/LOOPNE OPR测试条件:ZF=0且CX092n例如:有一个首地址为ARRAY的M个字数组n试编写一个程序,求出该数组的内容之和(不考虑溢出)并把结果存入TOTAL中存储器数据段ARRAYM个TOTALMOV CX,MMOV AX,0MOV SI,0START LOOP:ADD AX,ARRAYSIADD SI,2LOOP START LOOPMOV TOTAL,AX935、处理器控制指

34、令、处理器控制指令CLCCMCSTCCLDSTDCLISTIHLT943.3汇编语言程序言程序设计n一、8086汇编语言源程序的格式n1、一般格式nName1 segmentn 语句nName1 endsnName2 segmentn 语句nName2 ends95nName3 segment n 语句nName3 endsn end 标号n2、指令的种类n 指令语句指示性语句MOV ,ADD ,LMPMY PLACE DB ?96n二、语句的格式名字项操作项操作数项;注释项1、名字项标号变量某条指令所在存储单元的符号地址某操作数所在存储单元的符号地址(1)标号在代码段定义,后面跟“:”(2)

35、变量在代码段以外的段定义,后不跟“:”2、操作项指令、伪指令、或宏指令助记符3、操作数项由一个或多个项组成,多个操作数之间用“,”分开97(1)对于指令语句一般为操作数地址、变量、寄存器、标号、变量或表达式 (2)对于伪指令语句或宏指令语句一般为所要的参数 98DEBUG.EXE 调试程序调试程序n一、程序的编制和运行n1、用编辑程序EDIT建立以.ASM为扩展名的源程序文件。n2、用汇编程序MASM对源文件进行汇编,生成以. OBJ为扩展名的目标文件n3、用LINK(连接程序)对目标文件进行连接,形成以.EXE为扩展名的可执行文件。99n二、DEBUG.EXE 调试程序的使用n1、进入DEB

36、UG 在根目录下键入DEBUG例如:CDEBUG或者CDEBUGDEBUG 调入后出现提示符100n2、DEBUG 的常用命令(1)显示内存单元内容命令D格式:- D 地址 或 -D 范围(2)修改内存单元内容命令E格式1:- E 地址 内容表例如:- E DS:120 00 11ABC22格式2:- E 地址 逐个单元相继修改例如:- E 100101102103n2、DEBUG 的常用命令(1)显示内存单元内容命令D格式:- D 地址 或 -D 范围(2)修改内存单元内容命令E格式1:- E 地址 内容表例如:- E DS:120 00 11ABC22格式2:- E 地址 逐个单元相继修改

37、例如:- E 100104105n2、DEBUG 的常用命令(1)显示内存单元内容命令D格式:- D 地址 或 -D 范围(2)修改内存单元内容命令E格式1:- E 地址 内容表例如:- E DS:120 00 11ABC22格式2:- E 地址 逐个单元相继修改例如:- E 100106107(3)检查和修改寄存器命令R格式1:-R显示CPU内所有寄存器内容和标志位格式2:-R 寄存器名显示和修改某个寄存器内容格式3:-RF显示和修改标志位状态1081098个标志位的置位复位名称个标志位的置位复位名称标志位标志位置位置位复位复位溢出溢出 OF OV NV方向方向 DF DN UP符号符号 S

38、F NG PL零零 ZF ZR NZ辅助进位辅助进位 AF AC NA奇偶奇偶 PF PE PO进位进位 CF CY NC中断中断 IF EI DI110(3)检查和修改寄存器命令R格式1:-R显示CPU内所有寄存器内容和标志位格式2:-R 寄存器名显示和修改某个寄存器内容格式3:-RF显示和修改标志位状态111112113(3)检查和修改寄存器命令R格式1:-R显示CPU内所有寄存器内容和标志位格式2:-R 寄存器名显示和修改某个寄存器内容格式3:-RF显示和修改标志位状态114115116117(4)运行命令G格式:-G =地址1 地址2地址3(5)跟踪命令T格式1:-T =地址逐条指令跟

39、踪格式2:-T =地址 值(6)汇编命令A格式:-A 地址118119120(4)运行命令G格式:-G =地址1 地址2地址3(5)跟踪命令T格式1:-T =地址逐条指令跟踪格式2:-T =地址 值(6)汇编命令A格式:-A 地址121122123(4)运行命令G格式:-G =地址1 地址2地址3(5)跟踪命令T格式1:-T =地址逐条指令跟踪格式2:-T =地址 值(6)汇编命令A格式:-A 地址124125126(4)运行命令G格式:-G =地址1 地址2地址3(5)跟踪命令T格式1:-T =地址逐条指令跟踪格式2:-T =地址 值(6)汇编命令A格式:-A 地址127128129130注

40、:若输入的语句有语法错误,则DEBUG显示 ERROR 且重新显示现行的汇编地址等待新的输入 (7)反汇编命令U格式:-U 范围131132133134135136(8)退出命令Q格式:-Q退出DEBUG 返回DOS137138139140141三、指示性语句三、指示性语句 伪指令语句不形成指令的机器码,仅告诉汇编程序为指令中的操作数如何存放,指令如何产生机器码 伪指令语句前如有标号,其后无冒号“:”如有操作数,可以有两个以上的操作数。伪指令在程序中起着定义、赋置说明、分段等作用。 142n1、数据定义伪指令格式:格式:变两名变两名 助记符助记符 操作数操作数 ;注释;注释DB:定义字节,其后

41、的每个操作数占用一个字节定义字节,其后的每个操作数占用一个字节DW:定义字,其后的每个操作数占用一个字定义字,其后的每个操作数占用一个字DD:定义双字,其后的每个操作数占用两个字定义双字,其后的每个操作数占用两个字DQ:定义定义4个字,其后的每个操作数占用个字,其后的每个操作数占用4个字个字Dt:定义定义10个字节,其后的每个操作数占个字节,其后的每个操作数占用用10个字节个字节 143归纳为以下几种情况归纳为以下几种情况(1)操作数可以是常量或常量表达式例如: X DB 25,42,14H,0,-30Y DW 123H,610,3A60HZ DD 3705H,15 X1 92 A1 40 0

42、E 2Y2 30 13 C0 06 03 A0 5Z3 70 00 0144(2)伪指令后可用操作数“?”分配并保留空间,不存数据例如: A DB 5,? DB ?,?,10B DW ?,15,?A05-0AB-0F00-145(3)可以用操作符DUP来复制一些操作数格式:格式:EXPCOUNT DUP(操作数操作数.操作数操作数)例如: Y1 DB 2 DUP (11,?,15)Y2 DW 3 DUP (2500H,?)146Y1 DB 2 DUP (11,?,15)Y2 DW 3 DUP (2500H,?)Y10B-0F0B-0FY20025-0025-147例如: PARA DB 2DU

43、P(3,2DUP(5,7),0),?0305PARA07050700030507050700-复制操作数DUP可以嵌套 148(4)可以定义一个表或一个字符串例如: 110的平方值表可以定义如下 :PFB DB 1,4,9,16,25,36,49,64,81定义字符串 STRINGS DB “GOOD MORNING”149n2、符号定义语句格式:格式:符号名符号名 EQU 表达式表达式伪指令可以把符号名定义为常量,或一个能求出常数值得表达式 例如: RT1 EQU 123FS EQU 32B5 EQU RT1+1150n3、段定义伪指令n(1)段定义伪指令SEGMENT/ENDS格式:格式:

44、段名段名 segment 定位类型定位类型 组合类型组合类型 类别类别段名段名 ends 功能:功能:定义一个逻辑段,由若干逻辑定义一个逻辑段,由若干逻辑段组成源程序段组成源程序 151定位类型 说明段的开始地点的特点说明段的开始地点的特点PARA WORD BYTE PAGE 组合类型 告诉连接程序本段与其他段的关系告诉连接程序本段与其他段的关系PUBLIC STACK COMMON 152n(2)段寄存器说明伪指令格式:格式:ASSUME 段寄存器名:段名段寄存器名:段名段寄存器名:段名段寄存器名:段名功能:功能:说明段寄存器与段的关系说明段寄存器与段的关系在一般程序中,本伪指令通常位于代

45、码段的前面,指明程序中各段所用到的段寄存器的情况 153Code segment Assumecs:code, ds:date, ss:stack, es:date1, Mov ax, dateMov ds, axMov ax, date1Mov es, axCode ends 154返回 dos通常在代码段结束之前插入两条语句MOV AH,4CHINT 21H 155四、程序设计举例n1、直线运行程序n例如:求两个数的平均值。两个数分别放在X和Y单元中,结果放在Z单元中。设两个数n分别为32和64n编程如下:156DATE segment X DB 20H Y DB 40H X20Y40Z

46、DB ? DATE ENDS CODE segment ASSUME CS:CODE, DS:DATE START:MOV AX,DATE MOV DS,AX MOV AL,X 157MOV AL,X ADD AL,Y MOV AH,00H ADC AH,00H MOV BL,02H DIV BL MOV Z,AL CODE ENDS END START 1582、分支程序设计、分支程序设计分支程序:根据某种判断结果,从两个以上的程序中选择一个执行。条件分支段1分支段2或条件分支段2159n例3、比较两个无符号数的大小,把大数存入MAX单元。DATE segment SHUJU DB X1,X

47、2 MAX DB ? DATE ENDS CODE SEGMENT ASSUME CS:CODE , DS:DATA 160MOV AX,DATA MOV DS,AX MOV AL,SHUJU CMP AL,SHUJU+1 JA BRANCH BRANCH:MOV MAX, ALMOV AL, SHUJU+1 CODE ENDS END MOV AH, 4CH INT 21H 1613、循环程序设计、循环程序设计循环程序一般由四部分组成循环初值循环次数,循环正常工作的初始状态循环体循环工作的主体部分,为完成特定功能而设计的程序段 修改部分保证每次循环时,相关信息发生有规律的变化,为下一次循环作

48、准备 循环控制部分控制循环的运行和结束 162n例4、从XX单元开始10个连续单元中存放有10个无符号数,从中找出最大者送YY单元。XXYY分析AL163Data segment Xx db 15,22,16,9,3,44,26,88,39,52 Yy db ? Data ends Code segment Assume cs: code,ds:data Assume cs: code,ds:data Mov ax,data Mov ds,ax Mov al,xx 164lea bx,xx inc bx Cmp al,bx Mov cx,9 Jae next Xchg al,bx Loop n

49、ext:loop1:loop1Mov yy,al Mov ah,4ch Int 21h Code ends End 165常用系统功能调用常用系统功能调用01H号读取键盘字符并回显(单字符)调用方式MOV AH,01HINT 21H 说明等待按键 若是CTRL-BREAK则退出 其他键,将其ASCLL码送AL寄存器,同时送显示器显示 16602H号显示字符 调用方式MOV AH,02HINT 21H DL 要显示字符的ASCLL码说明将置入DL寄存器的字符送显示器显示 16708H号键盘输入单字符不显示 调用方式MOV AH,08HINT 21H 说明将输入的字符送AL寄存器 16809H号字

50、符串输出显示 调用方式DX 要显示字符串的首地址MOV AH,09HINT 21H 说明要显示的字符串一般定义在数据段 该字符串必须以定界符“$”为结束标志 “$” 字符不显示 169STRING DB How are you,$ 例如:例如: MOV DX,OFFSET STRING MOV AH,09H INT 21H 1700AH号字符串输入 调用方式DX 接收字符串缓冲区的首地址MOV AH,0AHINT 21H 说明从键盘接收字符串到内存指定的缓冲区,直到回车为止 缓冲区的第一个字节为指定缓冲区的字符个数 缓冲区的第二个字节保留,填写实际输入字符的个数 171缓冲区的第三个字节开始存

51、入输入的字符 例如:例如: DATA SEGMENT BUF DB 80 DB ? DB 80DUP(?) DATA ENDS 1724CH号结束程序返回操作系统 调用方式MOV AH,4CHINT 21H 173从键盘输入从键盘输入0-7中的一个数,然后将数字转换成对应中的一个数,然后将数字转换成对应位为位为1的的8位二进制数存入位二进制数存入AL中,根据中,根据AL中哪一位为中哪一位为1转入相应的分支程序处,实现散转,设转入相应的分支程序处,实现散转,设8个分支程序个分支程序分别显示分别显示A-H中的一个中的一个 。 分析:分析: 输入输入0 AL0000 0001 显示显示A 输入输入1

52、AL0000 0010 显示显示B 输入输入2AL0000 0100 显示显示C 输入输入3AL0000 1000 显示显示D 输入输入7AL1000 0000 显示显示H174实际:实际: 输入输入0AL0011 00000000 0001 输入输入10011 00010000 0010AL 输入输入30011 00110000 1000AL 输入输入70011 01111000 0000AL设置初值寄存器设置初值寄存器DL0000 0001移动次数由移动次数由AL低低4位得到位得到送送CL寄存器寄存器移动移动 DL后送显示后送显示175code segmentassume cs:codes

53、tart:mov dl,01hmov ah,1int 21hcmp al,qjz exitand al,0fhmov cl,alshl dl,clmov al,dlcmp al,01hjz xacmp al,02h jz xbcmp al,04hjz xccmp al,08hjz xdcmp al,10hjz xecmp al,20hjz xfcmp al,40hjz xgcmp al,80hjz xhxa:mov dl,ajmp shuchuxb:mov dl,bjmp shuchu176xc:mov dl,cjmp shuchuxd:mov dl,djmp shuchuxe:mov dl,

54、ejmp shuchuxf:mov dl,fjmp shuchuxg:mov dl,gjmp shuchuxh:mov dl,h shuchu:mov ah,2int 21hjmp startexit:mov ah,4chint 21hcode endsend start177 把把BX寄存器内的二进制数用十六寄存器内的二进制数用十六进制数的形式在屏幕上显示出来进制数的形式在屏幕上显示出来分析:分析:BX16位位 BHBL 1001 1100 00110101 9C359C35 0-30H十六进制数:十六进制数: 0 1 2 3 4 5 6 7 8 9 A B C D E F 1-31H 2-

55、32H 3-33H 9-39H A-41H B-42H C-43H D-44H E-45H F-46H178BXBHBL1001 1100 00110101 9C35 0011 1001 循环左移循环左移4位位 1100 00110101 1001 C359BLAL0101 1001 屏蔽屏蔽AL高高4位位0000 1001 AL与与30H相或相或0011 1001 39H179Code sgement Assume cs:code Start: mov ch,4 Loop1:mov cl,4 Rol bx,cl Mov al,bl And al,0fh Add al,30h Cmp al,3

56、ah Jl shuchu Add al,07hShuchu:mov dl,al Mov ah,2Int 21h Dec ch Jnz loop1 Mov ah,4ch Int 21h Code ends End start 180用冒泡法排序用冒泡法排序有一个首地址为有一个首地址为A的的N字数组,编程实现字数组,编程实现数组中的数从大到小排序数组中的数从大到小排序分析:分析:序号123456数85168432181 AL8855165 165584321821684321885384321816854843218168558432181685181 Data seggmentA dw 8,5,

57、16,84,32,18, n dw $-1Data ends Code segment Assume cs:code,ds:data start: mov ds,axMov cx,n dec cxMov di,cx Mov bx,0 Mov ax,abx Cmp ax,abx+2 jge cotinue mov ax, data xchg ax,abx+2Mov abx,ax add bx,2Loop loop1 mov cx,diLoop loop2 code ends end srart loop1:cotinue: loop2: mov ah ,4chInt 21h182一、过程定义伪操

58、作一、过程定义伪操作格式:格式:过程名过程名PROC类型属性类型属性Near 或或 farret过程名过程名endp183例例Main proc far Call subr1retMain endpSubr1 proc nearretSubr1 endp184Main proc far Call subr1retMain endpSubr1 proc nearretSubr1 endp二、子程序的调用和返回二、子程序的调用和返回IP185Main proc far Call subr1retMain endpSubr1 proc nearretSubr1 endp三、保存与恢复寄存器三、保存与恢复寄存器IP186三、保存与恢复寄存器相关程序三、保存与恢复寄存器相关程序 Subt proc nearPush ax push bxPush cx push dxPop dx pop cx pop bx pop ax187188

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号