微机实验报告4 数码转换程序实验

     

班级  软件工程16-1  学号  3162052051116  姓名  张识虔  同组实验者              

实验名称             数码转换程序实验                     日期 2018 11 14

一、实验目的:

掌握不同进制数及编码相互转换的程序设计方法

二、实验环境:

PC 微机一台、TD-PITD 实验系统一套。

三、实验内容:

 

计算机输入设备输入的信息一般是由 ASCII 码或 BCD 码表示的数据或字 符,CPU 一般均用二进制数进行计算或其他信息处理,处理结果的输出又必须 依照外设的要求变为 ASCII 码、BCD 码或七段显示码等。因此,在应用软件中, 各类数制的转换和代码的转换是必不可少的。计算机与外设间的数码对应关系如 2-3-1 所示。数码转换关系如图 2-3-1 所示。

微机实验报告4 数码转换程序实验_第1张图片

 

2-3-1  计算机与外设间的数码转换关系

 

2-3-1  数码转换对应关系

微机实验报告4 数码转换程序实验_第2张图片 

  1. ASCII 码表示的十进制数转换为二进制数

 

本实验要求将缓冲区中的一个五位十进制数 00012 ASCII 码转换成二进 制数,并将转换结果显示在屏幕上。转换过程的参考流程如图 2-3-2 所示,根据 流程图编写程序代码。

 

十进制数可以表示为:Dn×10n+Dn-1×10n-1++D0×100=Di×10i 其中 Di 表十进制数 12390

 

上式可以转换为:ΣDi×10i=(((Dn×10+Dn-1)×10)+Dn-2)×10++D1)× 10+D0

 

由上式可归纳十进制数转换为二进制的方法:从十进制数的最高位 Dn 开始 作乘 10 加次位的操作,依次类推,则可求出二进制数结果。

微机实验报告4 数码转换程序实验_第3张图片

 

2-3-2  十进制 ASCII 转换为二进制数参考流程

 

DATA SEGMENT ;定义源数据段

MSR DB '00012'

LEN EQU $-MSR

DATA ENDS

CODE SEGMENT ;定义代码段

ASSUME CS:CODE, DS:DATA

START: MOV AX, DATA

MOV DS,AX

MOV SI, OFFSET MSR

MOV CX,LEN-1

MOV AL, DS:[SI] ;开始传输数据

MOV AH,0

SUB AX,30H

NEXT1: MOV BX, 0AH

MUL BX ; 将AX中的数乘以10,所得的结果高位保存到DX中,低位保存到AX中

INC SI

MOV DL,DS:[SI]

MOV DH,0

SUB DX,30H ;将数字对应的ASCII码转换成响应的二进制数

ADD AX,DX

DEC CX

JNZ NEXT1

MOV CL,16 ; CL用作循环NEXT2的计数器,因为5位十进制数转化成二进制只有十六位,所以循环次数为16次

MOV BX,AX

NEXT2: ROL BX,1

MOV DL,BL

AND DL,01H

ADD DL,30H ;把BX中的数以二进制形式输出

MOV AH,2H

INT 21H

DEC CL

JNZ NEXT2

MOV AX,4C00H

INT 21H

CODE ENDS

END START

 

微机实验报告4 数码转换程序实验_第4张图片

 

 

  1. 将十进制数的 ASCII 码转换为 BCD

 

本实验要求将键盘输入的一个五位十进制数 54321 ASCⅡ码存放在数据 区中,转换为 BCD 码后 ,并将转换结果显示于屏幕上 。若输入的不是十进制 数的 ASCⅡ码,则输出“FF”。提示:一字节 ASCⅡ码取其低四位即变为 BCD 码。转换部分的实验流程参见 2-3-3,根据流程图编写程序代码。

  1. 将十六进制数的 ASCII 码转换为十进制数

 

本实验要求将缓冲区中存放的 000CH ASCII 码转换成十进制数,并将转 换结果显示在屏幕上。转换部分的实验流程如图 2-3-4,根据流程图编写程序代 码。

十六位二进制数的值域为 0-65535,最大可转换为五位十进制数。五位十进 制数可表示为:ND=D4×104+D3×103+D2×102+D1×10+D0 因此,将十六位二进 制数转换为五位 ASCⅡ码表示的十进制数,就是求 D1-D4,并将它们转化为 ASC Ⅱ码。

微机实验报告4 数码转换程序实验_第5张图片

 

2-3-3  十进制 ASCII 转换为 BCD 码数参考流程

微机实验报告4 数码转换程序实验_第6张图片

 

 

DATA SEGMENT ;定义源数据段

STRING DB 'Input:','$'

MSR DB 6,?,6 DUP(?) ;数据段MSR用于接收从键盘输入的五位十进制数

DATA ENDS

CODE SEGMENT ;定义代码段

ASSUME CS:CODE, DS:DATA

START: MOV AX,DATA

MOV DS,AX ; 装载数据段寄存器

LEA DX, STRING

MOV AH, 09H

INT 21H

MOV DX, OFFSET MSR

MOV AH,0AH

INT 21H

MOV CL,[MSR+1] ;CL中保存实际输入的数据的位数,用于控制循环执行的次数

MOV SI,0002H

MOV BX, OFFSET MSR

NEXT1: MOV AL,[BX+SI] ;开始传输数据

CMP AL,40H

JNC LK1 ;大于等于40H则表明输入的不是数字符,跳到LK1输入F

CLC

CMP AL,30

JC LK1 ;小于30H则表明输入的不是数字字符,到LK1输出字符F

SUB AL,30H

MOV CH,0

PUSH CX

MOV CL,4

MOV DH,AL

SHL DH,CL

NEXT2: ROL DH,1

MOV DL,DH

AND DL,01H

ADD DL,30H

MOV AH,02H

INT 21H

DEC CL

JNZ NEXT2

POP CX

INC SI

DEC CL

JNZ NEXT1

LK1: JZ LK2

MOV DL,46H ;输出字符F

MOV AH,02H

INT 21H

INC SI

DEC CL

JNZ NEXT1

LK2: MOV AX,4C00H

INT 21H

CODE ENDS

END START

 

 

 

微机实验报告4 数码转换程序实验_第7张图片

2-3-4  将十六进制数的 ASCII 码转换为十进制数参考流程

4BCD 码转换为二进制码 BCD

 

01H,07H,03H,04H,05H,01H,06H,08H,转换成二进制数码存入其后的内存单元中, 转换结束,送屏幕显示。转换部分的实验流程参见 2-3-5,根据流程图编写程序 代码。

 

微机实验报告4 数码转换程序实验_第8张图片

2-3-5  BCD 码转换为二进制码

 

DATA SEGMENT ;定义源数据段

STRING DB 'Input:','$'

MSR DW 000CH

MDR DB 5 DUP(?),'$'

DATA ENDS

CODE SEGMENT ;定义代码段

ASSUME CS:CODE, DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV BX,OFFSET MDR

MOV SI, 5

MOV AX,[MSR] ;将数据000CH保存到AX当中

NEXT1: DEC SI

MOV DX,0

MOV CX,0AH

DIV CX

ADD DL,30H

MOV [BX+SI],DL

CMP AX,0

JNE NEXT1

CMP SI,0 ;判断SI是否为零,为零则表明五位十进制数的每一位都不为零,否则应给前面为零的位上补上零

JE NEXT3

NEXT2: DEC SI

MOV AL,30H

MOV [BX+SI],AL

CMP SI,0

JNE NEXT2

NEXT3: MOV DX,OFFSET MDR

MOV AH,09H

INT 21H

MOV AX,4C00H

INT 21H

CODE ENDS

END START

 

微机实验报告4 数码转换程序实验_第9张图片

 

2.3.4 实验步骤 (1) 按照各实验要求分别编写实验程序。

 (2) 对实验程序进行编译、链接。

(3) 使用调试功能调试程序,观察在调试过程中,程序指令执行之后各寄存 器及数据区的内容。

 (4) 更改数据区中的数据,反复测试,验证程序功能。

 

 

四、心得体会:

 

 

这个是第一次自己手打的实验 的确很难  对汇编语言还不是很熟悉   有时候答案出来了 还不是很理解是怎么转换的  很纠结  

你可能感兴趣的:(微机)