JNB A2 ;不低于3AH则转A2 SUB AL, 30H
JB A2 ;低于30H则转A2 MOV BL, AL
A2: MOV AL, BL ;结果或错误标志送入AL
MOV [DI+0AH],AL ;结果存入目标地址 INC DI LOOP A1
A3: JMP A3 CODE ENDS
END START
实验步骤
(1)自己绘制程序流程图,然后编写程序,编译、链接无误后装入系统;
(2)在3500H~3504H 单元中存放五位十进制数的ASCII码,即:键入E3500 后,输入31,32,33,34,35;
(3)运行程序,然后停止程序运行;
(4)键入D350A,显示运行结果,应为:0000:350A 01 02 03 04 05 CC ? (5)反复测试几组数据,验证程序功能。
3. 将十六位二进制数转换为ASCII码表示的十进制数
十六位二进制数的值域为0~65535,最大可转换为五位十进制数。 五位十进制数可表示为:
N
D4 10
4
D3 10
3
D2 10
2
D1 10 D0
Di:表示十进制数0~9
将十六位二进制数转换为五位ASCII 码表示的十进制数,就是求D1~D4,并将它们转换为ASCII 码。自行绘制程序流程图,编写程序可参考例程。例程中源数存放于3500H、3501H中,转换结果存放于3510H~3514H 单元中。 实验程序清单(例程文件名:A2-3.ASM)
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS CODE SEGMENT
ASSUME CS:CODE
START: MOV SI,3500H ;源数据地址
MOV DX,[SI]
MOV SI,3515H ;目标数据地址
A1: DEC SI
MOV AX,DX MOV DX,0000H MOV CX,000AH ;除数10
DIV CX ;得商送AX, 得余数送DX XCHG AX,DX
ADD AL,30H ;得Di的ASCII码 MOV [SI],AL ;存入目标地址
CMP DX,0000H
JNE A1 ;判断转换结束否,未结束则转A1
A2: CMP SI,3510H ;与目标地址得首地址比较
JZ A3 ;等于首地址则转A3,否则将剩余地址中填30H DEC SI MOV AL,30H MOV [SI],AL JMP A2
A3: JMP A3 CODE ENDS
END START
实验步骤
(1)编写程序,经编译、链接无误后,装入系统; (2)在3500H、3501H 中存入0C 00; (3)运行程序,然后停止运行;
(4)检查运行结果,键入D3510,结果应为:30 30 30 31 32; (5)可反复测试几组数据,验证程序的正确性。
4. 十六进制数转换为ASCII码
由表1-2-1 中十六进制数与ASCII 码的对应关系可知:将十六进制数0H~09H 加上30H后得到相应的ASCII码,AH~FH 加上37H 可得到相应的ASCII码。将四位十六进制数存放于起始地址为3500H 的内存单元中,把它们转换为ASCII 码后存入起始地址为350AH 的内存单元中。自行绘制流程图。
实验程序清单(例程文件名为A2-4.ASM)
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS CODE SEGMENT
ASSUME CS:CODE
START: MOV CX,0004H
MOV DI,3500H ;十六进制数源地址 MOV DX,[DI]
A1: MOV AX,DX
AND AX,000FH ;取低4位 CMP AL,0AH
JB A2 ;小于0AH则转A2
ADD AL,07H ;在A~FH之间,需多加上7H
A2: ADD AL,30H ;转换为相应ASCII码
MOV [DI+0DH],AL ;结果存入目标地址 DEC DI PUSH CX MOV CL,04H
SHR DX,CL ;将十六进制数右移4位 POP CX
LOOP A1
A3: JMP A3 CODE ENDS
END START
实验步骤
(1)编写程序,经编译、链接无误后装入系统;
(2)在3500H、3501H 中存入四位十六进制数203B,即键入E3500,然后输入3B 20; (3)先运行程序,然后再停止运行;
(4)键入D350A,显示结果为:0000:350A 32 30 33 42 CC ?; (5)反复输入几组数据,验证程序功能。
5. BCD码转换为二进制数
将四个二位十进制数的BCD 码存放于3500H 起始的内存单元中,将转换的二进制数存入3510H 起始的内存单元中,自行绘制流程图并编写程序。 实验程序清单(例程文件名为:A2-5.ASM)
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: XOR AX, AX
MOV CX, 0004H MOV SI, 3500H MOV DI, 3510H
A1: 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 LOOP A1
A2: JMP A2 CODE 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)反复输入几组数据,验证程序功能。
1.2.4 思考题
1. 实验内容1 中将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小可为多少,最大可为多少?为什么?
2. 将一个十六位二进制数转换为ASCII码十进制数时,如何确定Di的值?
3. 在十六进制转换为ASCII码时,存转换结果后,为什么要把DX 向右移四次?
4. 自编ASCII 码转换十六进制、十六进制小数转换二进制、二进制转换BCD 码的程序,并调试运行。
1.4循环程序设计实验
1.4.1 实验目的
1. 加深对循环结构的理解;
2. 掌握循环结构程序设计的方法以及调试方法。
1.4.2 实验设备
PC机一台,TD-PITE 实验装置一套。
1.4.3 实验内容及步骤
1. 计算S=1+2×3+3×4+4×5+?+N(N+1),直到N(N+1)项大于200为止。 编写实验程序,计算上式的结果,参考流程图如图1-5-1所示。 实验程序清单(例程文件名为:A5-1.ASM)
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,0001H
MOV BL,02H
A1: MOV AL,BL
INC BL MUL BL
ADD DX,AX ;结果存于DX中
CMP AX,00C8H ;判断N(N+1)与200的大小 JNA A1
A2: JMP A2 CODE ENDS
END START