80x86微机原理与接口技术实验指导书 下载本文

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