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

下载本文档

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

文档简介

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

2、方方式式2021/3/96n (二)、(二)、8086的寻址方式的寻址方式操操作作数数有有三三种种可可能能存存放放方方式式操作数在指令中操作数在CPU内部某一寄存器中操作数在内存的存储单元中2021/3/97n1、立即数寻址、立即数寻址n操作数就在指令中提供,叫立即数寻址方式寻址方式。n例:MOV AL,15H立即寻址立即寻址该指令是把立即数该指令是把立即数15H送寄存器送寄存器AL,指令执行后指令执行后(AL)=15H 例如:例如: MOV AX,7632H 例如:例如: MOV word ptr BX,20H2021/3/98n2、寄存器寻址寄存器寻址 n操作数在操作数在CPU内部的寄存器

3、中,指令中指定寄内部的寄存器中,指令中指定寄存器号存器号n例:例:MOV DI,AXAXDI执行前(AX)=1234H,(DI)=0018H1234H0018H1234H执行后(AX)=1234H,(DI)=1234H寄存器寻址寄存器寻址2021/3/99INCCX;将CX的内容加1ROLAH,1;将AH中的内容循环左移一位CXAH2021/3/910n3、存储器寻址:操作数或地址在存储器中存储器寻址直接寻址间接寻址相对寻址基址变址寻址相对基址变址寻址2021/3/911n(1)直接寻址n操作数的16位有效地址在指令中n物理地址=(DS)16+EAn例:MOV AX,205AHM.代码段数据段

4、设(DS)=3000HOP5A203 0 0 0205A物理地址=3205A1234指令执行后(AX)=3412H数据段首地址=300002021/3/912n注:在汇编语言中有时用符号地址作为有效地址。n例如:MOV AX,ARRYn也可写成 MOV AX,ARRYn在8086中允许段超越,即允许数据放在数据段以外的其他段中,指令中需加段跨越前缀。n例如:MOV AX,ES:2000H符号地址注注:对于双操作数指令,必须有一个操作数在寄存器中2021/3/913n(2)间接寻址:操作数的有效地址在寄存器BX,BP或变址寄存器SI,DI中操作数物理地址=(DS)16+(BX)(DS)16+(S

5、I)(DS)16+(DI)(SS)16+(BP)2021/3/914 例如:例如: MOV AX,BX 例如:例如: MOV AL,BX 例如:例如: MOV AX,SI 例如:例如: MOV AL,DI 例如:例如: MOV SI,BX 例如:例如: MOV BP,AX寄存器间接寻址寄存器间接寻址寄存器寻址寄存器寻址2021/3/915n(3)相对寻址:操作数的有效地址由基址寄存器BX,BP或变址寄存器SI,DI之一中的内容加上指令中指定的8位或16位位移量组成。操作数物理地址=(DS)16+(BX)+ 8位或16位位移量(DS)16+(SI) + 8位或16位位移量(DS)16+(DI)

6、+ 8位或16位位移量(SS)16+(BP) + 8位或16位位移量2021/3/916n例:MOV AX,COUNTSIM.代码段数据段设(DS)=3000H,(SI)=0110HOP10003 0 0 00110+0010=0120物理地址=30120H1234指令执行后(AX)=3412H数据段首地址=300002021/3/917 例如:例如: MOV AX,20HBX相对寻址相对寻址 例如:例如: MOV AX,BUFSI2021/3/918n(4)基址变址寻址:操作数的有效地址是指令中指定的基址寄存器(BX或BP)和变址寄存器(SI或DI)之和。操作数物理地址=(DS)16+(BX

7、)+ (SI)(DS)16+(BX)+ (DI)(SS)16+(BP)+ (SI)(SS)16+(BP)+ (DI)2021/3/919 例如:例如: MOV AX,BXSI基址变址寻址基址变址寻址 例如:例如: MOV AL,BXDI 例如:例如: MOV AX,BPSI2021/3/920n(5)相对基址变址寻址:操作数的有效地址是指令中指定的基址寄存器(BX或BP)和变址寄存器(SI或DI)与一个8位或16位位移量之和。操作数物理地址=(DS)16+(BX)+ (SI) +8位或16位位移量(DS)16+(BX)+ (DI)+ 8位或16位位移量(SS)16+(BP)+ (SI)+ 8位

8、或16位位移量(SS)16+(BP)+ (DI)+ 8位或16位位移量2021/3/921 例如:例如: MOV AX,10HBXSI相对基址变址寻址相对基址变址寻址 例如:例如: MOV AL,BUFBXDI2021/3/922n例如:MOV AX,MASKBXDIn设(DS)=2000H,(SS)=3000Hn(BX)=1100H,(DI)=0010H,(SI)=0030HnMASK=0203H,(21313H)=1234Hn(31313H)=2356H,(21333H)=0056Hn则:操作数的物理地址=2 1 3 1 3H执行后(AX)=1234H2021/3/923n指出下列指令中源

9、操作数和目的操作数的寻址方式n1.MOV AX,100n2.MOV SI,AXn3.MOV CX,DATXSIn4.ADD AX,BXDIn5.AND AX,BXn6.MOV AX,TAXBXSIn7.SUB AX,2500H2021/3/924二、二、 8086的指令系统的指令系统n(一)、指令书写格式:标号:助记符 目的操作数,源操作数;注释n(二)、8086的指令系统数据传送指令数据传送指令算术运算指令算术运算指令 逻辑操作指令逻辑操作指令串操作指令串操作指令控制转移指令控制转移指令处理机控制指令处理机控制指令2021/3/925n1、数据传送:负责把数据、地址或立即数送到寄存器或存储单

10、元中。分类通用传送指令通用传送指令累加器专用传送指令累加器专用传送指令地址传送指令地址传送指令标志传送指令标志传送指令2021/3/926n(1)通用传送指令最基本的传送指令(最基本的传送指令(MOV) 格式:格式:MOV OPRD1,OPRD2;B/WOPRD1:累加器、寄存器、存储器累加器、寄存器、存储器OPRD2:累加器、寄存器、存储器操作数和累加器、寄存器、存储器操作数和立即数立即数目的操作数目的操作数源操作数源操作数2021/3/927传送路径段寄存器DS、SS、ES存储器立即数通用寄存器AX、BXCX、DXBP、SPSI、DI2021/3/928MOV 指令的几种形式nMOV BX

11、,AXnMOV ALPHA,AXnMOV ALPHA,AHnMOV AH,ES:BXSInMOV AL,BPnMOV AX,ARRAY2021/3/929MOV ES,DXMOV DS,AXMOV ES,SS:BXMOV BX,DXMOV BL,AX(错误指令)MOV MEM,DXMOV CH,8AHMOV DL,B MOV BX,12H 2021/3/930堆栈操作指令堆栈是在存储器中开辟的一个栈区 。工作方式:“后进先出”的方式进行8086的堆栈是从高地址向低地址方向生长的 堆栈操作:入栈指令入栈指令PUSH出栈指令出栈指令POP2021/3/931n在CALL指令、 RET指令、中断响应

12、和返回中都有入栈和出栈的操作。PUSH入栈指令格式:PUSH SRC;W字操作执行的操作(SP-1)(SP-2) (SRC)SP (SP-2);先修改后操作SRC是入栈的字操作数寄存器、段寄存器(不包含CS)、和存储器2021/3/932n例如:PUSH AX n设执行前(SP)=2500H,SS=5000H,(AX)=3125HSS=5000H堆栈段SP=2500H3 1 2 5AX3 1SP=24FEH2 5栈顶单元物理地址=525002021/3/933n例如:PUSH BETABXSIn设DS=2000H,BX=2100H,SI=2520H,nBETA=03404H,SS=5000H,

13、SP=2500H操作数的物理地址PA=20000+2100+2520+0340=24960(524FE)(24960)(24961)(524FF)2021/3/934POP出栈指令格式:POP DST;W字操作执行的操作(DST) (SP+1,SP)SP (SP+2);先操作后修改DST是出栈的字操作数的目的地址(寄存器、段寄存器、和存储器)2021/3/935 例如:例如: PUSH AX PUSH BX POP AX执行前:执行前: AX=1234H BX=2345H SP=1000H1000SP2021/3/936 例如:例如: PUSH AX PUSH BX POP AX执行前:执行前

14、: AX=1234H BX=2345H SP=1000H10000FFESP34H12H执行后执行后1: AX=1234H BX=2345H SP=0FFEH2021/3/937 例如:例如: PUSH AX PUSH BX POP AX执行前:执行前: AX=1234H BX=2345H SP=1000H10000FFE34H12H执行后执行后2: AX=1234H BX=2345H SP=0FFCH0FFCSP45H23H2021/3/938 例如:例如: PUSH AX PUSH BX POP AX执行前:执行前: AX=1234H BX=2345H SP=1000H10000FFE34

15、H12H执行后执行后3: AX=2345H BX=2345H SP=0FFCH0FFC45H23HSP0FFE2021/3/939 例如:例如: PUSH AX PUSH BX POP AX执行前:执行前: AX=1234H BX=2345H SP=1000H10000FFE34H12H执行后执行后3: AX=2345H BX=2345H SP=0FFEH0FFC45H23HSP0FFE2021/3/940交换指令:XCHG格式:XCHG OPRD1,OPRD2;B/w执行的操作:(OPRD1) (OPRD2)2021/3/941n例如:XCHG AX,BXn执行前:AX=420AH , BX

16、=7955Hn执行后:AX=7955H ,BX=420AHn例如:XCHG DX,BPSI2021/3/942n(2) 累加器专用传送指令 IN 输入指令 固定端口输入数据格式:IN AL/AX,Port;Port为端口号功能:从固定端口Port传送一个字节或 一个字数据到AL或AX寄存器8086规定,从固定端口输入数据,端口号的范围为: 00HFFH2021/3/943可变端口输入数据格式:IN AL/AX,DX;功能:从DX寄存器所存放的端口地址中送 一个字节或 一个字数据到AL或AX寄存器8086规定:外设最多可以有65536个I/O端口,端口号范围为0000HFFFFH。其中低256个

17、端口为固定端口,指令中可以直接指定。当端口号256时必须先把端口号放在DX中然后才使用IN指令,他们称为可变端口2021/3/944nOUT 指令 输出指令n格式:OUT Port,AL/AXn OUT DX,AL/AXn例如:IN AX,21Hn IN AL,DXn OUT 25H,AXn OUT DX,AX2021/3/945n(3)地址-目的传送指令:n把地址送到指定的寄存器中 LEA指令:有效地址送寄存器指令格式LEA REG,SRC功能把REG EASRC注:SRC只能是各种寻址方式 的存储器操作数 REG 只能是16位的通用寄存器 2021/3/946n例如:LEA CX,BXDI

18、n执行前 (BX)=1000H ,(DI)=0250H操作数的有效地址EA=1000H+0250=1250H执行后(CX)=1250HCX 的内容是存储单元的有效地址而非存储单元的内容例:LEA DX,BATEBX执行前(BX)=1248H ,BETA=0020H该指令执行后(DX)=1268H2021/3/947n2、算术运算指令:用来执行算术运算2021/3/948n(1)加法指令:ADD ADC INC ADD:加法指令格式:ADD OPRD1,OPRD2操作: OPRD1 OPRD1+OPRD2结果影响标志位 AF,CF,OF,PF,SF,ZF 例如:例如: ADD AX,SI 例如:

19、例如: ADD AL,BH2021/3/949n(1)加法指令:ADD ADC INC ADC:带进位的加法指令格式:ADC OPRD1,OPRD2操作: OPRD1 OPRD1+OPRD2+CF结果影响标志位 AF,CF,OF,PF,SF,ZF2021/3/950n例如:在存储区中有两个双字数据,分别存放在FIRST和SECOND单元中(四个字节)将两个数相加后结果放在THIRD单元中7 8 5 62 3 9 11 0 3 31 A B 6FIRST3 31 05 67 8SECONDB 61 A9 12 3THIRD2021/3/951相关程序如下:MOV AX,FIRST3 31 05

20、67 8B 61 A9 12 3 E 9 2 AFIRSTSECONDADD AX,SECONDTHIRDMOV THIRD,AXMOV AX,FIRST+2ADC AX,SECOND+2MOV THIRD+2,AX2021/3/952n(1)加法指令:ADD ADC INC INC:加1指令格式:INC OPRD操作: OPRD OPRD+1结果影响标志位 AF,OF,PF,SF,ZF例:INC AL例:INC CX例:INC word PTR BXDI2021/3/953n(2)减法指令:SUB SBB DEC CMPSUB:减法指令格式:SUB OPRD1,OPRD2操作: OPRD1

21、OPRD1-OPRD2结果影响标志位 AF,CF,OF,PF,SF,ZF2021/3/954n(2)减法指令:SUB SBB DEC CMPSBB:带借位减法指令格式:SBB OPRD1,OPRD2操作: OPRD1 OPRD1-OPRD2-CF结果影响标志位 AF,CF,OF,PF,SF,ZF2021/3/955n(2)减法指令:SUB SBB DEC CMPDEC:减1指令格式:SUB OPRD操作: OPRD OPRD-1结果影响标志位 AF,OF,PF,SF,ZF2021/3/956n(2)减法指令:SUB SBB DEC CMPCMP:比较指令格式:CMP OPRD1,OPRD2操作

22、: OPRD1-OPRD2结果影响标志位 AF,CF,OF,PF,SF,ZF2021/3/957例如:CMP AX,BX例如:CMP AL,20H例如:CMP AL,SI2021/3/958n(3)乘法指令:MUL IMULMUL:无符号书乘法指令格式:MUL SRC;B/W操作:AX AL*(SRC)DX AX AX*(SRC)指令中隐含目的操作数为累加器(AL/AX)源操作数为寄存器操作数寄存器操作数或存储器操作数存储器操作数2021/3/959n(3)乘法指令:MUL IMULIMUL:有符号数乘法指令格式:IMUL SRC;B/W操作:AX AL*(SRC)DX AX AX*(SRC)

23、两条指令的执行结果是不同的乘法指令对乘法指令对CF和和OF有影响对其他位无定义有影响对其他位无定义2021/3/960n(4) 除法指令:DIV IDIVDIV:无符号数除法指令格式:DIV SRC操作:字节操作字节操作,16位被除数在AX中8位除数为源操作数,结果的8位商在AL中,8位余数在AH中操作:字操作字操作, 位被除数在 和 中, 位除数为源操作数, 结果的16位商在AX中,16位余数在DX中DX 32AX 16 2021/3/961n(4) 除法指令:DIV IDIVIDIV:有符号数除法指令格式与操作同DIV 指令注1:除法运算后,标志位不确定 注2:若除数位0,则产生0号中断

24、注3:除法中,若被除数为8位(字节除法或16位(字除法)时必须将被除数进行符号扩展,AL扩展到AH中,AX扩展到DX中2021/3/962CBW:字节转换为字指令格式: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 83H2021/3/963CWD:字转换为双字指令格式:CWD操作:AX中的符号位扩展到DX中CBW和CWD指令不影响标志位例如:计算 V-(X*Y+Z)/X其中X,Y,Z,V均为16位有符号数分别已装入X,Y,Z,V字单

25、元,要求将上式结果的商存入AX中,余数存入DX中,请编写相应程序2021/3/964V-(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 X2021/3/9653、逻辑运算指令和移位指令、逻辑运算指令和移位指令(1)逻辑运算指令AND OR XOR TEST NOT AND:逻辑与指令格式:AND OPRD1,OPRD2;B/W 功能: OPRD1 OPRD1 OPRD2AND指令执行后,CF=0,OF=0. 对A

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

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

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

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

30、移指令格式:SHR OPRD,CNT;B/W 功能:D0D70CF2021/3/976(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR SAL:算术左移指令格式:SAL OPRD,CNT;B/W 功能:D0D70CF2021/3/977(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR SAR:算术右移指令格式:SHR OPRD,CNT;B/W 功能:D0D7CF2021/3/978(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR ROL:循环左移指令格式:ROL OPRD,CNT;B/W 功能:D0

31、D7CF2021/3/979(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR ROR:循环右移指令格式:ROR OPRD,CNT;B/W 功能:D0D7CF2021/3/980(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR RCL:带进位循环左移指令格式:RCL OPRD,CNT;B/W 功能:D0D7CF2021/3/981(2)逻辑移位指令SHL SHR SAL SAR ROL ROR RCL RCR RCR:带进位循环右移指令格式:RCR OPRD,CNT;B/W 功能:D0D7CF2021/3/982MOV CL,3SA

32、R 20HBX,CL执行前(DS)=2000H (BX)=1200H (21220)=38H =0011 1000B 执行后(21220)= 0000 0111B=07H2021/3/983n例2: SAL AH,1执行前(AH)=A5H 1 0 1 0 0 1 0 1CF执行后(AH)= 4AHCF= 10F= 1 ZF= 0SF= 0PF= 02021/3/984 4、串操作指令、串操作指令2021/3/985n 5、控制转移指令、控制转移指令(1)无条件转移指令JPM段内转移段间转移IPCS IP2021/3/986Data segmentAddr dw numberNumber dw

33、yCount dw ?Data endsCode segmentAssume cs:code,ds:dataStart:mov ax,data Mov ds,ax Mov cx,0 Mov bx,addr Mov ax,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 2021/3/987(2)条件转移指令条件判断Y转向目标指令N顺序执行指令2021/3/988根据单个标志位的条件进行转

34、移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,DXJZ NEXT 2021/3/989比较两个无符号数根据比较结果转移JB(JNAE,JC) OPRJNB(JAE,JNC) OPRA和BJBE(JNA,) OPRJNBE(JA,) OPR2021/3/990n例如:当一个无符号数x小于、等于、或大于100时的三种情况下,应去执行三个不同的程序段MOV AL,XCMP AL,100JA PROG

35、3PROG1: X100程序段 JZ PROG22021/3/991比较两个有符号数根据比较结果转移JL(JNGE) OPRJNL(JGE) OPRJLE(JNG) OPRJNLE(JG) OPR测试CX的值为0则转移指令 JCXZ格式: JCXZ OPR2021/3/992(3)循环指令LOOP 循环指令格式: LOOP OPR测试条件:CX0LOOPZ/LOOPE 为零或相等时循环指令格式: LOOPZ/LOOPE OPR测试条件:ZF=1且CX0LOOPNZ/LOOPNE 不为零或不相等时循环指令格式:LOOPNZ/LOOPNE OPR测试条件:ZF=0且CX02021/3/993n例如

36、:有一个首地址为ARRAY的M个字数组n试编写一个程序,求出该数组的内容之和(不考虑溢出)并把结果存入TOTAL中存储器数据段ARRAYM个TOTALMOV CX,MMOV AX,0MOV SI,0START LOOP:ADD AX,ARRAYSIADD SI,2LOOP START LOOPMOV TOTAL,AX2021/3/9945、处理器控制指令、处理器控制指令CLCCMCSTCCLDSTDCLISTIHLT2021/3/9953.3汇编语言程序设计汇编语言程序设计n一、8086汇编语言源程序的格式n1、一般格式nName1 segmentn 语句nName1 endsnName2 s

37、egmentn 语句nName2 ends2021/3/996nName3 segment n 语句nName3 endsn end 标号n2、指令的种类n 指令语句指示性语句MOV ,ADD ,LMPMY PLACE DB ?2021/3/997n二、语句的格式名字项操作项操作数项 ;注释项1、名字项标号变量某条指令所在存储单元的符号地址某操作数所在存储单元的符号地址(1)标号在代码段定义,后面跟“:”(2)变量在代码段以外的段定义,后不跟“:”2、操作项指令、伪指令、或宏指令助记符3、操作数项由一个或多个项组成,多个操作数之间用“,”分开2021/3/998(1)对于指令语句一般为操作数地

38、址、变量、寄存器、标号、变量或表达式 (2)对于伪指令语句或宏指令语句一般为所要的参数 2021/3/999DEBUG.EXE 调试程序调试程序n一、程序的编制和运行n1、用编辑程序EDIT建立以.ASM为扩展名的源程序文件。n2、用汇编程序MASM对源文件进行汇编,生成以. OBJ为扩展名的目标文件n3、用LINK(连接程序)对目标文件进行连接,形成以.EXE为扩展名的可执行文件。2021/3/9100n二、DEBUG.EXE 调试程序的使用n1、进入DEBUG 在根目录下键入DEBUG例如:CDEBUG或者C DEBUGFilename.EXEDEBUG 调入后出现提示符2021/3/91

39、01n2、DEBUG 的常用命令(1)显示内存单元内容命令D格式:- D 地址 或 -D 范围(2)修改内存单元内容命令E格式1:- E 地址 内容表例如:- E DS:120 00 11ABC22格式2:- E 地址 逐个单元相继修改例如:- E 1002021/3/91022021/3/91032021/3/9104n2、DEBUG 的常用命令(1)显示内存单元内容命令D格式:- D 地址 或 -D 范围(2)修改内存单元内容命令E格式1:- E 地址 内容表例如:- E DS:120 00 11ABC22格式2:- E 地址 逐个单元相继修改例如:- E 1002021/3/910520

40、21/3/9106n2、DEBUG 的常用命令(1)显示内存单元内容命令D格式:- D 地址 或 -D 范围(2)修改内存单元内容命令E格式1:- E 地址 内容表例如:- E DS:120 00 11ABC22格式2:- E 地址 逐个单元相继修改例如:- E 1002021/3/91072021/3/9108(3)检查和修改寄存器命令R格式1:-R显示CPU内所有寄存器内容和标志位格式2:-R 寄存器名显示和修改某个寄存器内容格式3:-RF显示和修改标志位状态2021/3/91092021/3/91108个标志位的置位复位名称个标志位的置位复位名称标志位标志位置位置位复位复位溢出溢出 OF

41、 OV NV方向方向 DF DN UP符号符号 SF NG PL零零 ZF ZR NZ辅助进位辅助进位 AF AC NA奇偶奇偶 PF PE PO进位进位 CF CY NC中断中断 IF EI DI2021/3/9111(3)检查和修改寄存器命令R格式1:-R显示CPU内所有寄存器内容和标志位格式2:-R 寄存器名显示和修改某个寄存器内容格式3:-RF显示和修改标志位状态2021/3/91122021/3/91132021/3/9114(3)检查和修改寄存器命令R格式1:-R显示CPU内所有寄存器内容和标志位格式2:-R 寄存器名显示和修改某个寄存器内容格式3:-RF显示和修改标志位状态202

42、1/3/91152021/3/91162021/3/91172021/3/9118(4)运行命令G格式:-G =地址1 地址2地址3(5)跟踪命令T格式1:-T =地址逐条指令跟踪格式2: -T =地址 值(6)汇编命令A格式:-A 地址2021/3/91192021/3/91202021/3/9121(4)运行命令G格式:-G =地址1 地址2地址3(5)跟踪命令T格式1:-T =地址逐条指令跟踪格式2: -T =地址 值(6)汇编命令A格式:-A 地址2021/3/91222021/3/91232021/3/9124(4)运行命令G格式:-G =地址1 地址2地址3(5)跟踪命令T格式1:

43、-T =地址逐条指令跟踪格式2: -T =地址 值(6)汇编命令A格式:-A 地址2021/3/91252021/3/91262021/3/9127(4)运行命令G格式:-G =地址1 地址2地址3(5)跟踪命令T格式1:-T =地址逐条指令跟踪格式2: -T =地址 值(6)汇编命令A格式:-A 地址2021/3/91282021/3/91292021/3/91302021/3/9131注:若输入的语句有语法错误,则DEBUG显示 ERROR 且重新显示现行的汇编地址等待新的输入 (7)反汇编命令 U格式:-U 范围2021/3/91322021/3/91332021/3/91342021/

44、3/91352021/3/91362021/3/9137(8)退出命令Q格式:-Q退出DEBUG 返回DOS2021/3/91382021/3/91392021/3/91402021/3/91412021/3/9142三、指示性语句三、指示性语句 伪指令语句不形成指令的机器码,仅告诉汇编程序为指令中的操作数如何存放,指令如何产生机器码 伪指令语句前如有标号,其后无冒号“:”如有操作数,可以有两个以上的操作数。伪指令在程序中起着定义、赋置说明、分段等作用。 2021/3/9143n1、数据定义伪指令格式:格式:变两名变两名 助记符助记符 操作数操作数 ;注释;注释DB:定义字节,其后的每个操作数

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

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

47、025-0025-2021/3/9148例如: PARA DB 2DUP(3,2DUP(5,7),0),?0305PARA07050700030507050700-复制操作数DUP可以嵌套 2021/3/9149(4)可以定义一个表或一个字符串例如: 110的平方值表可以定义如下 :PFB DB 1,4,9,16,25,36,49,64,81定义字符串 STRINGS DB “GOOD MORNING”2021/3/9150n2、符号定义语句格式:格式:符号名符号名 EQU 表达式表达式伪指令可以把符号名定义为常量,或一个能求出常数值得表达式 例如: RT1 EQU 123FS EQU 32B

48、5 EQU RT1+12021/3/9151n3、段定义伪指令n(1)段定义伪指令SEGMENT/ENDS格式:格式:段名段名 segment 定位类型定位类型 组合类型组合类型 类别类别段名段名 ends 功能:功能:定义一个逻辑段,由若干逻辑定义一个逻辑段,由若干逻辑段组成源程序段组成源程序 2021/3/9152定位类型 说明段的开始地点的特点说明段的开始地点的特点PARA WORD BYTE PAGE 组合类型 告诉连接程序本段与其他段的关系告诉连接程序本段与其他段的关系PUBLIC STACK COMMON 2021/3/9153n(2)段寄存器说明伪指令格式:格式:ASSUME 段

49、寄存器名:段名段寄存器名:段名段寄存器名:段名段寄存器名:段名功能:功能:说明段寄存器与段的关系说明段寄存器与段的关系在一般程序中,本伪指令通常位于代码段的前面,指明程序中各段所用到的段寄存器的情况 2021/3/9154Code segment Assumecs:code, ds:date, ss:stack, es:date1, Mov ax, dateMov ds, axMov ax, date1Mov es, axCode ends 2021/3/9155返回 dos通常在代码段结束之前插入两条语句MOV AH,4CHINT 21H 2021/3/9156四、程序设计举例n1、直线运行

50、程序n例如:求两个数的平均值。两个数分别放在X和Y单元中,结果放在Z单元中。设两个数n分别为32和64n编程如下:2021/3/9157DATE segment X DB 20H Y DB 40H X20Y40Z DB ? DATE ENDS CODE segment ASSUME CS:CODE, DS:DATE START:MOV AX,DATE MOV DS,AX MOV AL,X 2021/3/9158MOV AL,X ADD AL,Y MOV AH,00H ADC AH,00H MOV BL,02H DIV BL MOV Z,AL CODE ENDS END START 2021/3

51、/91592、分支程序设计、分支程序设计分支程序:根据某种判断结果,从两个以上的程序中选择一个执行。条件分支段1分支段2或条件分支段22021/3/9160n例3、比较两个无符号数的大小,把大数存入MAX单元。DATE segment SHUJU DB X1,X2 MAX DB ? DATE ENDS CODE SEGMENT ASSUME CS:CODE , DS:DATA 2021/3/9161MOV AX,DATA MOV DS,AX MOV AL,SHUJU CMP AL,SHUJU+1 JA BRANCH BRANCH:MOV MAX, ALMOV AL, SHUJU+1 CODE

52、ENDS END MOV AH, 4CH INT 21H 2021/3/91623、循环程序设计、循环程序设计循环程序一般由四部分组成循环初值循环次数,循环正常工作的初始状态循环体循环工作的主体部分,为完成特定功能而设计的程序段 修改部分保证每次循环时,相关信息发生有规律的变化,为下一次循环作准备 循环控制部分控制循环的运行和结束 2021/3/9163n例4、从XX单元开始10个连续单元中存放有10个无符号数,从中找出最大者送YY单元。XXYY分析AL2021/3/9164Data segment Xx db 15,22,16,9,3,44,26,88,39,52 Yy db ? Data

53、ends Code segment Assume cs: code,ds:data Assume cs: code,ds:data Mov ax,data Mov ds,ax Mov al,xx 2021/3/9165lea bx,xx inc bx Cmp al,bx Mov cx,9 Jae next Xchg al,bx Loop next:loop1:loop1Mov yy,al Mov ah,4ch Int 21h Code ends End 2021/3/9166常用系统功能调用常用系统功能调用01H号读取键盘字符并回显(单字符)调用方式MOV AH,01HINT 21H 说明等待

54、按键 若是CTRL-BREAK则退出 其他键,将其ASCLL码送AL寄存器,同时送显示器显示 2021/3/916702H号显示字符 调用方式MOV AH,02HINT 21H DL 要显示字符的ASCLL码说明将置入DL寄存器的字符送显示器显示 2021/3/916808H号键盘输入单字符不显示 调用方式MOV AH,08HINT 21H 说明将输入的字符送AL寄存器 2021/3/916909H号字符串输出显示 调用方式DX 要显示字符串的首地址MOV AH,09HINT 21H 说明要显示的字符串一般定义在数据段 该字符串必须以定界符“$”为结束标志 “$” 字符不显示 2021/3/9

55、170STRING DB How are you,$ 例如:例如: MOV DX,OFFSET STRING MOV AH,09H INT 21H 2021/3/91710AH号字符串输入 调用方式DX 接收字符串缓冲区的首地址MOV AH,0AHINT 21H 说明从键盘接收字符串到内存指定的缓冲区,直到回车为止 缓冲区的第一个字节为指定缓冲区的字符个数 缓冲区的第二个字节保留,填写实际输入字符的个数 2021/3/9172缓冲区的第三个字节开始存入输入的字符 例如:例如: DATA SEGMENT BUF DB 80 DB ? DB 80DUP(?) DATA ENDS 2021/3/91

56、734CH号结束程序返回操作系统 调用方式MOV AH,4CHINT 21H 2021/3/9174从键盘输入从键盘输入0-7中的一个数,然后将数字转换成对应中的一个数,然后将数字转换成对应位为位为1的的8位二进制数存入位二进制数存入AL中,根据中,根据AL中哪一位为中哪一位为1转入相应的分支程序处,实现散转,设转入相应的分支程序处,实现散转,设8个分支程序个分支程序分别显示分别显示A-H中的一个中的一个 。 分析:分析: 输入输入0 AL0000 0001 显示显示A 输入输入1AL0000 0010 显示显示B 输入输入2AL0000 0100 显示显示C 输入输入3AL0000 1000

57、 显示显示D 输入输入7AL1000 0000 显示显示H2021/3/9175实际:实际: 输入输入0AL0011 00000000 0001 输入输入10011 00010000 0010AL 输入输入30011 00110000 1000AL 输入输入70011 01111000 0000AL设置初值寄存器设置初值寄存器DL0000 0001移动次数由移动次数由AL低低4位得到位得到送送CL寄存器寄存器移动移动 DL后送显示后送显示2021/3/9176code segmentassume cs:codestart: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 x

温馨提示

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

评论

0/150

提交评论