为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

实验九_数码转换

2013-11-26 8页 pdf 242KB 59阅读

用户头像

is_847375

暂无简介

举报
实验九_数码转换 北京工业大学 09 级电子信息工程实验班 1 实验九 数码转换 一、 实验目的 1. 掌握计算机常用数据编码之间的相互转换方法。 2. 进一步熟悉 DEBUG 软件的使用方法。 二、 实验内容 1. ASCⅡ码转换为非压缩型 BCD码 编写并调试正确的汇编语言源程序,使之实现:设从键盘输入一串十进制数,存入 DATA1单元中,按回车停止键盘输入。将其转换成非压缩型(非组合型)BCD码后, 再存入 DATA2 开始的单元中。若输入的不是十进制数,则相应单元中存放 FFH。调 试程序,用 ...
实验九_数码转换
北京工业大学 09 级电子信息工程实验班 1 实验九 数码转换 一、 实验目的 1. 掌握计算机常用数据编码之间的相互转换方法。 2. 进一步熟悉 DEBUG 软件的使用方法。 二、 实验内容 1. ASCⅡ码转换为非压缩型 BCD码 编写并调试正确的汇编语言源程序,使之实现:设从键盘输入一串十进制数,存入 DATA1单元中,按回车停止键盘输入。将其转换成非压缩型(非组合型)BCD码后, 再存入 DATA2 开始的单元中。若输入的不是十进制数,则相应单元中存放 FFH。调 试程序,用 D 命令检查执行结果。 2. BCD码转换为二进制数 编写并调试正确的汇编语言源程序,使之将一个 16 位存储单元中存放的 4 位 BCD 码 DATA1,转换成二进制数存入 DATA2字单元中调试程序,用 D命令检查执行结果。 3. 十六进制数转换为 ASCⅡ码 编写并调试正确的汇编语言源程序,使之将内存 DATA1字单元中存放的 4位十六进 制数,转换为 ASCⅡ码后分别存入 DATA2 为起始地址的 4 个单元中,低位数存在低 地址的字节中,并在屏幕上显示出来。 三、 实验预习 1. 复习材料中有关计算机数据编码部分的内容。 2. 按要求编写程序。 四、 实验步骤 1. 编辑源文件,经汇编连接产生 EXE文件。 2. 用 DEBUG调试、检查、修改程序。 实验内容(一) ASCⅡ码转换为非压缩型 BCD码 源代码: STACK SEGMENT PARA STACK 'STACK' DB 256 DUP(?) STACK ENDS DATA SEGMENT PARA 'DATA' ;定义数据段 DATA1 DB 21,?,21 DUP(?) ;内存中建立缓冲区,第一个字节保存最大字符数, ;第二个字节存放实际输入字符数(回车除外), ;DOS返回时自动填入,第三个字节开始存放输入的字符 DATA2 DB 21 DUP(?) DATA ENDS CODE SEGMENT ;定义代码段 ASSUME SS:STACK,CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA DX,DATA1 ;规定:DX存放输入字符串的缓冲区首地址 MOV AH,0AH ;字符串输入 INT 21H LEA SI,DATA1 ;SI 存放输入字符串的缓冲区 DATA1首地址 LEA DI,DATA2 ;DI 存放 DATA2首地址 北京工业大学 09 级电子信息工程实验班 2 INC SI MOV CL,[SI] ;取输入字符串长度 INC SI ;指向第一个输入字符 LP1: MOV AL,[SI] SUB AL,30H ;输入的字符存为 ASC码 CMP AL,0 ;若 AL<0,跳转到 LP2 JL LP2 CMP AL,9 ;若 AL>9,跳转到 LP2 JG LP2 MOV BL,AL ;将 AL->BL MOV [DI],BL ;将结果存到 DATA2 开始的单元中 INC DI INC SI DEC CL JMP LP1 LP2: MOV AL,0FFH ;若输入的不是十进制数,在相应的单元中存放 FFH ;以字母开头的十六进制数前面需加'0' MOV BL,AL ;将 AL->BL MOV [DI],BL INC DI INC SI DEC CL ;CL=CL-1 JNZ LP1 ;CL=0,执行 LP3中的语句 LP3: MOV AH,4CH INT 21H CODE ENDS END START 调试过程: 备注:(1)输入的数据在内存中是以 ASCⅡ码形式存储的。 (2)OAH 号功能使用说明:从键盘输入一串字符并把它存入用户指定的缓冲区。缓冲 区的第一个字节单元为允许键入字符的个数 N,第二个字节单元为实际输入字符个 数,第三个字节单元开始存放键入字符的 ASCⅡ码,之后字节单元存放结束标志 0DH, 故需要开辟的缓冲区空间应为 N+3。 实验内容(二) BCD码转换为二进制数 北京工业大学 09 级电子信息工程实验班 3 源代码: STACK SEGMENT DB 256 DUP(?) STACK ENDS DATA SEGMENT DATA1 DW 1234H DATA2 DW ? DATA ENDS CODE SEGMENT ASSUME SS:STACK,CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX XOR BX,BX ;累加单元清 0(BX=0) MOV SI,0AH ;设置乘数 10 MOV CL,4 MOV CH,3 ;设置循环次数 3 MOV AX,DATA1 ;取十进制数 LP: ROL AX,CL ;取数字 MOV DI,AX ;保存当前 AX值 AND AX,0FH ;屏蔽高位 ADD AX,BX ;累加 MUL SI MOV BX,AX MOV AX,DI DEC CH ;循环次数减 1 JNZ LP ROL AX,CL ;取个位数字 AND AX,0FH ;屏蔽高位 ADD AX,BX ;累加 MOV DATA2,AX MOV AH,4CH INT 21H CODE ENDS END START 调试过程: 转换过程:(1234H)16(0001 0010 0011 0100)2(1234)10(04D2)16 实验内容(三) 十六进制数转换为 ASCⅡ码 北京工业大学 09 级电子信息工程实验班 4 源代码: STACK SEGMENT DB 256 DUP(?) STACK ENDS DATA SEGMENT DATA1 DB 12H,02CH ;4 位十六进制数 DATA2 DB 5 DUP(?) ;存放 ASC码 DATA3 DB 4 DUP(?) ;4 位十六进制数分别存放在 DATA3的 4个字节中 LFCR DB 0DH,0AH,'$' DATA ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX LEA SI,DATA1 LEA DI,DATA3 MOV CL,2 ;循环 2次 LP1: MOV AL,[SI] ;取 2位十六进制数 AND AL,0F0H ;屏蔽低四位 ROR AL,4 ;右移 4位 MOV [DI],AL ;高位数存放在高地址字节中 INC DI MOV AL,[SI] ;取 2位十六进制数 AND AL,0FH ;屏蔽高四位 MOV [DI],AL ;低位数存放在低地址字节中 INC SI INC DI DEC CL JNZ LP1 LEA SI,DATA3 ;将 DATA3的首地址偏移量赋给 SI LEA DI,DATA2 ;将 DATA2的首地址偏移量赋给 DI MOV CL,4 ;循环 4次 LP2: MOV AL,[SI] ;取 DATA3中的十六进制数 CMP AL,9 JG LP3 ;若 AL>9,跳转到 LP3 ADD AL,30H ;十六进制数 0-9->ASC 码,要加 30H JMP LP4 LP3: ADD AL,37H ;十六进制数 A-F->ASC码,要加 37H LP4: MOV [DI],AL ;将 ASC码依次存入 DATA2中 INC DI INC SI DEC CL JNZ LP2 MOV AL,'$' ;设置显示结束标志 北京工业大学 09 级电子信息工程实验班 5 MOV [DI+1],AL ;存入 DATA2中 LEA DX,LFCR MOV AH,09H INT 21H ;回车换行 MOV DX,OFFSET DATA2 MOV AH,09H INT 21H ;显示 ASC码 MOV AH,4CH INT 21H CODE ENDS END START 调试过程: 五、 实验习题与思考 1. 编程实现:从键盘上输入两位十六进制数,转换成十进制数后在屏幕上显示出来。 源代码: STACK SEGMENT DB 256 DUP(?) STACK ENDS DATA SEGMENT DATA1 DB 5,?,2 DUP(?) DATA2 DB 2 DUP(?) DATA3 DB 2 DUP(?) DATA ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX 北京工业大学 09 级电子信息工程实验班 6 LEA DX,DATA1 MOV AH,0AH INT 21H ;输入字符串 LEA SI,DATA1+2 LEA DI,DATA2 MOV CL,2 ;将 ASC码转换为十六进制数 LP1: MOV AL,[SI] SUB AL,30H CMP AL,9 JA LP2 MOV [DI],AL INC DI INC SI DEC CL JZ LP3 JNZ LP1 LP2: SUB AL,7 MOV [DI],AL INC DI INC SI DEC CL JNZ LP1 ;将十六进制数转换成十进制数,并保存 LP3: LEA DI,DATA2 MOV AL,[DI] MOV BL,[DI+1] MOV CL,4 SHL AL,CL ADD AL,BL MOV [DI],AL LEA SI,DATA3 XOR AH,AH MOV CL,100 DIV CL ;AH=AX%100,AL=AX/100 MOV [SI],AL ;保存百位数 MOV AL,AH XOR AH,AH MOV CL,10 DIV CL MOV [SI+1],AL ;保存十位数 MOV [SI+2],AH ;保存个位数 ;屏幕显示十进制数 LP4: MOV DL,[SI] ;取百位数送显 北京工业大学 09 级电子信息工程实验班 7 OR DL,30H MOV AH,02H INT 21H MOV DL,[SI+1] ;取十位数送显 OR DL,30H MOV AH,02H INT 21H MOV DL,[SI+2] ;取个位数送显 OR DL,30H MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 调试过程: 输入: 输出: 2. 十进制转换为七段码。 提示:为了在七段显示器上显示十进制数,需要把十进制数转换为七段代码。转换 可采用查法。设需要转换的十进制数已存放在起始地址为 DATA1区域中,七段码 转换表存放在起始地址为 TABLE表中,转换结果存放到起始地址为 DATA2区域。若 待转换的数不是十进制数,则相应结果单元内容为 00H。 源代码: STACK SEGMENT DB 256 DUP(?) STACK ENDS DATA SEGMENT DATA1 DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,'A','B','C','$' TABLE DB 00H,40H,01H,79H,02H,24H,03H,30H,04H,19H,05H,12H,06H,02H, 07H,78H,08H,00H,09H,18H,0AH,08H,0BH,03H,0CH,46H,0DH,21H, 0EH,06H,0FH,0EH ;实际数据定义必须在同一行 DATA2 DB 16 DUP(0) 北京工业大学 09 级电子信息工程实验班 8 COUNT EQU 2 DATA ENDS CODE SEGMENT ASSUME SS:STACK,DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX LEA SI,DATA1 LEA BX,DATA2 LEA DI,TABLE XOR AH,AH LP1: MOV AL,[SI] ;外循环 DATA1指向下一个 INC SI MOV CX,16 ;内循环 TABLE 16次 LP2: CMP [DI],AL JE LP3 ADD DI,COUNT ;内循环 TABLE指向下一组 DEC CX JNZ LP2 MOV BYTE PTR[BX],00H ;若不是十进制数,则结果保存为 00H INC BX CMP AL,'$' ;设置结束标志 JNZ LP1 JZ LP4 LP3: MOV AL,[DI+1] MOV [BX],AL ;转换结果保存在 DATA2中 INC BX LEA DI,TABLE CMP CL,0 JNZ LP1 LP4: MOV AH,4CH INT 21H CODE ENDS END START 调试过程:
/
本文档为【实验九_数码转换】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索