5. 将十六位二进制数转换为ASCII码表示的十进制数
十六位二进制数的值域为0~65535,最大可转换为五位十进制数。 五位十进制数可表示为:
N?D4?104?D3?103?D2?102?D1?10?D0
Di:表示十进制数0~9
将十六位二进制数转换为五位ASCII码表示的十进制数,就是求D1~D4,并将它们转换为ASCII码。自行绘制程序流程图,编写程序可参考例程。例程中源数存放于3500H、3501H中,转换结果存放于3510H~3514H单元中。
实验程序清单(例程文件名:A2-3.ASM)
SSTACK SSTACK CODE START: A1: A2: A3: CODE
SEGMENT STACK
DW 64 DUP(?) ENDS SEGMENT
ASSUME CS:CODE MOV SI,3500H MOV DX,[SI] MOV SI,3515H DEC SI MOV AX,DX MOV DX,0000H MOV CX,000AH DIV CX XCHG AX,DX ADD AL,30H MOV [SI],AL CMP DX,0000H JNE A1 CMP SI,3510H JZ A3 DEC SI MOV AL,30H MOV [SI],AL JMP A2
MOV AX,4C00H INT 21H ENDS
END START
;源数据地址 ;目标数据地址
;除数10
;得商送AX, 得余数送DX ;得Di的ASCII码 ;存入目标地址
;判断转换结束否,未结束则转A1 ;与目标地址得首地址比较
;等于首地址则转A3,否则将剩余地址中填30H
;程序终止
实验步骤
(1)编写程序,经编译、链接无误后,装入系统。 (2)在3500H、3501H中存入0C 00。 (3)运行程序,待程序运行停止。
(4)检查运行结果,键入D3510,结果应为:30 30 30 31 32。 (5)可反复测试几组数据,验证程序的正确性。
6. 十六进制数转换为ASCII码
由表2.1中十六进制数与ASCII码的对应关系可知:将十六进制数0H~09H加上30H后得到相应的ASCII码,AH~FH加上37H可得到相应的ASCII码。将四位十六进制数存放于起始地址为3500H的内存单元中,把它们转换为ASCII码后存入起始地址为350AH的内存单元中。自行绘制流程图。
实验程序清单(例程文件名为A2-4.ASM)
SSTACK
SEGMENT STACK
SSTACK CODE START: A1: A2: CODE DW 64 DUP(?)
ENDS SEGMENT
ASSUME CS:CODE MOV CX,0004H MOV DI,3500H MOV DX,[DI] MOV AX,DX
AND AX,000FH CMP AL,0AH JB A2 ADD AL,07H ADD AL,30H MOV [DI+0DH],AL DEC DI PUSH CX MOV CL,04H SHR DX,CL POP CX LOOP A1
MOV AX,4C00H INT 21H ENDS
END START
;十六进制数源地址
;取低4位
;小于0AH则转A2
;在A~FH之间,需多加上7H ;转换为相应ASCII码 ;结果存入目标地址
;将十六进制数右移4位
;程序终止
实验步骤
(1)编写程序,经编译、链接无误后装入系统。
(2)在3500H、3501H中存入四位十六进制数203B,即键入E3500,然后输入3B 20。 (3)先运行程序,待程序运行停止。
(4)键入D350A,显示结果为:0000:350A 32 30 33 42 CC …。 (5)反复输入几组数据,验证程序功能。
7. BCD码转换为二进制数
将四个二位十进制数的BCD码存放于3500H起始的内存单元中,将转换的二进制数存入3510H起始的内存单元中,自行绘制流程图并编写程序。
实验程序清单(例程文件名为:A2-5.ASM)
SSTACK SSTACK CODE START: A1:
SEGMENT STACK
DW 64 DUP(?) ENDS SEGMENT
ASSUME CS:CODE XOR AX, AX MOV CX, 0004H MOV SI, 3500H MOV DI, 3510H MOV AL, [SI] ADD AL, AL MOV BL, AL ADD AL, AL ADD AL, AL ADD AL, BL INC SI
ADD AL, [SI] MOV [DI], AL INC SI INC DI
CODE LOOP A1
MOV AX,4C00H INT 21H ENDS
END START
;程序终止
实验步骤
(1)编写程序,经编译、链接无误后装入系统。
(2)将四个二位十进制数的BCD码存入3500H~3507H中,即: 先键入E3500,然后输入01 02 03 04 05 06 07 08。
(3)先运行程序,待程序运行停止。
(4)键入D3510显示转换结果,应为:0C 22 38 4E。 (5)反复输入几组数据,验证程序功能。
8.提高练习
将上述程序数据部分全部改为变量形式,然后运行,通过变量查看运行结果。
(例如:将十进制数的ASCII码转换为BCD码
实验程序清单(例程文件名:A2-2A.ASM)
SSTACK DATA ASCN BCDN DATA CODE START: A1: A2: CODE
ENDS
SEGMENT
DB 31H,32H,33H,34H,35H DB 5 DUP(?) ENDS SEGMENT
ASSUME CS:CODE ,DS:DATA MOV AX,DATA MOV DS,AX
MOV CX, 0005H MOV DI, OFFSET ASCN MOV BL, 0FFH MOV AL, [DI] CMP AL, 3AH JNB A2 SUB AL, 30H JB A2 MOV BL, AL MOV AL, BL MOV [DI+BCDN],AL INC DI LOOP A1
MOV AX,4C00H INT 21H ENDS
END START
;转换位数 ;ASCII码首地址 ;将错误标志存入BL
;不低于3AH则转A2 ;低于30H则转A2 ;结果或错误标志送入AL ;结果存入目标地址
;程序终止
)
三、分支程序设计实验
设计一数据块间的搬移程序。设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。源数据块和目的数据块在存储中可能有三种情况,如图2.14所示。
0H源数据块0H目的数据块0H源数据块目的数据块目的数据块源数据块FFFFFH
FFFFFH
FFFFFH
(a) (b) (c)
图4-1 源数据块与目的数据块在存储中的位置情况
对于两个数据块分离的情况,如图4-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:
当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图4-1(b)所示。 当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图4-1(c)所示。 实验程序流程图如图4-2所示。
开 始 源数据块首地址→SI 源数据块首地址→SI 搬移字节数→CX>> SI←[SI]+[CX]-1 DI←[DI]+[CX]-1DI←[(SI)] SI←[SI]-1 DI←[DI]-1CX←[CX]-1N[CX]=0?Y结 束[SI]>[DI]?DI←[(SI)] SI←[SI]+1 DI←[DI]+1CX←[CX]-1[CX]=0?YN
图4-2 程序流程图
实验程序清单(例程文件名为:A4-1.ASM)
SSTACK SSTACK CODE
SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT
START: A1: A2: A3: CODE ASSUME CS:CODE
MOV CX, 0010H MOV SI, 3100H MOV DI, 3200H CMP SI, DI JA A2
ADD SI, CX ADD DI, CX DEC SI DEC DI
MOV AL, [SI] MOV [DI], AL DEC SI DEC DI DEC CX JNE A1 JMP A3
MOV AL, [SI] MOV [DI], AL INC SI INC DI DEC CX JNE A2
MOV AX,4C00H INT 21H ENDS
END START
;程序终止
实验步骤
1. 按流程图编写实验程序,经编译、链接无误后装入系统。 2. 用E命令在以SI为起始地址的单元中填入16个数。 3. 运行程序,待程序运行停止。
4. 通过D命令查看DI为起始地址的单元中的数据是否与SI单元中数据相同。
5. 通过改变SI、DI的值,观察在三种不同的数据块情况下程序的运行情况,并验证程序的功能。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库微机原理实验指导一(2015-2)(2)在线全文阅读。
相关推荐: