汇编语言程序设计实验篇 下载本文

2. 实验设备

微型计算机、emu8086

3. 实验原理

分支程序是根据不同条件执行不同处理过程的程序。分支程序的结构有两种:—种是二路分支,—种是多路分支。它们的共同特点是在满足某一条件时,将执行多个分支中的某—分支。

本节的实验内容与数值和ASCII码间的转换有关,由于字符′0′~′9′的ASCII码是30H~39H,因此将数值0~9转换成对应的ASCII码时,需要在其基础上加30H;由于字符′A′~′F′的ASCII码是41H~46H,因此将数值A~F转换成对应的ASCII码时,需要在其基础上加37H。另外,二进制数与十六进制数之间的关系是:每4位二进制数等于1位十六进制数。

在屏幕上显示单个字符的语句如下: MOV DL,<要显示的字符> MOV AH,2 INT 21H

4. 实验内容

从键盘输入一个十进制正整数N(10≥N≥99),将其转换成十六进制数,转换的结果显示在屏幕上。提示:键盘输入的内容都是ASCII码形式。

程序流程图如错误!未找到引用源。。

开始 从键盘输入一个两位的十进制数放入 STR开始的键盘缓冲区中 第一步:将ASCII码形式的两位十进制数转换成二进制数 1.(STR+2)-30H→AH(将十位数的ASCII码转换成BCD数) 2.(STR+3)-30H→AL(将个位数的ASCII码转换成BCD数) *10+AL→AL(转换成二进制数保存在AL中) 第二步:将二进制数转换成十六进制数 AL中的高4位和低4位分别就是十六进制数的高位和低位 第三步:显示结果的高4位 4位取AL的高 N数据≥A? Y 7是A-F,预加 加30H,转换成ASCII码显示到屏幕上

图 2-4程序流程图

程序框架如下: data segment

STR db 3,0,3 dup(0)

MES db 'Input a decimal number(10~99):$'

MES1 db 0ah,0dh,’Show decimal number as hex:$' pkey db \ ends

code segment start:

; set segment registers: mov ax, data mov ds, ax mov es, ax

;显示字符串Input a decimal number(10~99): ;从键盘输入一个两位的十进制数

;将表示十位数的字符转换成数值,保存到ah中 ;将表示个位数的字符转换成数值,保存到al中 mov bl, al

;将ah和al表示的两位十进制数转换成十六进制数,保存到al中 mov bl, al

;显示字符串Show decimal number as hex: ;显示结果的高4位 ;显示结果的低4位 lea dx, pkey mov ah, 9

int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h

mov ax, 4c00h ; exit to operating system. int 21h ends

end start ; set entry point and stop the assembler. 编写EXE TEMPLATE程序,观察执行结果。

5. 实验习题

1)如果输入的数在0~99范围内,如何修改程序才能使结果正确。 2)如果可以输入负整数,如何修改程序才能使结果正确。

6. 实验报告要求

1)写出完整的程序。

2)使用不同数据测试程序并解释运行结果。

1.2.8 循环程序

1. 实验目的

1)了解8086汇编程序的基本结构 2)掌握循环程序的基本设计方法。

2. 实验设备

微型计算机、emu8086

3. 实验原理

循环程序是把一个程序段重复执行多次的程序结构。循环程序包括三个部分:初始化部分、循环体、循环控制部分。初始化部分用于对循环程序的参数(循环次数、控制条件、指针等)设置初值。循环体是要被重复执行的程序段。循环控制部分用于决定是否退出循环。循环控制指令可以是转移指令或LOOP指令。当已知循环次数或控制条件为ZF时,用LOOP指令控制循环是最简单的方法。

本节实验显示的图形可以分为上下两部分。对于上半部分图形,需要设置两层循环,其

中外循环控制显示几行(初始为9,每次减1,减到0时结束);内循环控制当前行显示几个′*′(初值为1,每次加1)。对于下半部分图形,也需要设置两层循环,其中外循环控制显示几行(初始为9,每次减1,减到0时结束);内循环控制当前行显示几个空格(初值为8,每次减1)和几个′*′(初值为1,每次加1)。

在屏幕上显示单个字符的语句如下: MOV DL,<要显示的字符> MOV AH,2 INT 21H

4. 实验内容

在屏幕上显示如下图形。 * ** *** **** ***** ****** ******* ******** ********* * ** *** **** ***** ****** ******* ******** *********

程序的流程图如错误!未找到引用源。所示。

cl=0? Y 显示′*′ cl=cl-1 第一步:处理上半部分图形 外循环计数器bl=9,每行星号个数bh=1 开始 cl=bh

N

bl=0? N 显示回车,显示换行 bh=bh+1 bl=bl-1

bl=0? N ch=ch-1 bh=bh+1 bl=bl-1 cl=0? N Y cl=bh N cl=0? 显示空格 cl=cl-1 cl=ch 第二步:处理下半部分图形 外循环计数器 bl=9,每行空格个数 ch=8,每行星号个数 bh=1 Y 显示′*′ cl=cl-1 Y 显示回车,显示换行

Y 结束 图 2-5程序流程图

程序的框架如下:

data segment

pkey db \ ends

code segment