logo资料库

汇编语言显示九九乘法表.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
武汉理工大学华夏学院 课 程 设 计 课程名称 汇编语言程序设计 题 目汇编语言显示九九乘法表 计算机网络 业 级 计网 2065 班 名 号 绩 _________________ 项 晨 10225506507 专 班 姓 学 成 指导教师 韩 明 2008 年 7 月 3 日
课程设计任务书 设计题目:汇编语言显示九九乘法表 设计目的: 1. 巩固和加深课堂所学知识; 2. 将课本上的理论知识和实际应用有机的结合起来,培养同学们分析和解决实际问题的能力; 3. 通过对汇编语言程序代码的阅读、修改、设计,理解和掌握复杂的汇编语言应用程序的编程, 提高实践编程能力。 设计任务:(在规定的时间内完成下列任务) 功能与要求: 1. 二进制转换十进制的显示子程序能自动消除高位的 0。 2. 在显示九九表时有十种颜色变化如:按 0—9 键分别对应有十种不同颜色。 3. 九九表能按照一定规律在屏幕的不同位置完整显示出来。 4. 按(a 或 A)键九九表无规律在屏幕的不同位置完整显示出来, 按空格键能取消该功能。 时间安排: 6 月 30 日 7 月 1 日~7 月 3 日 7 月 4 日 布置题目,确定任务、查找相关资料 功能分析,模块设计,编写程序,调试程序 答辩后撰写设计报告。 具体要求:设计报告撰写格式要求 (按提供的设计报告统一格式撰写),具体内容如下: 1、 题目: 2、设计目的: 2、设计内容:写出简要的程序功能描述、程序运行条件--所需工具软件、输入/输出描述等。 3、程序结构:① 主要的段定义说明; ② 用到的子程序(宏)的功能说明、调用关系说明、参数传送方式说明等; ③ 主要算法描述等(各模块功能实现及典型指令的应用)。 4、设计步骤(注明时间安排) 5、程序流程图、源程序(程序必须有简单注释,源程序若太长,可作为附录) 6、实验结果(输出) 7、其他值得说明的内容(1)程序结构设计特点;(2)设计、调试程序心得、体会或不足。 附录:①源程序代码(必须有简单注释) ②参考文献 指 导 教 师 签 名: 韩明 08 年 6 月 30 日 教研室主任(或责任教师)签名: 08 年 6 月 30 日
一.设计内容: 1. 功能描叙: 用汇编语言编写九九乘法表,在屏幕上显示出来,而且能按一定 规律显示,设置“1”键为横向排列,设置“2”键为左三角,设置“3” 为右三角设置“0”为取消该功能。 2. 程序运行条件: 本程序需要借助 masm 软件进行操作,先将源程序代码保存在文 本文档内,以.asm 为后缀名保存,再利用命令提示符调用即可。 3. 输入与输出: 先对文件进行汇编操作,然后利用命令调用即可输出相应结果, 而输入则就是用文本文档先编辑并保存文件。 二.程序结构: 1. 主要段定义及描叙: 九九乘法表 CR MACRO ;换行宏 MOV AH,2 ;显示输出 MOV DL,0AH ; 输出换行 INT 21H ;DOS 调用 MOV DL,0DH ;输出回车 INT 21H ;DOS 调用 ENDM SHOW MACRO ;显示乘积的宏 LOCAL NEXT1 ;给 NEXT1 建立标号 MOV AH,0 AAM ;因为乘积最大为 81,所以可采用 BCD 码乘法调整 MOV DX,AX MOV AH,2 OR DX,3030H XCHG DH,DL
CMP DL,30H ;这里加了个判断,用于判断 10 位是否为零,例如乘积为 09 ;则打头的零就不用输出 JZ NEXT1 INT 21H NEXT1: XCHG DH,DL INT 21H MOV DL,20H INT 21H ENDM DSEG SEGMENT SEN DB ?,'*',?,'= $' ;为输出乘式做准备,第一个问号处存放被乘数 ;第二个放乘数 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG MAIN: MOV AX,DSEG MOV DS,AX MOV BL,1 ;在控制行数的同时,控制乘数的最大值(1-9) NEXT: MOV BH,BL INC BH ;这里的 BH 用于存放(BH)+1,用于控制被乘数的循环乘积 MOV CL,1 ;CL 存放被乘数,从 1 开始乘直到等于(BH)的值 NEXT0: MOV AL,BL MOV AH,0 MUL CL PUSH AX MOV AH,09H MOV SEN,CL ;在这里开始存放显示的乘数、被乘数 ADD SEN,30H MOV SEN+2,BL ADD SEN+2,30H LEA DX,SEN INT 21H ;输出乘式 POP AX SHOW ;显示乘积 2. 典型指令控制: “‘1’键为横向排列,设置‘2’键为左三角,设置‘3’为右三角设置‘0’为取消该 功能” : table1 db 'PLEASE INPUT 0-3:$' table2 db '1:BLOCK 2:LIFT TRIANGLE 3:RIGHT TRIANGLE 0:exit$' table3 db 'WARNING:PLEASE INPUT 0-3$' 三. 设计步骤:
1.6 月 30 日:确定任务、查找相关资料 2. 7 月 1 日~7 月 3 日功能分析,模块设计,编写程序,调试程序 3. 7 月 4 日答辩后撰写设计报告。 四. 程序流程图: 写源程序 ( 保 存 在 文 本文档中) 将 文 档 后 缀 名由.TXT 改 为.ASM 将 文 件 10.asm 移 到 masm1 文 件 夹中 打 开 命 令 提 示 符 , 调 出 10.asm 进 行 汇编 写实验报告 ( 实 验 完 成) 汇 编 成 功 后 , 进 行 命 令显示功能 五. 源程序: data segment table db 10 dup(?) table1 db 'PLEASE INPUT 0-3:$' table2 db '1:BLOCK 2:LIFT TRIANGLE 3:RIGHT TRIANGLE 0:exit$' table3 db 'WARNING:PLEASE INPUT 0-3$' data ends code segment assume cs:code main proc far push ds sub ax,ax push ax mov ax,data mov ds,ax lea dx,t
able2 mov ah,9 int 21h call back t: lea dx,table1 mov ah,9 int 21h mov ah,1 int 21h mov bl,al call back cmp bl,30h jz q cmp bl,31h jz n cmp bl,32h jz m cmp bl,33h jz o lea dx,table3 mov ah,9 int 21h call back jmp t n: call block jmp t m: call triangle jmp t o: call triangle1 jmp t q: mov ax,4c00h int 21h main endp block proc near mov al,1 mov ch,1 mov bl,al mov bh,10d mov si,9 x: mul ch div bh mov dh,al mov cl,ah call output inc ch mov al,bl sub si,1 jnz x call back inc bl mov al,bl mov ch,1 mov si,9 cmp bl,10 jnz x ret block endp triangle proc near mov al,1 mov ch,1 mov bl,al mov bh,bl y: mov dh,10d mul ch div dh mov dh,al mov cl,ah call output inc ch mov al,bl dec bh jnz y call back inc bl mov al,bl mov ch,1 mov bh,bl cmp bl,10 jnz y ret triangle endp triangle1 proc near mov al,1 mov ch,1 mov bl,al mov bh,bl mov dh,56 mov table,dh
z: cmp dh,0 jz w call space dec dh jnz z w: mov dh,10d mul ch div dh mov dh,al mov cl,ah call output inc ch mov al,bl dec bh jnz w call back inc bl mov al,bl mov ch,1 mov bh,bl sub table,7 mov dh,table cmp bl,10 jnz z ret triangle1 endp output proc near add bl,30h mov dl,bl mov ah,2 int 21h mov dl,'*' mov ah,2 int 21h add ch,30h mov dl,ch mov ah,2 int 21h mov dl,'=' mov ah,2 int 21h add dh,30h mov dl,dh mov ah,2 int 21h add cl,30h mov dl,cl mov ah,2 int 21h mov dl,' ' mov ah,2 int 21h sub bl,30h sub ch,30h ret output endp back proc near mov dl,0Ah mov ah,2 int 21h mov dl,0Dh mov ah,2 int 21h ret back endp space proc near push dx push ax mov dl,' ' mov ah,2 int 21h pop ax pop dx ret space endp code ends end 六. 实验结果输出:
实验总结:通过此次实验使我对许多陌生的程序代码有了认识, 让我对学习汇编方面的知识获益非浅。
分享到:
收藏