收藏 分享(赏)

第三章-微机原理、汇编与接口技术-第二版-朱定华版.ppt

上传人:无敌 文档编号:968202 上传时间:2018-05-09 格式:PPT 页数:102 大小:2.27MB
下载 相关 举报
第三章-微机原理、汇编与接口技术-第二版-朱定华版.ppt_第1页
第1页 / 共102页
第三章-微机原理、汇编与接口技术-第二版-朱定华版.ppt_第2页
第2页 / 共102页
第三章-微机原理、汇编与接口技术-第二版-朱定华版.ppt_第3页
第3页 / 共102页
第三章-微机原理、汇编与接口技术-第二版-朱定华版.ppt_第4页
第4页 / 共102页
第三章-微机原理、汇编与接口技术-第二版-朱定华版.ppt_第5页
第5页 / 共102页
点击查看更多>>
资源描述

1、微机原理、汇编与接口技术,第三章 程序设计的基本技术,3.1,3.2,3.3,3.5,顺序程序设计,分支程序设计,循环程序设计,子程序设计,3.4,串处理程序设计,3.6,宏功能程序设计,宏汇编语言与程序设计,1. 包括4个内容:宏汇编语言“(伪指令及运算符、表达式的定义和应用)DOS调用方法(键盘输入和屏幕显示)程序设计(设计方法及规范)上级实践2. 汇编语言中级语言面向机器的符号语言程序代码短、运行速度快、实时性好、可直接控制硬件是计算机本专业语言3. 要求熟悉硬件环境和DOS系统,顺序程序是最简单的程序,它的执行顺序和程序中指令的顺序完全一致,3.1 顺序程序设计,格式:MUL sour

2、ce IMUL source ;符号整数乘法,3.1.1 乘除法指令,1.乘法指令MUL和符号整数乘法指令IMUL,源操作数 source可以是字节、字或双字,可为寄存器或存储器操作数,不能为立即数目的操作数是AL、AX或EAX,视source的类型属性决定是AL、AX还是EAX在乘法指令之前必须将目的操作数送AL(字节乘)或AX(字乘) 或EAX(双字乘),16位乘法指令所执行的操作是AL或AX乘以source,乘积放回到AX或DX和AX,如下图所示,AL,sourc8,AX,AX,sourc16,AX,DX,3.1.1 乘除法指令,32位乘法指令所执行的操作是EAX乘以source,乘积放

3、回到EDX和EAX,如下图所示,EAX,sourc16,EAX,EDX,可用乘法运算将BCD数转换为二进制数,3.1.1 乘除法指令,例 将AX中的3位BCD数转换为二进制数存入字节变量SB中,M0V CH,10MOV CL,4MOV SB,AL ;暂存十位和个位MOV AL,AH ; 百位存入AL中MUL CH ;百位10AXMOV AH,SBSHR AH,CL ;取十位ADD AL,AH ;百位10 + 十位ALMUL CH ;(百位10 + 十位)10 AXAND SB,0FH ;取个位ADD SB,AL ;(百位10 + 十位)10 +个位SB,N2102N110N0(N210N1)1

4、0N0,程序段如下:,格式: DIV source IDIV source ;符号整数除法注:源操作数source可以是字、字节或双字,可为REG或MEM,不能为立即数目的操作数是AX或DX和AX或EDX和EAX,2.除法指令DIV和符号整数除法指令IDIV,3.1.1 乘除法指令,16位除法指令所执行的操作如下图所示,AL,sourc8,AX,AX,sourc16,AH,DX,3.1.1 乘除法指令,32位除法指令所执行的操作如下图所示,EAX,sourc32,EDX,可用除法运算(除10取余)将二进制数转换为BCD数,3.1.1 乘除法指令,例 将AL中的8位无符号二进制数转换为BCD数放

5、入AX中,MOV AL,7DHMOV CL,4MOV BL,10MOV AH,0 ; 将8位二进制数扩展为16位DIV BL ; 商AL,余数AH(个位数)MOV BH,AH ;个位暂存MOV AH,0 DIV BL ; 商AL,余数AH(十位数)SHL AH,CLOR BH,AH ; BCD数十位与个位合并MOV AH,0DIV BL ; AH中余数为BCD数百位MOV AL,BH ;BCD数十位与个位送AL,“除10取余”法,3. 扩展指令CBW和CWD,要把一个8位二进制数除以一个8位二进制数,要有一个16位二进制数在AX中.所以做8位除以8位的除法前先要把8位被除数扩展为16位,做16

6、位除以16位的除法前要把16位被除数扩展为32位,做32位除以32位的除法前要把32位被除数扩展为64位.这种扩展对于无符号数除法只需将AH或DX清0,而对符号整数除法则要通过扩展符号位来把被除数扩展。,3.1.1 乘除法指令,两指令都隐含操作数 在做8位除以8位、16位除以16位、 32位除以32位的除法之前,应先扩展AL、AX或EAX中的被除数 扩展指令和符号整数除法仅对补码数适用,格式:CBW ; AL的最高位扩展至AH CWD ; AX的最高位扩展至DX CWDE ;AX的最高位扩展至EAX的高16位 CDQ ;EAX的最高位扩展至EDX,3.1.1 乘除法指令,如:有一符号字数组变量

7、ARRAY,第1个字是被除数,第2个字是除数,接着存放商和余数,其程序段为:,MOV SI,OFFSET ARRAYMOV AX,SICWDIDIV WORD PTR 2SIMOV 4SI,AXMOV 6SI,DX,3.1.1 乘除法指令,3.1.2 BCD数调整指令,用二进制数算术运算指令对BCD数进行运算,会得到一个非BCD数或不正确的BCD数。如: 0000 0011B+0000 1001B= 0000 1100B 0000 1001B+0000 0111B= 0001 0000B第一个结果是非BCD数;第二个结果是不正确的BCD数。若再加上6,就可以得到正确的BCD数: 0000 11

8、00B+0000 0110B= 0001 0010B 0001 0000B+0000 0110B= 0001 0110B对BCD数使用二进制数算术运算指令进行运算,然后执行一条专用调整指令来处理BCD数的结果,1.BCD数加法调整指令DAA和AAA,格式: DAA功能:将AL中的和调整为正确的压缩BCD数调整规则: (AL0FH)9或AF=1,则AL加6; (AL0F0H)90H或CF=1,则AL加60H.,3.1.2 BCD数调整指令,(1)压缩BCD数加法调整,注:该指令操作数隐含为AL,即只能对AL中的操作数据调整对结果调整时要用到CF,AF标志,所以调整指令应紧跟BCD数加法指令DAA

9、指令会影响标志如: MOV AX,3456H ADD AL,AH ;AL8AH,AF0,CF0 DAA ;AL90H,3.1.2 BCD数调整指令,格式: AAA功能:将AL中的和调整为正确的非压缩BCD数送AX调整规则: (AL0FH)9或AF=1,则 (AL+6)0FHAL ,AH+1AH ; 否则,AL0FH AL ,AH不变.,(2)非压缩BCD数加法调整,3.1.2 BCD数调整指令,注:同DAA,AAA的操作数也隐含为AL,且要紧跟加法指令AAA调整后的存放规律可理解为调整后的个位数送AL,十位数(即进位)加到AH中.故执行该指令前AH应清0如:将两个BCD数的ASCII码相加,得

10、到和的ASCII码: MOV AL,35H ; 5 ADD AL,39H ; 9,AL=6EH MOV AH,0 AAA ;AX=0104H OR AX,3030H ; AX=3134H 即14,3.1.2 BCD数调整指令,例3.1 求两个字变量W1和W2中压缩BCD数之和,存入字节变量SUM中。 如:8931+5678=14609,W1 DW 8931HW2 DW 5678HSUM DB 3 DUP(0)MOV AL , BYTE PTR W1 ;AL31HADD AL , BYTE PTR W2 ; ALA9H,CF=0,AF=0DAA ;AL09H,CF=1 MOV SUM , AL

11、;存个位和十位MOV AL , BYTE PTR W1+1 ;AL89HADC AL , BYTE PTR W2+1 ; ALE0H, CF=0,AF=1DAA ;AL46H, CF=1MOV SUM+1,AL ;存百位和千位MOV SUM+2,0 ;处理向万位的进位RCL SUM+2,1,例3.2 求两个字变量W1和W2中非压缩BCD数之和,存入字节变量SUM中。 如:89+67=156,W1 DW 0809HW2 DW 0607HSUM DB 3 DUP(0)MOV AL , BYTE PTR W1 ;AL09HADD AL , BYTE PTR W2 ; AL10H,AF=1AAA ;A

12、L06H,AH=01H MOV SUM , AL ;存个位MOV AL , BYTE PTR W1+1 ;AL08HADC AL , BYTE PTR W2+1 ; AL0FH,AF=0MOV AH ,0AAA ;AL05H,AH01HMOV WORD PTR SUM+1,AX ;存十位和百位,格式: DAS功能:将AL中的差调整为正确的压缩BCD数调整规则: (AL0FH)9或AF=1,则AL减6; (AL0F0H)90H或CF=1,则AL减60H.,如: MOV AX,5643H SUB AL,AH ;AL=DEH,有借位 DAS ;AL=78H,保持借位,即134-56,2.BCD数减法

13、调整指令DAS和AAS,(1)压缩BCD数减法调整,3.1.2 BCD数调整指令,格式: AAS功能:将AL中的差调整为正确的非压缩BCD数送AX调整规则: (AL0FH)9或AF=1,则 (AL-6)0FHAL ,AH-1AH ; 否则,AL0FH AL ,AH不变.,如: MOV AX,0806H SUB AL,07H ;AX=08FFH AAS ;AX=0709H,(2)非压缩BCD数减法调整,3.1.2 BCD数调整指令,格式: AAM功能:将AL中小于64H的二进制数变换为非压缩BCD数送AX调整规则: AL / 0AH AH(十位), AL MOD 0AH AL(个位),如: MO

14、V AL,63H AAM ;AX=0909H,3.非压缩BCD数乘除法调整指令AAM和AAD,(1)乘法调整,3.1.2 BCD数调整指令,格式: AAD功能:将AX中的两位非压缩BCD数变换成二进制数集中在AL中,如: MOV AX,0906H MOV DL,06H AAD ;AX=0060H DIV DL ;AL=10H,AH=0 MOV DL,AH ;存余数 AAM ;AX=0106H,(2)除法调整,注:此指令可对被除数进行预调整加、减和乘法调整在相应运算操作之后进行,而除法的调整在除法操作之前进行.,3.1.2 BCD数调整指令,例3.4 字变量W和字节变量B中分别存放着两个非压缩B

15、CD数,求两者的商和余数,分别存入字变量Q和字节变量R中。,分析: 先将W中的非压缩BCD数取到AX中,用AAD指令调整为二进制数,二进制的除法之后,再用AAM指令将结果调整为非压缩BCD数。如, (W)=0909H,(B)=5, 995=194 (Q)=0109H,(R)=04H,W DW 0909H B DB 03HR DB 0Q DW 0MOV AX , WAAD ; 0909H63HDIV B ; AL=13H,AH=04HMOV R , AH ;存余数AAM ; 13H0109HMOV Q , AX ;存商,例3.5 (教材P96)从键盘键入09的任一自然数N,求其立方值并显示.,I

16、NPUT DB Please Input N(09): LFB DB 0182764125 DB 216343512729 N DB 0 MOV DX,OFFSET INPUT MOV AH,9 INT 21H,方法:可用乘法运算实现,也可用查表法实现.,3.1.3 顺序程序设计举例,MOV AH,1INT 21HMOV N,ALMOV AH,2MOV DL,0AHINT 21HMOV DL,NAND DL,0FHMOV CL,2SHL DL,CLMOV DH,0ADD DX,OFFSET LFBMOV AH,9INT 21H,第三章 程序设计的基本技术,3.1,3.3,3.5,顺序程序设计,

17、分支程序设计,循环程序设计,子程序设计,3.4,串处理程序设计,3.6,宏功能程序设计,3.2,顺序程序是按指令的书写(存放)顺序执行,而实际情况需要根据不同的条件做不同的处理,形成分支.汇编中的分支的条件往往是通过标志的不同状态而反映的.常用改变标志指令和转移指令实现分支.,3.2 分支程序设计,通用格式:Jcond short_lable操作:若满足条件,则OFFSET short_lableIP,实现转移;否则顺序执行.short_lable 短标号,条件转移是相对转移指令,即从当前地址到目标地址的偏移量为-128127(从本指令则为-126+129,因为条件转移指令均为双字节指令),故

18、只能实现段内转移.,3.2.1 条件转移指令,仅判断一个标志位实现转移.参见教材:P93、表31,1.简单条件转移指令,3.2.1 条件转移指令,如: JZ/JE S_LAB为零/相等转移 操作:测试前面操作结果为0则转移,即判ZF=1转移.JZ , JE为等价助记符,任写一种均可,可根据程序设计意图选择.如: MOV BX , 0FFFFH INC BX ; ZF=1 JZ NEXT ; 为0转移到NEXT NEXT: ,3.2.1 条件转移指令,如:MOV BL , 1 ; CMP BL , 5 ; ZF=0 JE NEXT ; 比较结果相等则转移到NEXT ;不相等顺序执行NEXT:注:

19、 此类指令,均只测试前面的操作结果所设标志,指令本身不影响标志.所以,在条件转移指令前,一定有一条能正确影响标志的指令.,3.2.1 条件转移指令,2.无符号数条件转移指令,条件转移常依据两个数的关系来决定,两个数的关系除相等与否,还有大小之分,比较大小时,要区分是无符号数还是符号数,否则答案不明确.,如:0FFH00H ? 视为无符号数 0FFH=255 00H ; 视为符号数 0FFH= -1 00H .所以,应将两种类型的数分开比较:对无符号数使用术语:低于/高于 Below/Above;对带符号数使用术语:小于/大于 Less/Greater,3.2.1 条件转移指令,无符号数条件转移

20、指令有4条(P93,表32): 指令助记符 功能 JB/JNAE 低于/不高于等于转移 JNB/JAE 不低于/高于等于转移 JA/JNBE 高于/不低于等于转移 JNA/JBE 不高于/低于等于转移,3.2.1 条件转移指令,3.符号数条件转移指令,符号数条件转移指令有4条(P94,表33): 指令助记符 功能 JL/JNGE 小于/不大于等于转移 JNL/JGE 不小于/大于等于转移 JG/JNLE 大于/不小于等于转移 JNG/JLE 不大于/小于等于转移,3.2.1 条件转移指令,格式:JMP target操作:将控制转向目的标号target: target在段内: target的偏移

21、地址IP target在段外: target的偏移地址IP target的段首址CS,条件转移范围为-128+127,而无条件转移指令没有范围限制. 在分支程序中往往需要它将各分支重新汇集到一起.,3.2.2 无条件转移指令,1.无条件直接转移指令,格式: JMP dest 操作: 目的操作数为寄存器寄存器内容送IP 目的操作数为字变量字变量内容送IP 目的操作数为双字变量双字变量内容送CS和IP 如: JMP NEXT ;无条件转移转到NEXT NEXT: 如: JMP WORD PTRBX ;即( BX ) IP,2. 无条件间接转移指令,3.2.2 无条件转移指令,分支实现的基本方法有两

22、种:一种是利用比较转移指令实现分支;一种是利用跳转表实现分支.视比较对象,正确选择合适的转移指令.要为每个分支安排正确出口.凡是可共用的部分,应尽量放在公共程序段中以使程序简短.在调试分支程序时,应使用多组数据,分别对各种分支进行反复测试.,3.2.3 分支程序设计举例,例3.7 编程计算下面函数值 (X,Y均为字节符号数),X DB -5Y DB 20Z DB 0,MOV Z,0 MOV AL,X XOR AL,Y ;根据X、Y的符号置S标志,相同为0 JS BACK ;相异为1,X、Y相异结束 MOV Z,1 ;Z赋1 CMP X,0 ;相同后,判断其中某数的符号 JNS BACK ;大于

23、等于0,结束 NEG Z ;小于0,求补得1BACK:ret,例3.8从键盘上键入09中任一自然数N,将2的N次方值在显示器的下一行显示出来。求一个数的N次方值可以用查表法实现,也可以用乘法运算实现。用查表法求一个数的N次方值与例3.5类似,此处使用乘法运算来编制该程序。由于乘法运算都是乘2操作,故用逻辑左移实现。设其初值为1,键入的N值就是对该初值移位的位数。求得的徝是一个二进制数,为了输出还要将二进制数转换为十进制数的ASCII码。其最大值是2的9次方,29=512,最大值的ASCII码占3个单元,再加上回车、换行和$,所以输出数据区OBUF最多6个单元。程序如下:OBUF DB 6 DU

24、P(0) MOV AH,1 INT 21H AND AL,0FH ;将N转换为N MOV CL,AL MOV AX,1 SHL AX,CL,MOV BX,5MOV OBUFBX,$MOV CX,10;转换为十进制数的ASCII码AGAIN:MOV DX,0DIV CXOR DL,30HDEC BXMOV BX,DLAND AX,AXJNZ AGAINSUB BX,2MOV WORD PTRBX,0A0DH ;存入回车换行MOV DX,BXADD DX,OFFSET OBUFMOV AH,9INT 21H,例3.9 从键盘上键入2位十六进制数将其拼合成一个字节存入字节变量SB中。IBUF DB

25、3,0,3 DUP(0)SB DB 0 MOV DX, OFFSET IBUF ;键入2位十六进制数 MOV AH, 10 INT 21H MOV AX, WORD PTR IBUF+2;键入字符送AX SUB AX, 3030H ;字符变为十六进制数 CMP AL,0AH JB LNSUB7 SUB AL,7LNSUB7: CMP AH,0AH JB LNSUB7 SUB AH,7HNSUB7: MOV CL, 4 ;将AX中的数拼合成一个字节 SHL AL ,CL OR AL, AH MOV SB,AL,例3.10 某工厂的产品有8种不同的加工处理程序P0P7,根据键盘输入,做不同的处理,

26、若是07以外的键,则退出加工处理,此例可以用两种方法实现:一种是用逐一比较判断,逐次比较转移实现二叉分支、整体上实现多分支; 另一种是跳转表法,直接实现多分支.,方法一逐一比较法.简单,条理清楚,易于实现,但转移范围只能是:128127 INPUT DB Input( 07): $ MOV DX , OFFSET INPUT ;显示提示 MOV AH , 9 INT 21H MOV AH , 1 ;等待键入一个字符 INT 21H CMP AL , 0 ;为0字符则转P0 JE P0 CMP AL , 1 ;为1字符则转P1 JE P1,CMP AL ,2JE P2 CMP AL ,3JE P

27、3 CMP AL ,4 JE P4CMP AL ,5JE P5CMP AL ,6JE P6CMP AL ,7JE P7JMP DOWN ;不是07则退出程序,P0: MOV DL , 0 ;键入0则显示0以替代P0程序 JMP EXITP1: MOV DL , 1 ;键入1则显示1以替代P1程序 JMP EXIT P7: MOV DL , 7 JMP EXITEXIT: MOV AH ,2 INT 21HDOWN: RET ;分支程序一定要注意汇合到结束处,方法二:跳转表法 利用无条件的间接转移指令可实现远距离的多分支(间接跳转至不同分支的入口处) 在数据区造一地址表,存放不同的分支入口地址;

28、 设表的首地址为PTAB,每一个 PTAB P0入口地址占一个字单元, 2 P1Pi的入口地址PTAB2i 4 P2若将2iBX,则JMP PTABBX : 可转到Pi入口处,INPUT DB INPUT(07):$ PTAB DW P0,P1,P2,P3,P4,P5,P6,P7 ;定义地址表 LEA DX , INPUT ;显示提示 MOV AH , 9 INT 21H MOV AH , 1 ;等待键入07的数字 INT 21H CMP AL , 0 ;检查输入数据,不是07则退出 JB EXIT CMP AL , 7 JA EXIT AND AX ,0FH ; i2BX ADD AX ,A

29、X MOV BX ,AX JMP PTABBX ;(PTAB2i)PiIPEXIT:RET,P0: MOV DL, 0 ;键入0则显示0以替代P0程序 JMP DOWNP1: MOV DL, 1 ;键入1则显示1以替代P1程序 JMP DOWN P7: MOV DL , 7 DOWN: MOV AH , 2 INT 21H JMP EXIT,键入的ASC码为无符号数,所以,用JB、JA等指令而不能用JG、JL等.,请思考:若为跨段标号,应修改哪些地方? 注:只需修改:DWDD(存IP、CS)、i2i4即可,第三章 程序设计的基本技术,3.1,3.2,3.5,顺序程序设计,分支程序设计,循环程序

30、设计,子程序设计,3.4,串处理程序设计,3.6,宏功能程序设计,3.3,四部分: 循环准备(循环初始化) 建地址指针、置计数初值、设置必要的常数、对工作寄存器及工作单元置初值或清0等. 循环体 重复执行的部分,循环的核心. 循环的修改 修改计数器、寄存器、地址指针、恢复某些参数.循环控制 判断控制循环是否结束或继续.,3.3 循环程序设计,循环程序的具体结构流程有两种:,3.3.1 循环程序的基本结构,如:编程统计字变量W中有多少位1,并将结果存入字节变量N中 W DW 1999H N DB 0,方法一:先执行,后判断 MOV N,0 MOV CX,16LOP: SHL W,1 JNC NO

31、INC INC NNOINC:DEC CX JNZ LOP ret,方法二:先判断,后执行 MOV N,0LOP: CMP W,0 JZ DONE SHL W,1 JNC LOP INC N JMP LOPDONE: ret,循环控制方法最常见的有两种: 计数控制 循环次数已知,故可用某个寄存器或单元作为计数器, 用计数器的值来控制循环的结束与否. 如上例,方法一 条件控制 循环次数未知,即循环次数与循环体的执行情况有关,通过条件测试指令来测试是否满足循环条件,以控制循环是否结束. 如上例,方法二,3.3.1 循环程序的基本结构,此类指令的特点是: 循环次数由 CX计数器控制.循环指令本身不影

32、响标志. 同条件转移指令一样,重复控制指令也是相对转移指令,重复控制指令的目的地址必须在本指令地址的126129字节的范围之内.,3.3.2 重复控制指令, LOOP指令,格式: LOOP short-lable操作:CX1CX, 当CX0则转short-lable 所指指令; 否则顺序执行.注:在使用LOOP指令前,必须把循环次数送入CX.LOOP shotr-lable=若CX=0,则循环要进行65536次.,3.3.2 重复控制指令, LOOPZ / LOOPE指令,格式: LOOPZ / LOOPE short-lable操作:CX1 CX , 当CX0 ,且ZF=1则转移;否则顺序执

33、行.注:本指令不影响ZF,ZF由前面指令设定.即前面比较结果相等.,3.3.2 重复控制指令,格式: LOOPNZ/LOOPNE short-lable操作:CX1 CX , 当CX0 ,且ZF=0则转移;否则顺序执行.,格式:JCXZ short-lable操作:CX=0转移,否则顺序执行.注:指令本身不作减操作,本指令一般用在循环的开始处,当CX=0,则跳过循环., LOOPNZ / LOOPNE指令, JCXZ指令,3.3.2 重复控制指令,(注意循环结构,防止死循环),下面通过几个例题介绍循环控制计数控制条件控制计数与条件双重控制对于某些问题,还有一些特殊控制,如:设开关变量等,可参其

34、他教材.,3.3.3 单重循环程序设计举例,例3.11 计算 Z=X + Y,X、Y 为双字变量.,X DD 72345678HY DD 90ABCDEFHZ DB 5 DUP(0) MOV CX,4 ;设计数初值 MOV SI,0 ;地址指针 AND AX,AX;清CF,AGAIN: MOV AL,BYTE PTR XSI ADC AL,BYTE PTR YSI MOV ZSI,AL INC SI ;指下一个字节 LOOP AGAIN;计数控制 MOV ZSI,0 ;处理向 RCL ZSI,1 万位进位,分析:按照由低到高字节相加.最后的和可能占5个字节.用一个双字变量所占的字节数4作为循环

35、体的控制条件,为计数控制.,例3.12 编写将某数据区十六进制数加密的程序.每个数字占一个字节,分析:设加密数关系如下: 十六数: 0 1 2 3 4 5 6 7 8 9 A B C D E F 加密数: A 9 8 E F 1 0 B 2 5 D 3 7 4 6 C 解密数: 6 5 8 B D 9 E C 2 1 0 7 F A 3 4 即发0 ,则发A;发3 ,则发E;发A,则发D解密规律解密数的位移量=加密数表的数值 如:解密数0的位移量是 = 0AH 如:解密数4的位移量是 = 0FH,HEXS DB 1,2,0EH ; 待发数 N EQU $ - HEXS ; 统计待发数个数JMH

36、 DB N DUP(0) ; 存加密数JMB DB 0AH,9,8,0EH,0FH,1,0,0BH,2,5,0DH,3,7,4,6,0CH MOV CX,N MOV BH,0 初始化 MOV SI,0AGAIN: MOV BL,HEXSSI ; 取待发数 MOV AL,JMBBX ; BX+AL AL MOV JMHSI,AL ; 存加密数 INC SI ; 指向下一数 LOOP AGAIN ;计数控制,加密表,同样,可以编写解密程序如下:,JMH DB 0FH ,0EH ,8 ,9 ,0AH ;设加密数N EQU JMH ;统计加密数个数KMB DB 6,5,8,0BH,0DH,9,0EH,

37、0CH,2,1,0,7,0FH,0AH,3,4KMH DB N DUP(0) ;存解密数 MOV CX ,N MOV BX ,OFFSET KMB MOV SI ,0NEXT: MOV AL ,JMHSI XLAT KMB MOV KMHSI ,AL INC SI LOOP NEXT,解密表,例3.13 将字节变量SB中的8位二进数送显示器显示.,分析: 先将字节变量中的1位二进制数移入AH中,再将移入的二进制数变为ASCII码。为了避免通过CF来传递二进制数,先将SB中的8位二进制数送入AL中,再左移AX,将1位二进制数直接移入AH中。,SB DB 9AHOBUF DB 9 DUP(0),M

38、OV CX, 8 MOV BX,0 MOV AL,SBAGAIN: MOV AH, 0 SHL AX,1 ADD AH,30H MOV OBUFBX,AH INC BX LOOP AGAIN MOV 0BUFBX,$ MOV DX,OFFSET OBUF MOV AH,9 INT 21H ret,例3.14 将键入的十进制数(3276832767)转换为二进数.,算法:十进制数二进制数:反复10+Di循环体 D4D3D2D1D0=D4104D3103 D0 (010+D4)10+D3)10+D2)10+D1)10+D0循环次数 输入负数输入字符个数1; 输入正数(不带符号)输入字符个数循环体中

39、对其绝对值转换为二进制数,若为负数还应求补,BINARY DW 0OBUF DB INPUT A DECIMAL(3276832767):$IBUF DB 7,0 ,7 DUP(0) MOV DX , OFFSET IBUF ;键入十进制数 MOV AH ,10 INT 21H MOV CL ,IBUF+1 ;十进制数位数(含“-”)送CX MOV CH ,0 MOV SI ,OFFSET IBUF+2 ;指向键入的第一个字符 CMP BYTE PTRSI, ;判是否为负数 PUSHF ;保护零标志 JNE SININC ;正数跳转至SININC INC SI ;越过“-”指向数字 DEC CX ;实际字符数少1(“-”号),SININC:MOV AX ,0 ;开始十二AGAIN: MOV DX,10 ;(010+a4)10+)10+a0 MUL DX AND BYTE PTRSI,0FH;十进制数ASC十进制数 ADD AL ,SI ADC AH ,0 INC SI ;指向下一位 LOOP AGAIN ;计数循环 POPF ;恢复零标志 JNZ NNEG ;非0即为正数,则不求补 NEG AX ; 负数对其绝对值求补NNEG: MOV BINARY ,AX ;存放结果,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报