汇编课程设计 四位无符号十进制数乘法程序概要.docx

上传人:b****8 文档编号:23645126 上传时间:2023-05-19 格式:DOCX 页数:8 大小:33.89KB
下载 相关 举报
汇编课程设计 四位无符号十进制数乘法程序概要.docx_第1页
第1页 / 共8页
汇编课程设计 四位无符号十进制数乘法程序概要.docx_第2页
第2页 / 共8页
汇编课程设计 四位无符号十进制数乘法程序概要.docx_第3页
第3页 / 共8页
汇编课程设计 四位无符号十进制数乘法程序概要.docx_第4页
第4页 / 共8页
汇编课程设计 四位无符号十进制数乘法程序概要.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

汇编课程设计 四位无符号十进制数乘法程序概要.docx

《汇编课程设计 四位无符号十进制数乘法程序概要.docx》由会员分享,可在线阅读,更多相关《汇编课程设计 四位无符号十进制数乘法程序概要.docx(8页珍藏版)》请在冰豆网上搜索。

汇编课程设计 四位无符号十进制数乘法程序概要.docx

汇编课程设计四位无符号十进制数乘法程序概要

华北科技学院

课程设计说明书

课程名称:

汇编语言

班级:

计算机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-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 可爱清新

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1