《微机实验九数码转换.pdf》由会员分享,可在线阅读,更多相关《微机实验九数码转换.pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微机实验九微机实验九 数码转换数码转换实验目的1.掌握计算机常用数据编码之间的相互转换方法。2.进一步熟悉 DEBUG 软件的使用方法一、实验内容1.ACSII 码转换为非压缩型 BCD 码编写并调试正确的汇编语言源程序,使之实现:设从键盘输入一串十进制数,存入 DATA1单元中,按回车停止键盘输入。将其转换成非压缩性(非组合型)BCD 码后,再存入DATA2开始的单元中。若输入的不是十进制数,则相应单元中存放FFH。调试程序,用D 命令检查执行结果。实验代码:1.DATA SEGMENT;定义数据段DATA1 DB 21,21 DUP();建立一个内存区,第二个数存放最大字符数DATA2 D
2、B 21 DUP();DATA2区定义DATA ENDSSTACK SEGMENT STACK;定义堆栈段DB 100 DUP()STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA;程序初始化MOV DS,AX;程序初始化LEA DX,DATA1;DX存放 DATA1的首地址MOV AH,0AH;从键盘中输入字符串INT 21H;调用 INT21 功能LEA SI,DATA1;SI存放 DATA1的首地址INC SI;指向 LP1 循环次数MOV CL,SI;存放 LP1 的循环次数MOV CH,0INC
3、 SI;指向所输入的数LEA DI,DATA2;DI存放 DATA2的首地址LP1:MOV AL,SI;将输入的数存放到 AL 中CMP AL,30H;AL 与 30H 比较JC LP2;AL39H,则跳 LP2(JG 与 JA 比较)SUB AL,30H;将输入的字符转换成 ASCII 码MOV BL,AL;ALBLSAVE:MOV DI,BL;BLDS:DIINC SI;SI=SI+1INC DI;DI=DI+1LOOP LP1;循环 LP1JMP EXIT;跳转到 EXITLP2:MOV BL,0FFH;如果输入的不是十进制数,则在相应的单元中存放FFHJMP SAVE;跳转到 SAVE
4、EXIT:MOV AH,4CHINT 21HCODE ENDSEND START2.BCD 码转换为二进制码编写并调试正确的汇编语言源程序,使之将一个 16 位存储单元中存放的 4 位 BCD 码DATA1,转换成 2 进制后存入 DATA2字单元中。调试程序,用D 命令检查执行结果。代码:STACK SEGMENTDB 256 DUP()STACK ENDSDATA SEGMENTDATA1 DW1234HDATA2 DWDATAENDSCODESEGMENTASSUME SS:STACK,CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXXORBX,BX;累加单
5、元清 0(BX=0)MOVSI,0AH;设置乘数 10MOVCL,4MOVCH,3;设置循环次数 3MOVAX,DATA1;取十进制数LP:ROLAX,CL;取数字MOVDI,AX;保存当前 AX 值ANDAX,0FH;屏蔽高位ADDAX,BX;累加MULSIMOVBX,AXMOVAX,DIDECCH;循环次数减 1JNZLPROLAX,CL;取个位数字ANDAX,0FH;屏蔽高位ADDAX,BX;累加MOVDATA2,AXMOVAH,4CHINT21HCODEENDSENDSTART3.十六进制数转换为 ACSII 码编写并调试正确的汇编语言源程序,使之将内存 DATA1字单元中存放的 4
6、位十六进制数,转换为ASCII 码后分别存入 DATA2为起始地址的 4 个单元中,低位数存在低地址的字节中,并在屏幕上显示出。代码:STACK SEGMENTDB 256 DUP()STACK ENDSDATA SEGMENTDATA1 DB 12H,02CH;4位十六进制数DATA2 DB 5 DUP();存放 ASC 码DATA3 DB 4 DUP();4位十六进制数分别存放在DATA3的 4 个字节中LFCR DB 0DH,0AH,$DATA ENDSCODE SEGMENTASSUME SS:STACK,DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,A
7、XLEA SI,DATA1LEA DI,DATA3MOV CL,2;循环 2 次LP1:MOV AL,SI;取 2 位十六进制数AND AL,0F0H;屏蔽低四位ROR AL,4;右移 4 位MOV DI,AL;高位数存放在高地址字节中INC DIMOV AL,SI;取 2 位十六进制数AND AL,0FH;屏蔽高四位MOV DI,AL;低位数存放在低地址字节中INC SIINC DIDEC CLJNZ LP1LEA SI,DATA3;将 DATA3的首地址偏移量赋给 SILEA DI,DATA2;将 DATA2的首地址偏移量赋给 DIMOV CL,4;循环 4 次LP2:MOV AL,SI;
8、取 DATA3中的十六进制数CMP AL,9JG LP3;若 AL9,跳转到 LP3ADD AL,30H;十六进制数 0-9-ASC 码,要加 30HJMP LP4LP3:ADD AL,37H;十六进制数 A-F-ASC 码,要加 37HLP4:MOV DI,AL;将 ASC 码依次存入 DATA2中INC DIINC SIDEC CLJNZ LP2MOV AL,$;设置显示结束标志MOV DI+1,AL;存入 DATA2中LEA DX,LFCRMOV AH,09HINT 21H;回车换行MOV DX,OFFSET DATA2MOV AH,09HINT 21H;显示 ASC 码MOV AH,4
9、CHINT 21HCODE ENDSEND START二、实验步骤1.编辑源文件,经汇编连接产生EXE 文件。2.用 DEBUG 调试、检查、修改程序。3.三、实验习题与思考1.编程实现:从键盘上输入两位十六进制数,转换成十进制数后显示在屏幕上。源代码:STACK SEGMENTDB256 DUP()STACK ENDSDATASEGMENTDATA1 DB5,2 DUP()DATA2 DB2 DUP()DATA3 DB2 DUP()DATAENDSCODESEGMENTASSUMESS:STACK,DS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXLEADX,DA
10、TA1MOVAH,0AHINT21H;输入字符串LEASI,DATA1+2LEADI,DATA2MOVCL,2LP1:MOVAL,SISUBAL,30HCMPAL,9JALP2MOVDI,ALINCDIINCSIDECCLJZLP3JNZLP1LP2:SUBAL,7MOVDI,ALINCDIINCSIDECCLJNZLP1LP3:LEADI,DATA2MOVAL,DI;将 ASC 码转换为十六进制数;将十六进制数转换成十进制数,并保存MOVBL,DI+1MOVCL,4SHLAL,CLADDAL,BLMOVDI,ALLEASI,DATA3XORAH,AHMOVCL,100DIVCLMOVSI,A
11、LMOVAL,AHXORAH,AHMOVCL,10DIVCLMOVSI+1,ALMOVSI+2,AH;屏幕显示十进制数LP4:MOVDL,SIORDL,30HMOVAH,02HINT21HMOVDL,SI+1ORDL,30HMOVAH,02HINT21HMOVDL,SI+2ORDL,30H;AH=AX%100,AL=AX/100;保存百位数;保存十位数;保存个位数;取百位数送显;取十位数送显;取个位数送显MOVAH,02HINT21HMOVAH,4CHINT21HCODEENDSENDSTART运行图:输入:输出:2.十进制数转换为七段码。为了在七段显示器上显示十进制数,需要把十进制数转换为七
12、段代码。转换可采用查表法。设需要转换的十进制数已存放在起始地址为DATA1区域中,七段代码转换表存放在起始地址为 TABLE表中,转换结果存放到起始地址为DATA2区域。若待转换的数不是十进制数,则相应结果单元内容为00H。源代码:STACK SEGMENTDB256 DUP()STACK ENDSDATASEGMENTDATA1 DB0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,A,B,C,$TABLE DB00H,40H,01H,79H,02H,24H,03H,30H,04H,19H,05H,12H,06H,02H,07H,78H,08H,00H,09H,18
13、H,0AH,08H,0BH,03H,0CH,46H,0DH,21H,0EH,06H,0FH,0EH;实际数据定义必须在同一行DATA2 DB16 DUP(0)COUNT EQU2DATAENDSCODESEGMENTASSUMESS:STACK,DS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXLEASI,DATA1LEABX,DATA2LEADI,TABLEXORAH,AHLP1:MOVAL,SI;外循环 DATA1指向下一个INCSIMOVCX,16;内循环 TABLE 16次LP2:CMPDI,ALJELP3ADDDI,COUNT;内循环 TABLE指向下一组DECCXJNZLP2MOVBYTE PTRBX,00H;若不是十进制数,则结果保存为00HINCBXCMPAL,$;设置结束标志JNZLP1JZLP4LP3:MOVAL,DI+1MOVBX,AL;转换结果保存在 DATA2中INCBXLEADI,TABLECMPCL,0JNZLP1LP4:MOVAH,4CHINT21HCODEENDSEND START运行图:
限制150内