汇编课程设计 四位无符号十进制数乘法程序概要.docx
《汇编课程设计 四位无符号十进制数乘法程序概要.docx》由会员分享,可在线阅读,更多相关《汇编课程设计 四位无符号十进制数乘法程序概要.docx(8页珍藏版)》请在冰豆网上搜索。
汇编课程设计四位无符号十进制数乘法程序概要
华北科技学院
课程设计说明书
课程名称:
汇编语言
班级:
计算机B08-1姓名:
__王松_学号:
__200807014101__设计题目:
__编写两个四位无符号十进制数乘法程序设计时间:
2010/6/21至2010/7/2指导教师:
李冬艳
评语:
_____________________________________________________________________________________________________________________________________________________________________________________________________评阅成绩评阅教师:
一、课程设计目的
进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二、课程设计要求
1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。
2.遵循模块化、结构化的程序设计方法。
3.要求程序必须正确。
4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
5.要求程序结构合理,语句使用得当。
6.适当追求编程技巧和程序运行效率。
三、课程设计题目:
编写两个四位无符号十进制数乘法程序
四、课题分析
由于题目要求从外设输入输出数据,而在内存中用二进制数形式实现乘法,所以涉及到代码转换问题。
步骤如下:
从键盘输入两个十进制乘数(ASCII码→分别转换成二进制形式→二进制数乘→把二进制乘积转换成十进制数的ASCII码形式→输出到屏幕。
五、流程图:
六、程序源代码:
CodeSegment
AssumeCS:
Code,DS:
Code
CRequ000DH
LFequ000AH
KBBackequ0008H
;-----------------------------------------
;功能:
显示指定地址(Str_Addr的字符串
;入口:
;Str_Addr=字符串地址(要求在数据段
OutputMACROStr_Addr
leadx,Str_Addr
movah,9
int21h
EndM
;-----------------------------------------
;功能:
输出回车换行
Output_CTLFprocNear
pushax
pushdx
movah,02h
movdl,0dh
int21h
movdl,0ah
int21h
popdx
popax
ret
Output_CTLFendp
;-----------------------------------------
;功能:
取光标位置
;入口:
无
;出口:
DH=行号,DL=列号
GetCursorProcNear
PUSHAX
PUSHBX
PUSHCX
XORBX,BX
MOVAH,3
INT10H
MOVCursor_Row,DH
MOVCursor_Col,DL
POPCX
POPBX
POPAX
RET
Cursor_RowDB?
Cursor_ColDB?
GetCursorEndP
;-----------------------------------------
;功能:
置光标位置
;入口:
Cursor_Row=行坐标;Cursor_Col:
列坐标
SetCursorProcNear
PUSHCX
PUSHBX
PUSHAX
MOVDH,Cursor_Row
MOVDL,Cursor_Col
XORBX,BX
MOVAH,2
INT10H
POPAX
POPBX
POPCX
RET
SetCursorEndP
;-----------------------------------------
;功能:
键盘输入一个N位的十进制数字,将其转换成二进制数并保存在指定的内存单元。
;入口:
N=数字位数;di=保存输入的数字首地址
;出口:
转换后的二进制数保存在di所指的单元
Input_DigitProcNear
pushdx
pushcx
pushbx
pushdi
leadi,@@Save_Tmp
pushdi
cld
movcx,N
pushcx
@@Input:
callGetCursor;取光标位置
movah,1;从键盘接受一个字符
int21h
cmpal,CR;若键入的是回车,已经键入的数字不足N位
jz@@ASC_Dec;转去处理已经键入的数字
cmpal,KBBack
jz@@KB_Back;若是回空键,重新输入
cmpal,'0'
jb@@KBBack;若低于数字'0',重新输入
cmpal,'9'
ja@@KBBack;若高于数字'9',重新输入
jmp@@Save_Dig
@@KB_Back:
decCursor_Col
inccx
decdi
@@KBBack:
callSetCursor;置光标位置
jmp@@Input
@@Save_Dig:
andal,0fh;转换成二进制数
stosb;保存
loop@@Input;接受下一个数字
@@ASC_Dec:
movax,cx
popcx
popsi
subcx,ax;实际输入的数字位数
xorbp,bpxordx,dxxorax,axjcxz@@Save_Ret;若直接回车,没有输入任何数字,按输入'0'处理deccx;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数jcxz@@One_Digit;若输入的数字只有一位,转去直接保存这个二进制数movbx,10@@Mul_Ten:
lodsb;串操作指令cbwaddax,bpmulbxmovbp,axloop@@Mul_Ten@@One_Digit:
lodsbcbwaddax,bp@@Save_Ret:
popdistosw;存入串指令的字操作popbxpopcxpopdxret@@Save_Tmpdb16dup(?
Input_DigitEndP;-----------------------------------------;功能:
28位二进制数转换成十进制数并显示;入口:
DX=高12位,AX=低16位@@Temp_Savedb11dup(?
DWord_ASCIIProcNearcldmovbx,10000;除数leadi,@@Temp_Save[10]movbyteptr[di],'$';字符串末尾加上一个$,以备用dos功能调用9号功能显示这个数字串decdi;地址前移一位divbx;除以1000,AX=商数(十进制数高5位,DX=余数(十进制数低4位xchgax,dx;交换,先转换余数pushdx;入栈保存商数movbx,10;除数,把16位二进制数转换成十进制数movcx,4@@Divide_DX:
xordx,dxdivbxordl,30h-5-
mov[di],dldecdiloop@@Divide_DXpopax@@Divide_AX:
xordx,dxdivbxordl,30hmov[di],dldecditestax,0ffffhjnz@@Divide_AXincdipushdipopdxmovah,9int21hretDWord_ASCIIEndP;-----------------------------------------Nequ4;输入的十进制整数位数Number1dw?
Number2dw?
prompt_Onedb'Pleasethefirstnumber:
$'prompt_Twodb13,10,'Pleasethesecondnumber:
$'Start:
pushcspopdspushcspopes;使数据段、附加段与代码段同段Outputprompt_One;提示输入第一个数leadi,Number1;变量Number1的地址callInput_Digit;从键盘接受一个N位数字Outputprompt_Two;提示输入第一个数leadi,Number2;变量Number2的地址callInput_Digit;从键盘接受一个N位数字callOutput_CTLF;输出一个回车、换行callOutput_CTLF;输出一个回车、换行movax,Number1;被乘数mulNumber2callDWord_ASCII;将乘积转换成十进制数并显示Exit_Proc:
movah,4ch;结束程序int21hCodeENDSENDStart;编译到此结束-6-
七、结果显示八、感想、收获及体会感想、近两周的汇编语言课程设计结束了,我的收获很大。
通过课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。
通过这次课程设计,我巩固所了学过的知识,能用汇编语言运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用DEBUG指令。
在整个程序的编写中,调试占了很大部分的时间。
要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。
通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,有弄不懂的地方可上网查查,也可上图书馆查找,基本上能独立阅读、编制和调试小规模的汇编语言程序。
。
-7-