汇编课程设计报告
- 格式:doc
- 大小:3.77 MB
- 文档页数:19
汇编课程设计报告
学
号:
课程设计
题目打印水仙花数
学院计算机科学与技术
专业计算机科学与技术
班级
姓名
指导教师
武汉理工大学《汇编语言程序设计》课程设计
2012 年 6 月28 日
课程设计任务书
学生姓名:专业班级:
指导教师:工作单位:计算机科学与技术学院
题目: 打印水仙花数
初始条件:
理论:完成了《汇编语言程序设计》课程,
对微机系统结构和80系列指令系
统有了较深入的理解,已掌握了汇
编语言程序设计的基本方法和技
巧。
实践:完成了《汇编语言程序设计》的4
个实验,熟悉了汇编语言程序的设
计环境并掌握了汇编语言程序的
调试方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
进一步理解和掌握较复杂程序的设计方
法,掌握子程序结构的设计和友好用户界
2.1简要分析
2.1.1原理说明
可以用标签来接收三位数,标签的好处在于可以限制输入的位数,并且通过实际输入位数可以直接进行一部分的异常处理。
将数存到标签后,因为是以ASCII码的形式存的,所以需要进行转换,将其变成十六进制数,转换后将数字存到申请的内存字中。在转换成十六进制数的过程中,可以对输入的数进行异常处理,判断是否输入有误。
在输出水仙花数时,设置一个计数器,从100开始循环判断,直到等于用户输入的数为止,依次判断是否为水仙花数,决定是否输出该数。
在输出时,分别取出水仙花数的个、十、百位数,转换成ASCII码再输出。
系统提示是否继续后,程序对用户输入的信息进行判断,若为y或Y则系统回到初始状态,若为n或N则退出系统,若为其他则提示输入错误并重新输入。
2.1.2程序流程图
是否继续
2.2 数据段设计
data segment
mess1 db 0dh,0ah,'Please input a nubmer
(100<=number<=999):','$'
mess2 db 0dh,0ah,'Do you want to continue(y/n)? ','$' mess3 db 0dh,0ah,'shuixianhuashu:',0ah,'$'
error db 0dh,0ah,'Input error,please input again!','$' numpar label byte
max db 4
act db ?
numfld db 4 dup(?);存放输入的字符串,设定了最大长度,避免错误。 real dw ? ;用于存放转换后的十六进制数
data ends
3.子程序设计与描述
3.1输入一个三位数:
;input a number
num proc near
lea dx,mess1
mov ah,9
int 21h
mov ah,0ah
lea dx,numpar
int 21h
call convert
ret
num endp
3.2 将输入的数据转换成十六进制数并进行异常处理:
convert proc near
mov bx,0
mov dx,0
mov ax,0
cmp act,3 ;判断是否为三位数
jne err
mov bl,numfld[2] ;判断个位是否为1~9
cmp bl,2fh
jbe err
cmp bl,3ah
jge err
sub bl,30h
mov al,numfld[1] ;判断十位是否为0~9
cmp al,2fh
jbe err
cmp al,3ah
jge err
sub al,30h
mov dh,10
mul dh
add bl,al
mov al,numfld[0] ;判断百位是否为0~9
cmp al,30h
jbe err
cmp al,3ah
jge err
sub al,30h
mov dh,100
mul dh
add ax,bx
mov real,ax ;将转换后的十六进制数存到内存中
jmp ext
err: ;错误处理
lea dx,error
mov ah,9
int 21h
call num
ext:
ret
convert endp
3.2 判断是否为水仙花数并输出结果( display子程序)
;display shuixianhuashu
display proc near
lea dx,mess3
mov ah,9
int 21h
mov cx,100
cmp3:
mov ax,cx ;将百位数的立方存入bx中
mov dh,100
div dh
mov dh,al
mul dh
mul dh
mov bx,ax
mov ax,cx ;将十位数的立方加到bx中
mov dh,10
div dh
mov ah,0
div dh
mov al,ah
mov dh,ah
mul dh
mul dh
add bx,ax