微机原理与接口技术第6章2-课件_第1页
微机原理与接口技术第6章2-课件_第2页
微机原理与接口技术第6章2-课件_第3页
微机原理与接口技术第6章2-课件_第4页
微机原理与接口技术第6章2-课件_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

第6章汇编语言程序设计

用汇编语言编程属结构化程序设计。需按照结构化的思想来进行汇编程序的设计第6章汇编语言程序设计用汇编语言编程属结构化程1分析题意,确定算法根据算法画出程序框图根据框图编写程序上机调试程序执行程序按照自上而下的设计方法,设计一个汇编程序的步骤:分析题意,确定算法按照自上而下的设计方法,设计一个汇编程序的2顺序程序分支程序循环程序从结构上来讲,一般的汇编程序可分为:顺序程序从结构上来讲,一般的汇编程序可分为:3Eg:从键盘输入一个字符并存储到字节变量BUF单元中.分析:用DOS功能调用完成键入,输入的字符保存在AL寄存器中将AL中的内容存到定义在数据段的变量BUF所指单元中

顺序程序设计Eg:从键盘输入一个字符并存储到字节变量BUF单元中.分析:4 .486DATASEGMENTUSE16

BUF DB ?DATAENDS源程序清单:CODE SEGMENTUSE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV AH,1 INT 21H;AL=键入字符的 MOV BUF,ALASIIC码 MOV AH,4CH INT 21HCODE ENDS END BEG .486源程序清单:CODE SEGMENTUS5

分支程序设计

转移指令可用来实现分支程序设计分支程序分三种:简单分支

复合分支多分支分6

简单分支即两路分支,该分支程序结构为:条件满足否?程序段1程序段2YN简单分支7

Eg:将BX寄存器的内容以二进制数格式显在屏幕上BX=1110010011100110B

简单分支

RCL0SALROLCFCFCFEg:将BX寄存器的内容以二进制数格式显在屏幕上BX=18·486CODESEGMENTUSE16ASSUME

CS:CODEBEG:MOVBX,5678HMOVCX,16LAST:MOVAL,’0’ROLBX,1JNCNEXT

MOVAL,’1’NEXT:MOVAH,0EH

INT10HLOOPLASTMOVAH,4CHINT21H

CODEENDSENDBEGADCAL,0数→BX,16→CXC标=?‘1’→AL调BIOS.0EHCX-1→CXCX=0‘0’→ALBX左移一位10NY返DOS源程序清单:·486ADCAL,09复合分支判断的条件是复合条件,称复合判断复合分支程序结构为:条件1和条件2...满足否?程序段1程序段2YN复合分支条件110Eg:某科室9人,统计月收入在800~900间的人数,并用十进制数显示

复合分支

分析:月收入是无符号数,对一批数处理应该用间址。数轴:··

N1(800)N2(900)

Eg:某科室9人,统计月收入在800~900间的人数,并用十11多分支判断条件后有多个出口,判断一次只能选择一个分支。多分支程序结构为:1条件属哪种情况?程序段1程序段n+m…...…...程序段nnn+m多分支1条件12例.多分支段内转移要求:键入0,转P0程序段键入1,转P1程序段……键入9,转P9程序段思路:①用比较指令配合直接转移指令实现CMP键入字符,‘0’JEP0CMP键入字符,‘1’JEP1……

②用转移地址表配合间接转移指令实现

多分支

例.多分支段内转移思路:①用比较指令配合直接转移指令实现②用13·486DATASEGMENTUSE16TABDWP0,P1,…,P9;汇编后自动装入相应的偏移地址MESGDB0DH,0AH,’strike0~9:$’DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXAGA:MOVAH,9MOVDX,OFFSETMESGINT21HMOVAH,1INT21HCMPAL,’0’JCAGACMPAL,’9’JAAGASUBAL,30HMOVZXBX,ALADDBX,BX;2×BX→BXMOVSI,OFFSETTABJMP[BX+SI];DS:[BX+SI]→IPP0:…P1:………P9:…CODEENDSENDBEG或:MOVBX,[BX+SI]JMPBX;BX→IP源程序清单:·486CMPA14

循环程序设计循环程序的组成:循环准备

循环体循环控制循环程序设计循环程151.循环程序的结构Y预置循环次数其他准备工作循环体循环减1计数退出循环结果为0?N(a)单循环结构(b)双循环结构结果为0?循环体内循环减1计数结果为0?外循环减1计数退出循环预置外循环次数其他准备工作预置内循环次数其他准备工作NNYY1.循环程序的结构Y预置循环次数循环体循环减1计数退出循环16Eg:假设从BUF单元开始为一个ASCII码字符串,找出其中的最大数送屏幕显示。循环程序设计思路:ASCⅡ码数为无符号数,无符号数的最小数为0YNN数据区首址→DS:BX无符号最小数→AL数据个数→CX[BX]→AL[BX]>=AL?BX+1→BXCX-1→CX显示结果返回DOSCX=0?YEg:假设从BUF单元开始为一个ASCII码字符串,找出17·486DATASEGMENTUSE16BUFDB'QWERTYUIOP123'

COUNTEQU$-BUF;统计串长度MAXDB'MAX=',?,0DH,0AH,'$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0

;无符号最小数0→ALLEABX,BUF

;串首址偏移量→BX

MOVCX,COUNT

;串长度→CX

LAST:CMP[BX],AL;比较JCNEXTMOVAL,[BX];大数→ALNEXT:INCBXLOOPLAST;循环计数MOVMAX+4,AL;最大数→MAX+4单元MOVAH,9MOVDX,OFFSETMAXINT21H;显示结果MOVAH,4CHINT21H;返回DOSCODEENDSENDBEG

源程序清单1:·486源程序清单18

·486DATASEGMENTUSE16BUFDB'QWERTYUIOP123'FLAGDB-1

;设置串结束标志MAXDB'MAX=',?,0DH,0AH,'$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0

;无符号最小数0→ALLEABX,BUF

;串首址偏移量→BXLAST:CMPBYTEPTR[BX],-1

;[BX]=串结束标志?JEDISP;是,转CMP[BX],ALJCNEXTMOVAL,[BX]

;大数→ALNEXT:INCBXJMPLASTDISP:MOVMAX+4,AL

;最大数→MAX+4单元MOVAH,9MOVDX,OFFSETMAXINT21H;显示结果MOVAH,4CHINT21H;返回DOSCODEENDSENDBEG

源程序清单2:·486JE19汇编程序设计举例

代码转换汇编程序设计举例代码转换20代码转换代码转换21常见的代码转换有:二进制数→显示二进制数→十进制数→显示二进制数→十六进制数→显示BCD码数→二进制数微机原理与接口技术第6章2-课件22代码转换A二进制数显示:例.把键盘输入的一位数(0~9),转换成等值二进数显示显示的格式要求如下:PleaseEnter:ERROR!PleaseEnter:9=00001001B代码转换A二进制数显示:显示的格式要求如下:PleaseE23代码转换思路:键盘缓冲区中是键入字符的ASCⅡ码。0~9的ASCⅡ码为30H~39H。二进制数每一位代码的判断:本程序采用两种格式设计源程序:一种是EXE文件编程格式,另一种是COM文件编程格式。RCL0SALROLCFCFCF代码转换思路:本程序采用两种格式设计源程序:RCL0SAL24程序框图:AL-30H→BL‘=’→屏幕,8→CX‘0’→屏幕‘1’→屏幕CX-1→CX‘B’→屏幕,返回DOSNN给出操作提示键盘输入→ALAL=‘0’~’9’?CF=?CX=0?BL左移一位Y显示错误信息

Y01程序框图:AL-30H→BL‘0’→屏幕‘1’→屏25.486DATASEGMENTUSE16MESG1DB'PleaseEnter!',0DH,0AH,'$'MESG2DB‘------Error!$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAH,9MOVDX,OFFSETMESG1INT21H;显示操作提示MOVAH,1INT21H;等待键入CMPAL,3AHJNCERROR;>'9'转CMPAL,30H[EXE格式程序清单]JC

ERROR;<'0'转SUBAL,30HMOVBL,AL

;BL=0~9的二进制数MOVAH,2MOVDL,'='INT21HCALLDISPMOVAH,2MOVDL,'B'INT21HJMPEXITERROR:MOVAH,9MOVDX,OFFSETMESG2INT21H

;显示错误信息EXIT:MOVAH,4CHINT21H.486[EXE格式26;---------------------------------DISPPROC;显示BL中的二进制数MOVCX,8LAST:MOVDL,'0'RCLBL,1JNCNEXTMOVDL,'1'NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDBEG[EXE格式程序清单];-----------------------------27

.486CODESEGMENTUSE16ASSUMECS:CODEORG100HSTART:JMPBEGMESG1DB'PleaseEnter!',0DH,0AH,'$'MESG2DB'---Error!$'BEG:MOVAH,9MOVDX,OFFSETMESG1INT21H;显示操作提示

MOVAH,1INT21H;等待键入CMPAL,3AHJNCERROR;>'9'转CMPAL,30HJCERROR;<'0'转SUBAL,30HMOVBL,AL

;BL=0~9的二进制数MOVAH,2MOVDL,'='INT21HCALLDISPMOVAH,2MOVDL,'B'INT21HJMPEXITMOVDX,OFFSETMESG2INT21H

;显示错误信息INT21HERROR:MOVAH,9EXIT:MOVAH,4CH[COM格式程序清单]MOVBL,AL28;-------------------------------DISPPROC;显示BL中的二进制数MOVCX,8LAST:MOVDL,'0‘RCLBL,1JNCNEXTMOVDL,'1'NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDSTART[COM格式程序清单];-----------------------------29问题:键入的是两位十进制数时,如何将该十进制数的二进制数显示在屏幕上?代码转换问题:键入的是两位十进制数时,如何将该十进制数的二进制数显示30二.二进制数→十六进制数显示算法:四位二进制数等值的十六进制数十六进制数ASCⅡ码算法0000~10011010~11110~9A~F30H~39H41H~46H四位二进制数+30H=等值的十六进制数ASCⅡ码四位二进制数+37H=等值的十六进制数ASCⅡ码代码转换二.二进制数→十六进制数显示算法:四位二进制数等值的十六进31编程技巧:8位二进制数截取高4位显示显示截取低4位XXXXXXXXXXXX0000XXXX000016进制数ASCⅡ码16进制数ASCⅡ码代码转换编程技巧:8位二进制数截取高4位显示显示截取低4位XXXX32例.设从BNUM单元开始,有4个16位的二进制数,要求把它们转换成16进制数,并送屏幕显示。

[程序清单].486DATASEGMENTUSE16BNUMDW0001001000110100B;1234HDW0101011001111000B;5678HDW0001101000101011B;1A2BHDW0011110001001101B;3C4DHBUFDB4DUP(?),‘H$’;输出缓冲区COUNTDB4DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA例.设从BNUM单元开始,有4个16位的二进制数,要求[程33BEG:MOVAX,DATAMOVDS,AXMOVCX,4MOVBX,OFFSETBNUMAGA:MOVDX,[BX]

SALEDX,16

CALLN2_16ASCMOVAH,9MOVDX,OFFSETBUFINT21H

;显示一个16进数ADDBX,2;地址加2LOOPAGAMOVAH,4CHINT21H;二进数→十六进数ACSII码N2_16ASCPROCMOVSI,OFFSETBUF

;输出缓冲区地址→SIMOVCOUNT,4LAST:ROLEDX,4

ANDDL,0FHCMPDL,10JCNEXTADDDL,7NEXT:ADDDL,30HMOV[SI],DLINCSI;地址加1DECCOUNT;计数JNZLASTRETN2_16ASCENDPCODEENDSENDBEG[EXE格式程序清单];二进数→十六进数ACSII码[EXE格式程序清单]34代码转换三.BCD码→二进制数例.4位BCD码数→二进制数显示算法:设4位BCD码数列为:N3N2N1N0,等值二进制数=N3×1000+N2×100+N1×10+N0=(((0×10+N3)×10+N2)×10+N1)×10+N0编程考虑:4位BCD码最大为9999H,等值的二进制数最大为16位(超过8位),而且D15位肯定为0分离出BCD千位N3,百位N2,十位N1,个位N0设计一个AX×10+BX→AX的子程序供调用,首次调用时,令AX=0,BX=N3,共调用4次,则AX中即为等值的二进制数。代码转换三.BCD码→二进制数算法:设4位BCD码数列为:N35·486CODESEGMENTUSE16ASSUMECS:CODENUMDW4567H

;BCD码表示BEG:MOVCX,4;4次调用

MOVAX,0AGA:ROLNUM,4MOVBX,NUMANDBX,000FH

IMULAX,10ADDAX,BXLOOPAGA显示AX中的二进制数返回DOSCODEENDSENDBEG本例数据放在代码段!本例:因为AX的D15=0,是正的有符号数,所以可用IMUL指令AX×10+BX→AX[EXE格式程序清单]·486本例数据放在代码段36代码转换三.二进制数→十进制数方法:比较法,恢复余数法,除法8位二进制数最大为11111111,等值的十进制数为255,

比较法的关键:判断某二进制数(假设为BEN单元的内容)包含几个100,几个10,几个1

1.8位二进制数→十进制数,比较法:DL+1→DL(BEN)-10→BEN(BEN)>=100?NY(BEN)>=10?NY0→DLDL+1→DL(BEN)-100→BENDL+30H→屏幕0→DLDL+30H→屏幕(BEN)+30H→屏幕返回DOS代码转换三.二进制数→十进制数方法:比较法,恢复余数法,除法37.486CMPDISPMACRONNLOCALLAST,NEXTMOVDL,0;DL清0LAST:CMPBEN,NN;比较JCNEXT;BEN<NN转INCDL;DL加1SUBBEN,NNJMPLASTNEXT:ADDDL,30HMOVAH,2INT21H;显示ENDM

CODESEGMENTUSE16ASSUMECS:CODEBENDB10101110B;=174BEG:CMPDISP100CMPDISP10CMPDISP1MOVAH,4CHINT21HCODEENDSENDBEG[EXE格式程序清单]CODESEGMENTUSE16[EXE格式程序清38代码转换2.8位二进制数→十进制数,恢复余数法(请自学)3.8位二进制数→十进制数,“除权值求商”的算法分析把11110101B→十进制数245算法:①依次用权值100,10,1去除上次的余数,直到余数为0时停止。②每次除法所得的商数顺序排列,即为十进制数。

111101011100100110010010110110……2权值(100)10101……51011010……余数为0时止1权值(1)100……4

10110110101011010权值(10)10代码转换2.8位二进制数→十进制数,恢复余数法(请自学)把39例.

将NUM单元中的16位二进制数,转换成十进制数显示。思路:16位二进制数:最大为1……1,其等值的十进制数为65535,故应判断NUM单元的数包含几个10000,几个1000,几个100,几个10,几个1设计一个XX÷YY并显示商值的宏指令供调用,XX为32位,YY为16为二进制数。例.思路:40DX,AX为被除数·486DIVIDEMACROXX,YYMOVAX,XXMOVDX,0MOVCX,YY;CX为除数DIVCX

;AX=商,且<1010B,DX=余数MOVAH,0EHADDAL,30HINT10HENDMCODESEGMENTUSE16ASSUMECS:CODENUMDW65530;汇编后为二进制数BEG:DIVIDENUM,10000DIVIDEDX,1000①本题在代码段中设置数据,这是COM格式?EXE格式?②如果改为:BEG:MOVBX,OFFSETNUMDIVIDE[BX],10000……是错误的,为什么?DIVIDEDX,100DIVIDEDX,10DIVIDEDX,1MOVAH,4CHINT21HCODEENDSENDBEG显示一位商值不能颠倒分析:应写成:DIVIDECS:[BX],10000[程序清单]DX,AX为被除数·48641代码转换4.8位二进制数→十进制数,“除十取余”的算法分析

把11110101→十进制数245算法:①N被(10)10除,商再被(10)10除……,直到商数为0时止。②每次所得的余数按倒序方式排列显示。编程技巧:每次除法的余数→栈,除法结束后,再从堆栈中依次弹出余数+30H→屏。11000

11110101101010101010101……51010即(10)1010

110001010100……410100……商为0时止

100010……21010代码转换4.8位二进制数→十进制数,“除十取余”的算法分析428位~32位二进制数转换成十进制数,通用的除法求余框图:(书程序,自学)设N为待转换的8位~32位二进制数EAX=商,EDX=余数,且余数肯定<1010B统计除法的次数CX=0?弹出余数+30H→显示CX-1→CXN→EAX除数1010B→EBX0→CX计数器0→EDX(EDX,EAX)÷EBX余数→堆栈CX+1→CX商为0?转换完毕YYNN8位~32位二进制数转换成十进制数,通用的除法求余框图:E43CODESEGMENTUSE16ASSUMECS:CODEBENDB10101110B;=174BEG:CMPDISP100CMPDISP10CMPDISP1MOVAH,4CHINT21HCODEENDSENDBEG代码转换CODESEGMENTUSE16代码转换44.486CODESEGMENTUSE16ASSUMECS:CODEBENDB10101110B;=174BEG:MOVBL,100CALLCMPDISPMOVBL,10CALLCMPDISPMOVBL,1CALLCMPDISPMOVAH,4CHINT21H代码转换.486代码转换45

CMPDISPPROCMOVDL,0;DL清0LAST:CMPBEN,BL;比较JCNEXT;BEN<BX转INCDL;DL加1SUBBEN,BL;BEN-BX→BENJMPLASTNEXT:ADDDL,30HMOVAH,2INT21H;显示RETCMPDISPENDPCODEENDSENDBEG代码转换CMPDISPPROC代码转46第6章汇编语言程序设计

用汇编语言编程属结构化程序设计。需按照结构化的思想来进行汇编程序的设计第6章汇编语言程序设计用汇编语言编程属结构化程47分析题意,确定算法根据算法画出程序框图根据框图编写程序上机调试程序执行程序按照自上而下的设计方法,设计一个汇编程序的步骤:分析题意,确定算法按照自上而下的设计方法,设计一个汇编程序的48顺序程序分支程序循环程序从结构上来讲,一般的汇编程序可分为:顺序程序从结构上来讲,一般的汇编程序可分为:49Eg:从键盘输入一个字符并存储到字节变量BUF单元中.分析:用DOS功能调用完成键入,输入的字符保存在AL寄存器中将AL中的内容存到定义在数据段的变量BUF所指单元中

顺序程序设计Eg:从键盘输入一个字符并存储到字节变量BUF单元中.分析:50 .486DATASEGMENTUSE16

BUF DB ?DATAENDS源程序清单:CODE SEGMENTUSE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV AH,1 INT 21H;AL=键入字符的 MOV BUF,ALASIIC码 MOV AH,4CH INT 21HCODE ENDS END BEG .486源程序清单:CODE SEGMENTUS51

分支程序设计

转移指令可用来实现分支程序设计分支程序分三种:简单分支

复合分支多分支分52

简单分支即两路分支,该分支程序结构为:条件满足否?程序段1程序段2YN简单分支53

Eg:将BX寄存器的内容以二进制数格式显在屏幕上BX=1110010011100110B

简单分支

RCL0SALROLCFCFCFEg:将BX寄存器的内容以二进制数格式显在屏幕上BX=154·486CODESEGMENTUSE16ASSUME

CS:CODEBEG:MOVBX,5678HMOVCX,16LAST:MOVAL,’0’ROLBX,1JNCNEXT

MOVAL,’1’NEXT:MOVAH,0EH

INT10HLOOPLASTMOVAH,4CHINT21H

CODEENDSENDBEGADCAL,0数→BX,16→CXC标=?‘1’→AL调BIOS.0EHCX-1→CXCX=0‘0’→ALBX左移一位10NY返DOS源程序清单:·486ADCAL,055复合分支判断的条件是复合条件,称复合判断复合分支程序结构为:条件1和条件2...满足否?程序段1程序段2YN复合分支条件156Eg:某科室9人,统计月收入在800~900间的人数,并用十进制数显示

复合分支

分析:月收入是无符号数,对一批数处理应该用间址。数轴:··

N1(800)N2(900)

Eg:某科室9人,统计月收入在800~900间的人数,并用十57多分支判断条件后有多个出口,判断一次只能选择一个分支。多分支程序结构为:1条件属哪种情况?程序段1程序段n+m…...…...程序段nnn+m多分支1条件58例.多分支段内转移要求:键入0,转P0程序段键入1,转P1程序段……键入9,转P9程序段思路:①用比较指令配合直接转移指令实现CMP键入字符,‘0’JEP0CMP键入字符,‘1’JEP1……

②用转移地址表配合间接转移指令实现

多分支

例.多分支段内转移思路:①用比较指令配合直接转移指令实现②用59·486DATASEGMENTUSE16TABDWP0,P1,…,P9;汇编后自动装入相应的偏移地址MESGDB0DH,0AH,’strike0~9:$’DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXAGA:MOVAH,9MOVDX,OFFSETMESGINT21HMOVAH,1INT21HCMPAL,’0’JCAGACMPAL,’9’JAAGASUBAL,30HMOVZXBX,ALADDBX,BX;2×BX→BXMOVSI,OFFSETTABJMP[BX+SI];DS:[BX+SI]→IPP0:…P1:………P9:…CODEENDSENDBEG或:MOVBX,[BX+SI]JMPBX;BX→IP源程序清单:·486CMPA60

循环程序设计循环程序的组成:循环准备

循环体循环控制循环程序设计循环程611.循环程序的结构Y预置循环次数其他准备工作循环体循环减1计数退出循环结果为0?N(a)单循环结构(b)双循环结构结果为0?循环体内循环减1计数结果为0?外循环减1计数退出循环预置外循环次数其他准备工作预置内循环次数其他准备工作NNYY1.循环程序的结构Y预置循环次数循环体循环减1计数退出循环62Eg:假设从BUF单元开始为一个ASCII码字符串,找出其中的最大数送屏幕显示。循环程序设计思路:ASCⅡ码数为无符号数,无符号数的最小数为0YNN数据区首址→DS:BX无符号最小数→AL数据个数→CX[BX]→AL[BX]>=AL?BX+1→BXCX-1→CX显示结果返回DOSCX=0?YEg:假设从BUF单元开始为一个ASCII码字符串,找出63·486DATASEGMENTUSE16BUFDB'QWERTYUIOP123'

COUNTEQU$-BUF;统计串长度MAXDB'MAX=',?,0DH,0AH,'$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0

;无符号最小数0→ALLEABX,BUF

;串首址偏移量→BX

MOVCX,COUNT

;串长度→CX

LAST:CMP[BX],AL;比较JCNEXTMOVAL,[BX];大数→ALNEXT:INCBXLOOPLAST;循环计数MOVMAX+4,AL;最大数→MAX+4单元MOVAH,9MOVDX,OFFSETMAXINT21H;显示结果MOVAH,4CHINT21H;返回DOSCODEENDSENDBEG

源程序清单1:·486源程序清单64

·486DATASEGMENTUSE16BUFDB'QWERTYUIOP123'FLAGDB-1

;设置串结束标志MAXDB'MAX=',?,0DH,0AH,'$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0

;无符号最小数0→ALLEABX,BUF

;串首址偏移量→BXLAST:CMPBYTEPTR[BX],-1

;[BX]=串结束标志?JEDISP;是,转CMP[BX],ALJCNEXTMOVAL,[BX]

;大数→ALNEXT:INCBXJMPLASTDISP:MOVMAX+4,AL

;最大数→MAX+4单元MOVAH,9MOVDX,OFFSETMAXINT21H;显示结果MOVAH,4CHINT21H;返回DOSCODEENDSENDBEG

源程序清单2:·486JE65汇编程序设计举例

代码转换汇编程序设计举例代码转换66代码转换代码转换67常见的代码转换有:二进制数→显示二进制数→十进制数→显示二进制数→十六进制数→显示BCD码数→二进制数微机原理与接口技术第6章2-课件68代码转换A二进制数显示:例.把键盘输入的一位数(0~9),转换成等值二进数显示显示的格式要求如下:PleaseEnter:ERROR!PleaseEnter:9=00001001B代码转换A二进制数显示:显示的格式要求如下:PleaseE69代码转换思路:键盘缓冲区中是键入字符的ASCⅡ码。0~9的ASCⅡ码为30H~39H。二进制数每一位代码的判断:本程序采用两种格式设计源程序:一种是EXE文件编程格式,另一种是COM文件编程格式。RCL0SALROLCFCFCF代码转换思路:本程序采用两种格式设计源程序:RCL0SAL70程序框图:AL-30H→BL‘=’→屏幕,8→CX‘0’→屏幕‘1’→屏幕CX-1→CX‘B’→屏幕,返回DOSNN给出操作提示键盘输入→ALAL=‘0’~’9’?CF=?CX=0?BL左移一位Y显示错误信息

Y01程序框图:AL-30H→BL‘0’→屏幕‘1’→屏71.486DATASEGMENTUSE16MESG1DB'PleaseEnter!',0DH,0AH,'$'MESG2DB‘------Error!$'DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAH,9MOVDX,OFFSETMESG1INT21H;显示操作提示MOVAH,1INT21H;等待键入CMPAL,3AHJNCERROR;>'9'转CMPAL,30H[EXE格式程序清单]JC

ERROR;<'0'转SUBAL,30HMOVBL,AL

;BL=0~9的二进制数MOVAH,2MOVDL,'='INT21HCALLDISPMOVAH,2MOVDL,'B'INT21HJMPEXITERROR:MOVAH,9MOVDX,OFFSETMESG2INT21H

;显示错误信息EXIT:MOVAH,4CHINT21H.486[EXE格式72;---------------------------------DISPPROC;显示BL中的二进制数MOVCX,8LAST:MOVDL,'0'RCLBL,1JNCNEXTMOVDL,'1'NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDBEG[EXE格式程序清单];-----------------------------73

.486CODESEGMENTUSE16ASSUMECS:CODEORG100HSTART:JMPBEGMESG1DB'PleaseEnter!',0DH,0AH,'$'MESG2DB'---Error!$'BEG:MOVAH,9MOVDX,OFFSETMESG1INT21H;显示操作提示

MOVAH,1INT21H;等待键入CMPAL,3AHJNCERROR;>'9'转CMPAL,30HJCERROR;<'0'转SUBAL,30HMOVBL,AL

;BL=0~9的二进制数MOVAH,2MOVDL,'='INT21HCALLDISPMOVAH,2MOVDL,'B'INT21HJMPEXITMOVDX,OFFSETMESG2INT21H

;显示错误信息INT21HERROR:MOVAH,9EXIT:MOVAH,4CH[COM格式程序清单]MOVBL,AL74;-------------------------------DISPPROC;显示BL中的二进制数MOVCX,8LAST:MOVDL,'0‘RCLBL,1JNCNEXTMOVDL,'1'NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDSTART[COM格式程序清单];-----------------------------75问题:键入的是两位十进制数时,如何将该十进制数的二进制数显示在屏幕上?代码转换问题:键入的是两位十进制数时,如何将该十进制数的二进制数显示76二.二进制数→十六进制数显示算法:四位二进制数等值的十六进制数十六进制数ASCⅡ码算法0000~10011010~11110~9A~F30H~39H41H~46H四位二进制数+30H=等值的十六进制数ASCⅡ码四位二进制数+37H=等值的十六进制数ASCⅡ码代码转换二.二进制数→十六进制数显示算法:四位二进制数等值的十六进77编程技巧:8位二进制数截取高4位显示显示截取低4位XXXXXXXXXXXX0000XXXX000016进制数ASCⅡ码16进制数ASCⅡ码代码转换编程技巧:8位二进制数截取高4位显示显示截取低4位XXXX78例.设从BNUM单元开始,有4个16位的二进制数,要求把它们转换成16进制数,并送屏幕显示。

[程序清单].486DATASEGMENTUSE16BNUMDW0001001000110100B;1234HDW0101011001111000B;5678HDW0001101000101011B;1A2BHDW0011110001001101B

温馨提示

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

评论

0/150

提交评论