汇编语言课程设计编写两个四位无符号十进制数乘法程序

玛丽莲梦兔
720次浏览
2020年08月03日 18:50
最佳经验
本文由作者推荐

党员对照检查材料-祝老师新年快乐



华 北 科 技 学 院


课程设计说明书


课程名称: 汇编语言
班级: 计算机B08-2 姓名:_ 朱云峰 _
学号:__ 2 __
设计题目:
编写两个四位无符号十进制数乘法程序

设计时间:
2010年6月23日

2010年 6月30日

指导教师:___ ___ 杜杏菁______ ____ _
评 语:____________________________ _____
_____________________________________ ___
_________________________________________
________________________________________ _
_________________________________________
评阅成绩:
__ __
评阅教师:
__ __







一、课程设计目的
进 行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计
的基本知识和基本方法,通过实际 动手能力的培养,进一步熟悉汇编语言的结构
和使用方法,达到能独立阅读、编制和调试一定规模的汇编 语言程序的水平。
二、课程设计要求
1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。
2.遵循模块化、结构化的程序设计方法。
3.要求程序必须正确。
4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
5.要求程序结构合理,语句使用得当。
6.适当追求编程技巧和程序运行效率。
三、课程设计题目:
编写两个四位无符号十进制数乘法程序。

四、课题分析
计算用的数据要求从键盘输入,而且应该不止一次地输入,所以应该通过定义,调用子程序来实现;在输入的子程序重要加入ASCII码的转换,将输入的数
据转换为机器能 计算的数据;在输入子程序中要加入输入数据的判断,只能把数
据限制在数字键,令其他输入显示为错误 ;接下来是计算过程,得到的结果也同
样是计算机能够识别的ASCII码;最后是输出显示部分,该部 分也应该被定义为
子程序,加入数值的转换,使输出的数据为十进制数,调用9号功能,将计算结
果显示在屏幕上。
五、流程图:
- 1 -






- 2 -


六、程序源代码:
.MODEL SMALL
.386

DATA SEGMENT
FLAG_SIGN DB 0
FLAG_NUM1 DB 0
FLAG_NUM2 DB 0
TEMP DD 0
ARRAY DD 16 DUP(0)
ERR DB 0DH,0AH,'Input error!',0DH,0AH,'$$'
STRING DB 0AH,0DH,0AH,0DH,'Please Input(eg. A*B= ) $$'
STRIN DB 0AH,0DH,0AH,0DH,'(
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX

AGAIN:
LEA DX,STRING
MOV AH,9
INT 21H
LEA DX,STRIN
MOV AH,9
INT 21H
MOV EBX,OFFSET ARRAY
MOV FLAG_SIGN,0
MOV FLAG_NUM1,0
MOV FLAG_NUM2,0
L_Input0:
XOR EDX,EDX
XOR ECX,ECX
XOR EAX,EAX
MOV AH,1
INT 21H
CMP AL,'+'
JZ L_Input1
CMP AL,'-'
JNZ L_Number
NOT FLAG_SIGN
L_Input1:
- 3 -


MOV AH,1
INT 21H
L_Number:
CMP AL,'0'
JB L_Operator
CMP AL,'9'
JA L_Operator
SUB AL,30H
ADD EDX,EDX
MOV ECX,EDX
ADD ECX,ECX
ADD ECX,ECX
ADD EDX,ECX
MOV AH,0
ADD EDX,EAX
MOV FLAG_NUM1,1
JMP L_Input1
L_Operator:
CMP AL,'*'
JNZ L_Equal
CMP FLAG_NUM1,0
JZ ER
MOV [BX],EDX
ADD BX,4
MOV FLAG_NUM1,0
MOV FLAG_NUM2,1
JMP L_Input0
L_Equal:
MOV [BX],EDX
CMP AL,'='
JNZ L_Quit1
MOV BL,FLAG_NUM1
MOV CL,FLAG_NUM2
CMP BL,CL
JNZ ER
CMP FLAG_SIGN,0
JZ L_Cal
MOV DL,'-'
MOV AH,2
INT 21H
L_Cal:
MOV CX,0
MOV SI,CX
MOV EAX,ARRAY[SI+4]
- 4 -


MOV EBX,ARRAY[SI]
MUL EBX
MOV EBX,1000000000
DIV EBX
MOV TEMP,EAX
CALL BINTOASCII
MOV TEMP,EDX
CMP TEMP,0
JZ Show_0
CALL BINTOASCII
JMP AGAIN
Show_0:
MOV CX,9
Display:
MOV DL,'0'
MOV AH,2
INT 21H
DEC CX
CMP CX,0
JNZ Display
JMP AGAIN
L_Quit1:
CMP AL,'Q'
JNZ L_Quit2
JMP L_Quit
L_Quit2:
CMP AL,'q'
JNZ ER
JMP L_Quit
ER:
MOV DX,OFFSET ERR
MOV AH,9
INT 21H
JMP AGAIN
L_Quit:
MOV AH,4CH
INT 21H

BINTOASCII PROC
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EAX,TEMP
- 5 -


MOV EBX,10
PUSH BX
B3:
CMP EAX,0
JZ B4
SUB EDX,EDX
DIV EBX
ADD DL,30H
PUSH DX
JMP B3
B4:
POP DX
CMP DL,10
JE B5
MOV AH,2
INT 21H
JMP B4
B5:
POP EDX
POP ECX
POP EBX
POP EAX
RET
BINTOASCII ENDP

CODE ENDS
END START


七、结果显示





- 6 -


八、感想、收获及体会
通过此次编程实践,我又得到了一种全新的体验。
本次的实践与以往的上课实践不同,上课的 时候老师让我们把所教授的知识
重新实践,加强巩固,已达到融会贯通的目的;而此次的编程实践却是自 己选题
目自己查找资料,通过自学来掌握所需知识,这需要一定的毅力与智慧。
在第一天选课 的时候,记得老师跟我们说过,根据自己的实际情况,自己的
学习水平,与参考考试成绩来选题,而我的 编程水平没有想象中的那么好,所以
我选了一个比较适合我自己的题目:双字乘法程序。题目看似简单, 但其实不然,
对于我这个编程新手来说,这道题目并不容易,其中有很多东西老师在课堂上没
有 教过,只能自己通过自学来掌握。通过自学与同学交流,我逐渐掌握编程所需
的知识要点,并逐步实施实 践,在同学们的大力帮助下,终于完成了作品。完成
时的那种愉悦,不言而喻。
而最大的收获 莫过于得到了一份珍贵的编程经验,一份辛苦的结晶。这些在
不断鼓励我继续向前,希望以后能有更大的 收获。
其实在我看来,编程就是一场战争,你需要排兵布阵,你需要观察敌情,你
需要苦思冥 想做出判断,你需要沙场秋点兵的那种魄力。当你面对伪装的敌人时,
你不能认清它的真实面孔,就盲目 地出兵讨伐,必然吃败仗。所以我做好了全面
的准备,经过仔细的推敲与思考,最终做出了程序。但还有 一些不完善的地方,
由于时间比较短,所以没能修改得很完善。希望老师见谅。
- 7 -



华 北 科 技 学 院


课程设计说明书


课程名称: 汇编语言
班级: 计算机B08-2 姓名:_ 朱云峰 _
学号:__ 2 __
设计题目:
编写两个四位无符号十进制数乘法程序

设计时间:
2010年6月23日

2010年 6月30日

指导教师:___ ___ 杜杏菁______ ____ _
评 语:____________________________ _____
_____________________________________ ___
_________________________________________
________________________________________ _
_________________________________________
评阅成绩:
__ __
评阅教师:
__ __







一、课程设计目的
进 行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计
的基本知识和基本方法,通过实际 动手能力的培养,进一步熟悉汇编语言的结构
和使用方法,达到能独立阅读、编制和调试一定规模的汇编 语言程序的水平。
二、课程设计要求
1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。
2.遵循模块化、结构化的程序设计方法。
3.要求程序必须正确。
4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
5.要求程序结构合理,语句使用得当。
6.适当追求编程技巧和程序运行效率。
三、课程设计题目:
编写两个四位无符号十进制数乘法程序。

四、课题分析
计算用的数据要求从键盘输入,而且应该不止一次地输入,所以应该通过定义,调用子程序来实现;在输入的子程序重要加入ASCII码的转换,将输入的数
据转换为机器能 计算的数据;在输入子程序中要加入输入数据的判断,只能把数
据限制在数字键,令其他输入显示为错误 ;接下来是计算过程,得到的结果也同
样是计算机能够识别的ASCII码;最后是输出显示部分,该部 分也应该被定义为
子程序,加入数值的转换,使输出的数据为十进制数,调用9号功能,将计算结
果显示在屏幕上。
五、流程图:
- 1 -






- 2 -


六、程序源代码:
.MODEL SMALL
.386

DATA SEGMENT
FLAG_SIGN DB 0
FLAG_NUM1 DB 0
FLAG_NUM2 DB 0
TEMP DD 0
ARRAY DD 16 DUP(0)
ERR DB 0DH,0AH,'Input error!',0DH,0AH,'$$'
STRING DB 0AH,0DH,0AH,0DH,'Please Input(eg. A*B= ) $$'
STRIN DB 0AH,0DH,0AH,0DH,'(
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX

AGAIN:
LEA DX,STRING
MOV AH,9
INT 21H
LEA DX,STRIN
MOV AH,9
INT 21H
MOV EBX,OFFSET ARRAY
MOV FLAG_SIGN,0
MOV FLAG_NUM1,0
MOV FLAG_NUM2,0
L_Input0:
XOR EDX,EDX
XOR ECX,ECX
XOR EAX,EAX
MOV AH,1
INT 21H
CMP AL,'+'
JZ L_Input1
CMP AL,'-'
JNZ L_Number
NOT FLAG_SIGN
L_Input1:
- 3 -


MOV AH,1
INT 21H
L_Number:
CMP AL,'0'
JB L_Operator
CMP AL,'9'
JA L_Operator
SUB AL,30H
ADD EDX,EDX
MOV ECX,EDX
ADD ECX,ECX
ADD ECX,ECX
ADD EDX,ECX
MOV AH,0
ADD EDX,EAX
MOV FLAG_NUM1,1
JMP L_Input1
L_Operator:
CMP AL,'*'
JNZ L_Equal
CMP FLAG_NUM1,0
JZ ER
MOV [BX],EDX
ADD BX,4
MOV FLAG_NUM1,0
MOV FLAG_NUM2,1
JMP L_Input0
L_Equal:
MOV [BX],EDX
CMP AL,'='
JNZ L_Quit1
MOV BL,FLAG_NUM1
MOV CL,FLAG_NUM2
CMP BL,CL
JNZ ER
CMP FLAG_SIGN,0
JZ L_Cal
MOV DL,'-'
MOV AH,2
INT 21H
L_Cal:
MOV CX,0
MOV SI,CX
MOV EAX,ARRAY[SI+4]
- 4 -


MOV EBX,ARRAY[SI]
MUL EBX
MOV EBX,1000000000
DIV EBX
MOV TEMP,EAX
CALL BINTOASCII
MOV TEMP,EDX
CMP TEMP,0
JZ Show_0
CALL BINTOASCII
JMP AGAIN
Show_0:
MOV CX,9
Display:
MOV DL,'0'
MOV AH,2
INT 21H
DEC CX
CMP CX,0
JNZ Display
JMP AGAIN
L_Quit1:
CMP AL,'Q'
JNZ L_Quit2
JMP L_Quit
L_Quit2:
CMP AL,'q'
JNZ ER
JMP L_Quit
ER:
MOV DX,OFFSET ERR
MOV AH,9
INT 21H
JMP AGAIN
L_Quit:
MOV AH,4CH
INT 21H

BINTOASCII PROC
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EAX,TEMP
- 5 -


MOV EBX,10
PUSH BX
B3:
CMP EAX,0
JZ B4
SUB EDX,EDX
DIV EBX
ADD DL,30H
PUSH DX
JMP B3
B4:
POP DX
CMP DL,10
JE B5
MOV AH,2
INT 21H
JMP B4
B5:
POP EDX
POP ECX
POP EBX
POP EAX
RET
BINTOASCII ENDP

CODE ENDS
END START


七、结果显示





- 6 -


八、感想、收获及体会
通过此次编程实践,我又得到了一种全新的体验。
本次的实践与以往的上课实践不同,上课的 时候老师让我们把所教授的知识
重新实践,加强巩固,已达到融会贯通的目的;而此次的编程实践却是自 己选题
目自己查找资料,通过自学来掌握所需知识,这需要一定的毅力与智慧。
在第一天选课 的时候,记得老师跟我们说过,根据自己的实际情况,自己的
学习水平,与参考考试成绩来选题,而我的 编程水平没有想象中的那么好,所以
我选了一个比较适合我自己的题目:双字乘法程序。题目看似简单, 但其实不然,
对于我这个编程新手来说,这道题目并不容易,其中有很多东西老师在课堂上没
有 教过,只能自己通过自学来掌握。通过自学与同学交流,我逐渐掌握编程所需
的知识要点,并逐步实施实 践,在同学们的大力帮助下,终于完成了作品。完成
时的那种愉悦,不言而喻。
而最大的收获 莫过于得到了一份珍贵的编程经验,一份辛苦的结晶。这些在
不断鼓励我继续向前,希望以后能有更大的 收获。
其实在我看来,编程就是一场战争,你需要排兵布阵,你需要观察敌情,你
需要苦思冥 想做出判断,你需要沙场秋点兵的那种魄力。当你面对伪装的敌人时,
你不能认清它的真实面孔,就盲目 地出兵讨伐,必然吃败仗。所以我做好了全面
的准备,经过仔细的推敲与思考,最终做出了程序。但还有 一些不完善的地方,
由于时间比较短,所以没能修改得很完善。希望老师见谅。
- 7 -

朱广沪-精神文明建设实施方案


俄罗斯红场-封顶标语


田振崴-商场促销


可贵的沉默教学设计-大班语言公开课教案


积极分子转预备党员思想汇报-气象谚语大全


新税法-初一周记300字


出版专业资格考试-红梅公园


汽车保险新规-便民服务中心工作总结