数码转换 实验报告 微机原理_微机原理实验报告

2020-02-27 其他范文 下载本文

数码转换 实验报告 微机原理由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“微机原理实验报告”。

实验九

数码转换

一、实验目的1、掌握计算机常用数据编码之间的相互转换方法。

2、进一步熟悉DEBUG软件的使用方法。

二、实验内容

1.ACSII码转换为非压缩型BCD码

编写并调试正确的汇编语言源程序,使之实现:设从键盘输入一串十进制数,存入DATA1单元中,按回车停止键盘输入。将其转换成非压缩型(非组合型)BCD码后,再存入DATA2开始的单元中。若输入的不是十进制数,则相应单元中存放FFH。调试程序,用D命令检查执行结果。

2.BCD码转换为二进制码

编写并调试正确的汇编语言源程序,使之将一个16位存储单元中存放的4位BCD码DATA1,转换成二进制数存入DATA2字单元中。调试程序,用D命令检查执行结果。3.十六进制数转换为ASCII码

编写并调试正确的汇编语言源程序,使之将内存DATA1字单元中存放的4位十六进制数,转换为ASCⅡ码后分别存入DATA2为起始地址的4个单元中,低位数存在低地址的字节中,并在屏幕上显示出来。

三、实验预习

1.复习材料中有关计算机数据编码部分的内容。2.按要求编写程序。

四、实验步骤

1.编辑源文件,经汇编连接产生EXE文件。2.用DEBUG调试、检查、修改程序。

五、实验内容

1.ACSII码转换为非压缩型BCD码 STACK SEGMENT PARA STACK 'STACK'

DB 256 DUP(?)

;为堆栈段留出256个字节单位

STACK ENDS DATA SEGMENT PARA 'DATA';定义数据段

DATA1 DB 32

;缓冲区最大长度

DB ? DB 32 DUP(?)DATA2 DB 32 DUP(?)DATA ENDS CODE SEGMENT

;定义代码段 ASSUME SS:STACK ASSUME CS:CODE ASSUME DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,DATA1

;规定:DX存放输入字符串的缓冲区首地址 MOV AH,0AH INT 21H

;字符串输入 AL=键入的ASCII码 LEA SI,DATA1 LEA DI,DATA2 INC SI MOV CL,[SI] INC SI LP1: MOV AL,[SI] SUB AL,30H CMP AL,0 JL LP2 CMP AL,9 JG LP2 MOV BL,AL MOV [DI],BL INC DI INC SI DEC CL JMP LP1 LP2: MOV AL,0FFH MOV BL,AL MOV [DI],BL INC DI INC SI DEC CL CL=CL-1 JNZ LP1 LP3: MOV AH,4CH INT 21H CODE ENDS END START

;DI存放DATA2首地址

;取输入字符串长度

;指向第一个输入字符

;输入的字符存为ASCII码,将其转换成十进制数

;若AL

;若AL>9(AL-9>0),跳转到LP2

;将AL->BL

;将结果存到DATA2开始的单元中

;若输入的不是十进制数,在相应的单元存放FFH

;以字母开头的十六进制数前面需加'0'

;将AL->BL

;CL=0,执行LP3中的语句

2.BCD码转换为二进制码

DATA

SEGMENT

DATA1 DW 2497H

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

;指4位BCD码

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

;进行累加,直接将最后的累加结果放到AX中

MOV DATA2,AX

MOV AH,4CH

INT 21H

CODE

ENDS

END START

3.十六进制数转换为ACSII码 STACK

SEGMENT

DB 256 DUP(?)

STACK

ENDS

DATA

SEGMENT

DATA1 DB 24H,06DH

DATA2 DB 4 DUP(?)

;存放ASCII码

JUMP DB 4 DUP(?)

;4位十六进制数分别存放在DATA3的4个字节中

DATA ENDS

CODE

SEGMENT

ASSUME SS:STACK,DS:DATA,CS:CODE

START:

MOV AX,DATA

MOV DS,AX

LEA SI,DATA1

LEA DI,JUMP

MOV CL,2

;循环2次,取两次两位十六进制数

LP0:

MOV AL,[SI]

;取2位十六进制数

AND AL,0F0H

;低四位为零

ROR AL,4

;右移4位

相当于除以16

MOV [DI],AL

;高位数存放在高地址字节中

INC DI

MOV AL,[SI]

;取2位十六进制数

AND AL,0FH

;高四位为零

MOV [DI],AL

;低位数存放在低地址字节中

INC SI

INC DI

DEC CL

JNZ LP0

LEA SI,JUMP

LEA DI,DATA2

MOV CL,4

LP1:

MOV AL,[SI]

CMP AL,9

JG LP3

ADD AL,30H

JMP LP3

LP2:

ADD AL,37H

LP3:

MOV [DI],AL

INC DI

INC SI

DEC CL

JNZ LP1

MOV AH,09H

INT 21H

MOV DX,OFFSET DATA2

MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

CODE

ENDS

END START

;SI=JUMP的首地址偏移量

;DI=DATA2的首地址偏移量

;因为是四位十六进制数,所以设置为循环4次

;取JUMP中的十六进制数

;若AL>9(AL-9>0),跳转到LP3

;0~9H+30H=ASCII

;A~FH+30H=ASCII

;将ASCII码依次存入DATA2中

六、实验习题与思考

1.编程实现:从键盘上输入两位十六进制数,转换成十进制数后显示在屏幕上。STACK SEGMENT

DB

256 DUP(?)

STACK ENDS

DATA SEGMENT

DATA1 DB

5,?,2 DUP(?)

DATA2 DBDUP(?)

DATA3 DBDUP(?)

DATA ENDS

CODE SEGMENT

ASSUME

SS:STACK,DS:DATA,CS:CODE

START:MOV

AX,DATA

MOV

DS,AX

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]

;取百位数送显

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 DBDUP(0)

COUNT EQU

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

《数码转换 实验报告 微机原理.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
数码转换 实验报告 微机原理
点击下载文档
相关专题 微机原理实验报告 实验报告 微机 原理 微机原理实验报告 实验报告 微机 原理
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文