请指出两个数据相加和相减后

上传人:sx****84 文档编号:243379247 上传时间:2024-09-22 格式:PPT 页数:122 大小:1.20MB
返回 下载 相关 举报
请指出两个数据相加和相减后_第1页
第1页 / 共122页
请指出两个数据相加和相减后_第2页
第2页 / 共122页
请指出两个数据相加和相减后_第3页
第3页 / 共122页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Page,*,*,作业,P56,习题12,13,14,补充,设AX=2345H,DX=5219H,请指出两个数据相加和相减后,FLAGS寄存器中状态标志位的状态。,1,第3章 8086的寻址方式和指令系统,1、一条指令包括指令操作码和地址码,2、指令格式分为:,零地址指令,一地址指令,二地址指令,三地址指令,计算机内指令格式,2,3 、指令的助记符格式,L:op D1,D2,D3,MOV AX,CX,目的操作数、源操作数,3,3.1 8086 CPU的寻址方式,寻址方式,操作数包含在指令中,立即寻址,操作数在内部寄存器中,寄存器寻址,操作数在内存的数据区,存储器寻址,操作数访问的是I/O端口,I/O端口寻址,4,操作数在内存区域中,内存地址包括段基址和段内偏移量,段内偏移量构成方式(有效地址),直接寻址,寄存器间接地址,寄存器相对寻址方式,基址加变址方式,相对的基址和变址方式,有效地址与物理地址,5,3.1.1立即寻址,例3.1 MOV AL,26H,例3.2 MOV CX,2A50H,6,3.1.2 寄存器寻址,AX、BX、CX、DX、SI、DI、SP、BP,AH、AL、BH、BL、CH、CL、DH、DL,例3.3 MOV DX,AX,例3.4 MOV CL,AH,7,存储器寻址,3.1.3 直接寻址方式,1、直接寻址方式,例如3.5 MOV AX,2000H,例如3.6 MOV AL,2000H,8,2、段超越前缀,ES或DS,例如3.7 MOV AX,ES:500H,3、符号地址,例如3.8 MOV BX,AREA1,例如3.9 AREA1 EQU 0867H,.,MOV AX,AREA1,例如3.10 AREA1 DW 0867H,.,MOV AX,AREA1,MOV AX,AREA1,9,3.1.4 寄存器间接寻址,基址寄存器BX、BP或变址寄存器DI、SI,例如3.11 MOV AX,SI,(DS)=1000H,(SI)=2000H,(12000H)=318BH,10,3.1.5 寄存器相对寻址基址寻址(BX、BP)变址寻址(SI、DI),例如3.12 MOV AX,COUNTSI,(DS)=3000H,(SI)=2000H,COUNT=4000H,(36000H)=5678H,11,3.1.6 基址加变址寻址方式,例如3.13 MOV AX,BXSI,(DS)=3000H,(BX)=1200H, (SI)=500H, (31700H)=ABCDH,12,3.1.7 相对的基址和变址寻址方式,例如3.14 MOV AX,MASKBXSI,(DS)=2000H,(BX)=1500H, (SI)=0300H, MASK=0200H,(31700H)=ABCDH,13,说明:,(1)立即数与直接寻址,MOV AX,2000H,MOV AX,2000H,(2)寄存器间接寻址时:,可以是BX,BP,SI,DI之一, BX与BP不能同时出现, SI与DI不能同时出现;,(3)以下写法等价:,6BXSI BX+6SI BX+SI+6,(4)BP在中,DISPBP+SI DISPBP+DI DISPBP,(5)关于DISP:8位或16位位移量,DISP,DISPBX+SI,DISPBX+DI,DISPSI,DISPDI,14,存储器存取约定段与可替换段地址,存储器存取方式,约定段寄存器,可替换段地址,逻辑地址,物理地址计算式,取指令,堆栈操作,源串,目的串,通用数据读写,BP作为寄存器,CS,SS,DS,ES,DS,SS,无,无,CS,ES,SS,无,CS,DS,ES,CS,ES,SS,IP,SP,SI,DI,EA,EA,CS*16+IP,SS*16+SP,DS*16+SI,DS*16+DI,SS*16+EA,SS*16+EA,15,例、设BX=0158H,DI=10A5H,COUNT(偏移量)=1B57H,DS=2100H,并假定无段前缀,即把DS作为操作数对应的寄存器,求各种方式下的有效地址EA和物理地址?,1) MOV AX,COUNT,2) MOV AX,BX,3) MOV AX, COUNTDI,4) MOV AX,BX+DI,5) MOV AX, COUNTBX+DI,16,3.1.8 其它,(1)直接端口寻址方式,例3.15 IN AL,63H,(2)间接端口寻址方式,例3.16 MOV DX,213H,IN AL,DX,隐含寻址,例如,XLAT,指令,2 I/O端口寻址,3 一条指令有几种寻址方式,例3.17 MOV BX,AL,(BX)=3600H,(DS)=1000H,(AL)=05H,=(13600H)=05H,4 转移类指令寻址,17,3.2 指令的机器码表示方法,1、机器语言指令,汇编语言源程序-二进制机器语言指令(机器码),机器码-程序正确调试和排错-机器语言指令基本概念与编码方式,2、机器语言指令的编码特点,指令有多种编码:,MOV 目的操作数,BX,MOV BX,源操作数,操作码与操作数,8086指令系统采用变长指令,16字节,只有操作码例如CLC 1111 1000,操作数:寄存器,存储器,立即数,端口地址,操作数:几个字节,3.2.1 机器语言指令的编码目的和特点,18,3.2.2 机器语言指令代码的编制,MOV指令,1 编码格式说明,19,MOD和R/M的编码,MOD,00,01,10,11,R/M,000,001,010,011,100,101,110,111,20,2、寄存器间传送指令的编码,例3.18,MOV SP,BX,机器编码,21,3、寄存器与存储器间传送指令的编码,例3.19,MOV CL,BX+1234H,机器编码,22,4、立即数寻址的编码,例3.20,MOV DX,5678H,例3.21,MOV BX+2100H,0FA50H,23,5、包含寄存器的指令的编码,例3.22 求指令MOV DS,AX的机器码,6、段超越前缀指令的编码,例3.33若指令MOV BX,DL 88 17H,求MOV CS:BX,DL的代码,24,3.3 8086的指令系统,共6类指令:,数据传送指令,算术运算指令,逻辑运算与移位指令,字符串指令,控制转移类指令,控制器控制类指令,25,3.3.1 数据传送指令,26,1、通用数据传送指令,字节或字传送指令MOV,堆栈指令PUSH、POP,交换字或字节指令XCHG,表转换指令XLAT,27,(1)MOV传送指令,格式: MOV 目的操作数,源操作数,功能: 将源操作数传送给目的操作数,举例:,MOV AL,BL,MOV ES,DX,MOV AL,BX,MOV DI,AX,MOV CX,1000,MOV BL,40,MOV DX,5040,MOV WORD PTR SI,1234H,MOV WORD PTR BP,2345H,28,思考题1,请指出如下指令哪些是错误的,并说明原因。,(1) MOV BX,DX,(2) MOV 2000H,BX,(3) MOV DS,AX,(4) MOV DISI,CX,(5) MOV BX,BX,(6) MOV CS,2000H,(7) MOV CX,BXBP,29,思考题2,请指出如下指令哪些是错误的,并说明原因。,(1) MOV BX,3000H,(2) MOV SIDI,BX,(3) MOV AX,BL,(4) MOV BYTE PTR 3000H,3000H,(5) MOV 3000H, 3000H,(6) MOV AL,2000,(7) MOV IP,BX,(8) MOV BP,AX,30,(2|3)堆栈操作指令,格式:,PUSH 源操作数,POP 目的操作数,功能:PUSH是将源操作数压入堆栈,POP是将栈顶两单元的内容送目的操作数,原则:“LIFO”,31,例3.29 设(SS)=2000H,(SP)=40H,(BX)=3120H,AX=25FEH,依次执行下列指令:,PUSH BX,PUSH AX,POP BX,32,注意点:,1、堆栈操作是按字执行;,2、PUSH: sp - sp-2,POP: sp - sp+2,3、源操作数和目的操作数可以是寄存器或存储器,但CS不能为目的操作数;,4、LIFO。,33,(4)XCHG交换指令,格式:XCHG 操作数1,操作数2,功能:XCHG是将操作数1与操作数2相互交换,举例,XCHG AL,DL,XCHG BX,CX,XCHG 1234H,CX,1、操作数1和2不能都为内存单元;,2、CS和IP不能作为交换指令的操作数;,3、操作数1和2都不能为立即数。,34,(5)XLAT表转换指令,格式:XLAT,功能:将BX和AL中的值相加,把得到的值作为地址,然后将此地址对应的单元中的值取到AL中,35,XLAT指令执行的过程:,MOV AL,07H,MOV BX,300H,XLAT,36,例3.31 数码管显示查表,37,程序,TABLE DB 40H,79H,24H,30H,19H,DB 12H,02H,78H,00H,18H,MOV AL,5,MOV BX,OFFSET TABLE,XLAT,38,宏汇编语言,段的结构:,段名1 SEGMENT,段名1 ENDS,.,.,.,段名n SEGMENT,语句1,语句k,段名n ENDS,END 标号,软件:,MASM5.0,建立源文件:,test1.,asm,编辑文件:,notepad.exe,汇编:,MASM test1.,asm,目标文件的链接:,link test1.,obj,执行文件的调试:,debug test1.exe,单步调试:,P/T,39,框架程序test1.asm,DATA SEGMENT,TABLE DB 40H,79H,24H,30H,19H,DB 12H,02H,78H,00H,18H,DATA ENDS,STACK SEGMENT,DB 100 DUP(?),STACK ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,SS:STACK,MAIN PROC FAR,START: MOV AX, DATA,MOV DS,AX,MOV AX, STACK,MOV SS,AX,MOV AL,5,MOV BX,OFFSET TABLE,XLAT,MOV AH,4CH,INT 21H,MAIN ENDP,CODE ENDS,END START,40,调试界面,41,2、输入输出指令,(1)输入/输出指令,格式:IN AL/AX,源操作数(端口地址/AX),OUT 目的操作数(端口地址/AX),AL/AX,功能:IN指令将数据从一个端口传送到累加器中,OUT指令将数据从累加器传送到一个输出口中。,1、累加器只能用AX或AL,2、直接端口输入/输出指令寻址范围:0255(FFH),3、DX寄存器间接指令输入/输出寻址范围:,065535(FFFFH),4、I/O端口与内存统一编址时,可用访问存储器访问I/O端口,注意点:,42,例3.32 :,IN AL, 0F1H,IN AX ,80H,MOV DX,310H,IN AL,DX,例3.33 符号来表示地址:,ATOD EQU 54H,IN AL,ATOD,例3.34 :,OUT 85H,AL,MOV DX, 0FF4H,OUT DX,AL,MOV DX, 310H,OUT DX,AX,43,3、地址目标传送指令,格式:,LEA 寄存器,源操作数,LDS 寄存器,源操作数,LES 寄存器,源操作数,功能:,LEA是将存放源操作数的16位偏移量地址送到一个16位的通用寄存器; LDS是将源操作数有效地址所对应的内存单元中的双字长的高字节内容送入DS,低字内容送入指令所指的寄存器;ES是将源操作数有效地址所对应的内存单元中的双字长的高字节内容送入ES,低字内容送入指令所指的寄存器。,44,例3.35 假设:(SI)=1000H,(DS)=5000H,(51000H)=1234H,LEA BX,SI,MOV BX,SI,例3.36 下面两条指令是等价的,LEA BX,TABLE,MOV BX, OFFSET TABLE,例3.37 LEA BX,6DI,例3.39 设:,(DS)=0100H,(BX)=0020H, (01020H)=0300H,(01022H)=0500H,LES DI,BX,例3.38 设: (DS)=1200H,(12450H)=F346H,(12452H)=0A90H,LDS SI,450,45,4、标志传送指令,格式:,LAHF SAHF PUSHF POPF,功能: LAHF是把标志寄存器中的低8位传送到AH中; SAHF是把AH相应位传送到标志寄存器中的低8位中;PUSHF是将标志寄存器的值压入堆栈顶部;POPF是从堆栈中弹出一个字到标志寄存器中。,46,举例:,PUSHF,POP BX,PUSH CX,POPF,47,注意点:,(1)标志读取指令LAHF与标志设置指令SAHF仅传送SF、ZF、AF、PF和CF,(2)标志寄存器与通用寄存器间没有直接传送指令;,(3)执行PUSHF不影响原寄存器的值,SP-2而POPF指令,SP+2,48,已知程序的数据段为:,DATA SEGMENT,A DB $,10H,B DB COMPUTER,C DW 1234H,0FFH,D DB 5 DUP(?),E DD 1200450AH,DATA ENDS,求下列程序执行后的结果是什么,1) MOV AL,A,2) MOV DX,C,3) XCHG DL,A,4) MOV BX,OFFSET D,5) MOV CX,3BX,6) LEA BX,D,7) LDS SI,E,8) LES DI,E,49,3.3.2 算术运算指令,1、处理的数据类型:无符号二进制整数,带符号二进制整数,无符号压缩十进制整数,无符号非压缩十进制整数,2、二进制数8/16字长,带符号数补码表示,3、压缩与非压缩BCD数,见表3.5,二进制码(B) 十六制(H) 无符号二进制(D) 带符号二进制(D) 非压缩十进制 压缩十进制,0000 0111 07 7 +7 7 07,1000 1001 89 137 -119 89,1100 0101 C5 197 -59,50,算术运算指令:,1、加法指令:,ADD,ADC,INC AAA,DAA,2、减法指令,SUB,SBB,DEC,NEG,CMP AAS,DAS,3、乘法指令,MUL,IMUL AAM,4、除法指令,DIV, IDIV,CBW,CWD AAD,51,1、加法指令,1)格式:,ADD 目的操作数,源操作数,ADC 目的操作数,源操作数,INC 目的操作数,2)功能:,ADD不带进位加法:目的-源+目的,ADC带进位加法:目的-源+目的+CF,INC增量指令:目的9,时,+6,调整;,1,),2,),3,),DAA,在,AF=1,或低,4,位,9,或高,4,位,9,时,+6,调整;,57,例3.44,若AL=BCD 9,BL=BCD 5,求两数之和,设AH=0。,ADD AL,BL,AAA,CF=1,AF=1,AH=1,AL=4,0000 1001,+0000 0101,0000 1110,0000 1110,+0000 0110,0001 0100,0001 0100,0000 1111,0000 0100,58,例3.45,若AL=ASCII 9(39H),BL=ASCII 5(35H),求两数之和,设AH=0。,MOV Al,9,MOV BL,5,ADD AL,BL,AAA,CF=1,AF=1,AH=1,AL=4,0011 1001,+0011 0101,0110 1110,0110 1110,+0110 0110,0111 0100,0111 0100,0000 1111,0000 0100,59,例3.46,若AL=BCD 38,BL=BCD 15,求两数之和。,ADD AL,BL,AAA,CF=0,AL=53H,0011 1000,+0001 0101,0100 1101,0100 1101,+0000 0110,0101 0011,60,例3.47,若AL=BCD 88,BL=BCD 49,求两数之和。,ADD AL,BL,AAA,CF=1, AL=37H,1000 1000,+0100 1001,1101 0001,1101 0001,+0000 0110,1101 0100,1101 0111,+0110 0000,0011 0111,61,2、减法指令,1)格式:,SUB 目的操作数,源操作数,SBB 目的操作数,源操作数,DEC 目的操作数,NEG 目的操作数,CMP 目的操作数,源操作数,2)功能:,SUB,不带进位的减法指令:目的-目的-源,SBB,带进位的减法指令:目的-目的-源-CF,DEC,减量指令:目的-目的-1,NEG,求补指令:目的-0-目的,CMP,比较指令:目的-源(影响标志位),62,注意点:,1)SUB与SBB指令除了是否带借位的区别外,其余相同。目的操作数不能为立即数、CS、IP;,2)SBB指令为实现多字节的加法运算提供了方便,3)DEC指令影响标志位AF、OF、PF、SF、ZF,但不影响CF,4)SUB、SBB、NEG、CMP指令影响AF、OF、PF、SF、ZF、 CF,5)求补指令NEG相当于0减去目的操作数,6)比较指令CMP只使结果影响标志位,但不送回相减结果。,63,例3.48,SUB AX,DX,SUB DX,1850H,SUB BL,BX,例3.49,SBB AL,CX,例3.50,DEC BX,DEC WORD PTR BP,例3.51,NEG AX,NEG BYTE PTR BX,例3.52,CMP AL,80H,CMP BX, DATA1,64,例3.53,设(AL)=1011 0001B,(DL)=0100 1010B,只要执行指令SUB AL,DL,影响标志位。,1011 0001,-0100 1010,0100 0111,ZF=0, AF=1, CF=0, SF=0, PF=0, OF=1,65,程序演示,DATA SEGMENT,AREA1 DB 14H,3BH,AREA2 DB 3 DUP(0),ARRAY DW 3100H,01A6H,DATA ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,START: MOV AX, DATA,MOV DS,AX,MOV AL,10110001B,MOV DL,01001010B,SUB AL,DL,LAHF,MOV AX,2345H,MOV DX,5219H,ADD AX,DX,LAHF,MOV AX,2345H,MOV DX,5219H,SUB AX,DX,LAHF,MOV AH,4CH,INT 21H,CODE ENDS,END START,66,3 乘法指令,1)无符号乘法指令,格式: MUL 源操作数,指令功能:无符号数乘法,1)8位数乘法:AX-AL*源操作数,2)16位数乘法,(DX,AX)0,CF=1,OF=1,例3.57 设(AL)=55H,(BL)=14H,计算它们的乘积。,MUL BL,带符号数的乘法也用MUL指令:,例3.58 FFH,FFH=FD01H,68,2)整数乘法,格式: IMUL 源操作数,指令功能:无符号数乘法,1)8位数乘法:AX-AL*源操作数,2)16位数乘法,(DX,AX)0,CF=1,OF=1,例3.59 设(AL)=-28,(BL)=59,计算它们的乘积。,IMUL BL,69,3)乘法调整指令,指令格式: AAM,指令功能:对非压缩十进制数或ASCII用MUL指令乘积结果十进制调整,AH为十位,AL为个位,例3.60,09*06,MOV AL,09H,MOV BL,06H,MUL BL,AAM,字符9*6,MOV AL,9,AND AL,0FH,MOV BL,6,AND BL,0FH,MUL BL,AAM,70,4 除法指令,1)无符号除法指令,格式:DIV 源操作数,2)有符号除法指令,格式:IDIV 源操作数,功能:,1)AX/8位源操作数-AL(商),AH (余数),2) (DX,AX)/16位源操作数-AX(商),DX(余数),71,除法溢出,例3.61 无符号数7A86和04H相除,商1EA1H,MOV AX,7A86H,MOV BL,04H,DIV BL,72,转换指令,3)字节转换成字指令,格式:CBW,功能:AL-AX,AH=FFH(AL.7=1), AH=00H(AL.7=0),4)字转换成双字指令,格式:CWD,功能: AX-(DX,AX),DX=FFFFH(AX.15=1), DX=0000H(AX.15=0),73,例3.62编程求-38/3的商和余数,MOV AL,11011010B,MOV CH,00000011B,CBW,IDIV CH,74,5)AAD除法的ASCII调整指令,指令格式:AAD,功能:两位非压缩BCD数对一个非压缩BCD数,用DIV除法指令前的调整。,完成:,AL-AH*10+AL,AHNEW_LOC,DATA SEGMENT,SRC_MESS DB HELLO!,DATA ENDS,EXTRA SEGMENT,NEW_LOC DB 6 DUP(?),EXTRA ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,ES,EXTRA,START: MOV AX,DATA,MOV DS,AX,MOV AX,EXTRA,MOV ES,AX,.,CODE ENDS,END START,LEA SI,SRC_MESS,LEA DI,NEW_LOC,MOV CX,8,CLD,REP MOVSB,AGAIN: MOVS NEW_LOC,SRC_MESS,DEC CX,JNZ AGAIN,91,例3.76 比较两个字符串PASSWORD与IN_WORD,DATA SEGMENT,PASSWORD DB 8086 CPU,IN_WORD DB 8086 CPU,COUNT EQU 8,DATA ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,ES:DATA,MOV AX,DATA,MOV DS,AX,CODE ENDS,END,LEA SI,PASSWORD,LEA DI,IN_WORD,MOV CX,COUNT,CLD,REPZ COMPSB,JNE SOUND,OK:,.,SOUND,.,92,例3.77 在某一字符串中搜索字符A,有,就记录下来,送到BX寄存器中;无,BX寄存器清0。字符串起始地址STRING的偏移地址为0,长度在CX中。,MOV DI,OFFSET STRING,MOV CX,COUNT,MOV AL,A,CLD,REPNE SCASB,JZ FIND,MOV DI,0,FIND: MOV BX,DI,HLT,93,例3.78 数据段中有一数据块,起始地址BLOCK,8位有符号数,要求正负数分开,正数送附加段PLUS_DATA,负数送附加段MINUS_DATA.,START: MOV SI,OFFSET BLOCK,MOV DI,OFFSET PLUS_DATA,MOV BX,OFFSET MINUS_DATA,MOV CX,COUNT,MOV AL,A,CLD,GOON: LODS BLOCK,TEST AL,80H,JNZ MINUS,STOSB,JMP AGAIN,MINUS: XCHG BX,DI,STOSB,XCHG BX,DI,AGAIN: DEC CX,JNZ GOON,HLT,94,3.3.5 控制转移指令,无条件转移和过程调用,JMP CALL RET,条件转移,JZ/JE等 JA/JNBE等,条件循环,LOOP LOOPE/LOOPZ LOOPNE/LOOPNZ JCXZ,中断,INTn INTO IRET,95,1、无条件跳转和过程调用指令,1)JMP无条件跳转指令,格式:JMP 目标地址,功能:JMP使程序无条件跳转到程序存储器中某目标地址。,举例:,段内转移,JMP SHORT PROG_S ;,段内直接转移 立即短转移,8,JMP NEAR PTR PROG_N ;,段内直接转移 立即近转移,16,JMP BX,;,段内间接转移 寄存器,16,JMP WORD PTR 5BX,;,段内间接转移 存储器,16,段间直接转移,JMP FAR PTR PROG_F,;段,间直接转移 立即转移,32,JMP DWORD PTR DI,;,段间间接转移 存储器,32,96,(i)段内直接转移指令,指令格式:,JMP SHORT 标号,JMP NEAR 标号,97,(ii)段内间接转移指令,例3.79 设(BX)=4500H,JMP BX,例3.80 设(DS)=2000H,(BX)=100H,(20105H)=4F0H,JMP WORD PTR 5BX,98,(iii)段间直接(远)转移指令,例3.81 设PROG_F所在段的基地址=3500H,偏移地址=080AH。,JMP FAR PTR PROG_F,(iV)段间间接转移指令,例3.82 设(CS)=1200H,(IP)=05H,(DS)=2500H, (SI)=1300H,(26425)=4500H,(26427H)=32F0H。,JMP DWORD PTR SI+0125H,OP MOD 101 R/M DISP_L DISP_H,1111 1111 10 101 100 0010 0101 0000 0001,99,例3.82中指令执行过程,100,2)过程调用和返回指令,格式:CALL 目标地址;RET;RET 参数,功能:CALL先将断点地址压入堆栈,然后将子程序的目标地址装入IP或IP与CS中,转到子程序入口,然后顺序执行;RET是从堆栈中弹出断点地址,装入IP或IP与CS中,达到段内返回;带参数的返回指令除完成RET功能,还使SP的值加上不带符号的16位参数。,第一步:近调用,,SP-SP-2,,,IP,入栈;远调用,,SP-SP-2,,,CS,入栈,,SP-SP-2,,,IP,入栈。,第二步:,RET,。,近调用,,SP-SP+2,,,IP,出栈;远调用,,SP-SP+2,,,CS,出栈,,SP-SP-2,,,IP,出栈。,101,(i)段内直接调用和返回,例3.83 设(CS)=2000H,(IP)=1050H,(SS)=1050H,(SP)=1234H.,CALL PROG_G,编码结果,E8 DISP_L DISP_H,102,(ii)段内间接调用和返回,例3.84 设(DS)=1000H,(BX)=200H,(SI)=300H,(10500H)=3210H.,CALL BX,CALL WORD PTR BX+SI,指令执行:SP-SP-2 IP入栈 IP-EA,103,(iii)段间直接调用和返回,例3.85 设(CS)=1000H,(IP)=205AH,(SS)=2500H,(SP)=0050H.,CALL FAR PTR PROG_F,编码结果,9A DISP_L DISP_H SEG_L SEG_H,104,(iV)段间间接调用,例3.86 CALL DWORD PTR BX,IP-(CS:BX),CS100度,打开加热器;T=100度,关闭加热器。,温度传感器端口号320H;加热器控制连到端口321H的最低位,1, 打开加热器;0,关闭加热器。,GET_TEMP: MOV DX,320H,IN Al,DX,CMP AL,100,JB HEAT_ON,JMP HEAT_OFF,HEAT_ON: MOV AL,01H,MOV DX,321H,OUT DX,AL,JMP GET_TEMP,HEAT_OFF: MOV AL,00H,MOV DX,321H,OUT DX,AL,110,例3.91 以首地址TABLE的10个内存字节单元中存放10个有符号数,统计正、负和0的个数,并将结果分别存入PLUS,NEGT和ZERO单元。,TABLE: DB 01H,80H,0F5H,32H,86H,DB 74H,49H,0AFH,25H,40H,PLUS: DB 0,NEGT: DB 0,ZERO: DB 0,MOV CX,10,MOV BX,0,AGAIN: CMP TABLEBX,0,JGE GRET_EQ,INC NEGT,JMP NEXT,GRET: JG P_INC,INC ZERO,JMP NEXT,P_INC: INC PLUS,NEXT: INC BX,DEC CX,JNZ AGAIN,111,3、循环控制指令,LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE,功能:LOOP是将CX的内容减1,然后判断CX是否为0,如不为0,则继续循环而执行下1条指令; LOOPZ/LOOPE是将CX的内容减1,然后判断CX是否为0,且判断ZF是否为1,如ZF=1且CX不为0,则继续循环而执行下1条指令; LOOPNZ/LOOPNE是将CX的内容减1,然后判断CX是否为0,且判断ZF是否为1,如ZF=1且CX为0,则继续循环而执行下1条指令。,JCXZ,格式:,JCXZ,标号,功能:当,CX,寄存器内容为,0,,则转移到所指定的地址处,否则继续执行。,112,注意点,1)循环控制指令所控制的目标地址范围-128+127;,2)在循环控制指令前,一定要设置CS初值;,3)LOOP指令需用9个时钟周期,返回需5个时钟周期;,4)CX值改变不影响标志位ZF。,113,例3.92 设商店里有8种商品,价格分别为83元,76元,65元,84元,71元,49元,62元,58元。每种商品提价7元,编程计算提价后的每种商品价格。,OLD: DB 83H,76H,65H,84H,DB 71H,49H,62H,58H,NEW: DB 8 DUP (?),MOV CX,08H,MOV BX,00H,NEXT: CMP AL,OLDBX,ADD AL,7,DAA,MOV NEWBX,AL,INC BX,LOOP NEXT,114,例3.93 61H端口中的D1,D0位接到扬声器电路上。在D0=0时,D1=1,扬声器接通; D1=0,则断开。,IN AL,61H,AND AL,0FCH,MORE: XOR AL,02H,OUT 61H,AL,MOV CX,260,DELAY: LOOP DELAY, JMP MORE,LOOP用于软件延时,MOV CX,10,DELAY: LOOP DELAY,115,例3.94 设有一个由50个字节组成的数组放在ARRAY开始的内存单元中,现要对数据中元素进行测试,若元素为0,且不是最后一个元素,便继续测试下一个元素,直到找到第一个非0元素或查完为止。,ARRAY: DB, , , ,.,MOV BX,OFFSET ARRAY,DEC BX,MOV CX,50,NEXT: INC BX,CMP BX,00H,LOOPE NEXT,116,例3.95 设有一个由17个字符组成的字符串放在STRING开始的内存单元中,现要查该字符串中是否含空格符,若没找到空格符和尚未查完,便继续查找,直到找到第一个空格符或查完了才退出循环。,STRING: DB,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!