集 美 大 学
计 算 机 工 程 学 院
实 验 报 告
课程名称 实验名称 实验类型
姓名 日期 成绩
汇编语言程序设计
实验二、循环与分支程序设计
一 设计型
学号
2012/4/6
地点
教师
第1页 共7页
1.实验目的及内容
1.实验目的
掌握循环程序的设计方法,掌握程序的调试技术。
2.实验内容 1)按5行6列的表格形式显示大写英文字母,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。每6个字符为一行,每行中的相邻两个字符之间用空格符隔开。
2)将两个多位十进制数相加,要求被加数、加数均以ASCII码形式各自顺序存放在以DATA1和DATA2为首址的内存区中(低位在前),结果送回DATA1处,并在屏幕上显示该加法算式。例如:
12345 +78962 ------ 91307
2.实验环境
Masm for windows 集成实验环境2012
3.实验方法
1)单分支程序设计与单重循环结构程序设计
2)单分支、多分支程序设计与单重循环结构程序设计。
4.实验步骤
1. A)把26给CX,41H给BL。
B)显示BL和空格后,BL作加1调整,将CX给AX,并减1,再除以6看余数是否为2,不是则转D)执行,否则顺序执行。
C)显示回车、换行。
D)CX减1,若CX等于0则结束,否则转B)执行继续循环。
2.A)设置地址指针bp用于数字从高位到低位依次存入内存,被加数存入DATA1,加数存入DATA2
B)再利用bp将两数相加,结果存入DATA1。 C) 最后利用地址指针bp把结果显示出来。
5.实验结论
1.
2.
6. 实验分析
1. 把26个字母按五行六列的格式显示出来关键是要设置计数器,判断该行
是否已显示了6个字母
2. 因为被加数、加数均以ASCII码形式各自顺序存放在以DATA1和DATA2
为首址的内存区中(低位在前),所以显示加数、被加数时要从后面的单元开始显示,通过设置地址指针可以方便地实现加法运算。
附件
1. 程序流程图
1) 显示大写字母
2) 两个多位十进制数相加
2. 汇编语言源程序
1) 显示大写字母
print macro x mov dl,x mov ah,2 int 21h endm
code segment
assume cs:code start: mov cx,26 mov bl,41h l1: print bl print 20h inc bl mov ax,cx dec ax mov bh,6 div bh cmp ah,2 jnz next print 13 print 10 next:loop l1 mov ah,4ch int 21h code ends end start
2) 两个多位十进制数相加
data segment
data1 db 10 dup (0) data2 db 10 dup (0) count equ $-data2
data ends cin macro mov ah,1 int 21h endm
cout macro x mov dl,x mov ah,2 int 21h endm
code segment
assume cs:code,ds:data start: mov ax,data mov ds,ax mov bp,count cout 20h l1: cin
cmp al,13 je next1 dec bp
mov byte ptr data1[bp],al jmp l1 next1:cout 13 cout 10 cout '+' mov bp,count l2: cin
cmp al,13 je next2 dec bp
mov byte ptr data2[bp],al jmp l2 next2:cout 13 cout 10 mov si,bp
mov cx,count+1 sub cx,si l3:cout '-' loop l3 cout 13 cout 10
mov cx,count sub cx,si
xor ax,ax
l4: mov al,byte ptr data1[bp] add al,ah xor ah,ah
add al,byte ptr data2[bp] aaa
add al,30h
mov byte ptr data1[bp],al inc bp loop l4
mov cx,bp dec bp cmp ah,1 jz next3 cout 20h jmp l5 next3:cout '1'
l5:mov bl,byte ptr data1[bp] cout bl dec bp loop l5 mov ah,4ch int 21h code ends end start