编程输出九九乘法表.doc_第1页
编程输出九九乘法表.doc_第2页
编程输出九九乘法表.doc_第3页
编程输出九九乘法表.doc_第4页
编程输出九九乘法表.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要.九九乘法表输出是应用 masm.exe、link.exe、debug.exe等汇编语言软件进行编译链接及执行目的程序的方法来实现。并且认识和利用 DOS系统下的 21h函数的 02功能号来进行单个字符的输出.程序设计的过程中用到循环和子函数的思想。模块化的程序设计思想有利于源代码代码的编写.错误的查找和修改同时可以分步来调试程序减少工作量乘法表的输出没有乘数和被乘数只有乘积的结果输出。关键词:汇编语言程序设计、微机原理、九九乘法表、dos中断系统导入语前 言汇编语言是一门程序设计语言,学习程序设计的思想与方法既是学习的重点也是难点,课设的目标就是要帮助读者提高程序设计的能力,较深入地掌握汇编语言程序设计的思想与方法。学习汇编语言时,有些同学已经学习过例如C语言等高级语言,将为我们理解程序设计的思想打下良好基础;但也可能从未学习过其他语言,虽然框框较少,但建立计算机语言与程序设计的概念将是一大难题。汇编语言是多类知识交叉的学科,一部分知识往往还连带着其他的相关内容,如果处理不好这些连带的内容,将影响学习者对当前知识点的理解。但是如果先扫清外围,例如先介绍CPU与存储器的内部结构、数据形式,再介绍指令与指令系统、程序设计方法,虽然可以做到内容单一,也容易接受,但教学未以程序设计为线索展开,可能在开始学习后相当长一段时间里不接触汇编语言程序设计的内容,将令学习过程抽象无趣。本书考虑到这些情况,采用了实践先行的方法,以一个完整的程序实例引导,首先通过演示与动手,对程序设计及一些基本概念、基本方法建立感性认识,从而屏蔽了一些相关知识带来的干扰,在此基础上再逐一展开。学习的过程除了理解还有记忆与模仿,人们往往都是从死记、模仿走向创新的,实践引导的过程将为模仿创造条件,也提供了记忆的线索与内容。以程以程序为线索展开,将使我们在整个学习过程中的每一步都目标明确,主题清晰,基础扎实,在不知不觉中登上程序设计的颠峰。汇编语言的主要用途之一是涉及硬件的开发,目前社会对具有一定硬件基础的计算机 人才需求较旺,本书围绕输入、输出程序设计介绍了若干常用芯片的结构与程序设计方法,即加强了涉及硬件的程序设计技术的教学,也有助于提高设计实际应用系统的能力。目录 一、设计内容与要求 . 1二、设计思想. 2三、工作原理. 3四、程序流程图. 4五、程序运行结果截图. 5六、程序源代码 . 6七、设计过程中遇到的问题及解决方法 . 10八、设计心得 . 11九、致谢. 12十、参考文献 . 13一、设计要求 创建文本文件:编写源代码.把文件保存在有 masm.exe link.exe等汇编软件的文件夹下.文件后缀名改为 asm.比如九九乘法表输出 .asm.。 开启电脑在“开始”“运行”输入“ cmd”命令进入 DOS的字符操作界面 编译链接程序代码查看源程序是否有错误有错误则加以修改。程序编译链接没有错误的情况下执行目标程序.查看结果的输出情况并用 debug命令查看内存的变化。 按要求撰写设计报告。二、设计思想九九乘法表输出程序主要用到一个嵌套循环.和两个过程.外层循环用 bl保存并记录.外循环每执行一次. bl的值加一。内循环用bh保存并记录.如果bh的值小于bl的值则执行内循环.内循环中每盒 bl比较一次.成立则值加一不成立则转到换行子函数执行.同时也比较外循环是否继续满足条件执行.即比较 bl的值是否小于 10.小于就执行外循环.否则就结束程序。设计 dis子函数.把内存中的 16进制数转换成 10进制.设计的 disp子函数是把十进制转化成 ASCLL码.并输出乘积.这样得到的显示的结果就是我们看到的10进制数。子函数 output_ctl的功能是换行.当内循环变量 bh的值大于外循环值 bl时.调用这个函数.使得输出的结果风有序.输出的结果更容易体现嵌套循环。三、工作原理九九乘法表输出是简单的乘法.实现了19之间的数字相互相乘.并且把结果输出.利用 masm.exe、link.exe debug.exe等汇编语言软件。设计算法编写源代码.设计一个循环结构来循环相乘.直到完成 9*9.比较退出程序。同时还设计到数数制的转换问题.内存中的数据是 16进制.而我们习惯看到的是 10进制数.通过 16进制转换成 10进制.在转成通用 ascll码输出显示.同时还用到DOS的中断调用。4、 程序流程图 五、程序运行结果截图六、程序源代码 data segment table dw 81 dup(0) data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov di,offset table ;di指向table的首地址 00h mov bl,1 ;外循环值 mul_1: mov bh,1 ;内循环值 mul_2: push cx ;压栈 ;输出第一个外循环值 mov dl,bl or dl,30h mov ah,02h int 21h ;输出乘号 mov dl,x mov ah,02h int 21h ;输出第一个内循环值 mov dl,bh or dl,30h mov ah,02h int 21h ;输出等号 mov dl,= mov ah,02h int 21h mov al,bh ;把bh的值赋给al寄存器中mulbl ;乘法指令al与bl相乘.结果放入al中 mov di,al ;di指向乘的结果 call dis ;调用子函数dis mov dl,0h ;输出空格 mov ah,2 int 21h mov dl,0h ;输出空格 mov ah,2 int 21h add di,2 ;di指向它的下一个地址 pop cx inc bh ;自加一指令 cmp bh,bl ;比较语句. bh小于bl执行 jbe语句.否则执行 ;call output_ctle语句 jbe mul_2 ;跳转指令.返回mul_2处.实现循环 call output_ctle ;程序调用指令 inc bl cmp bl,10 ;比较语句. bl小于 10执行 jb语句.否则执行程 ;序结束指令 jb mul_1 jmp exit ;无条件转移指令 ; output_ctle函数功能.输出回车换行 output_ctle proc Near push ax ;压栈语句 push dx mov ah,02h ;dos中断下的单个字符输出功能 mov dl,0dh ;0d是回车的ascll码值 int 21h mov ah.02h mov dl,0ah ;0a是换行的 ascll码值 int 21h pop dx ;出栈语句 pop ax ret output_ctle endp ;子函数 dis结束 ;dis功能.在系统内数据是16进制的.乘的结果大于 10,则需要转化成 10进制数但是不输出.首先判断数据是否大于 10.大于 10的除以 10,余数放在dl中. dis proc near ;子函数 dis开始 push ax push dx mov dh,10 cmp ax,10 jb next1 ;ax的值低于10转向 next1 div dh ;ax的值高于 10除以 10.结果存在 ax中 call disp ;子函数调用语句 mov al,ah next1: call disp pop dx pop ax ret dis endp ;子函数 dis结束.一. dis子函数的流程图如下 开始主函数给子函数的参数10调用子函数disp A的值除以十结束;disp的函数功能.把 dis的十进制数转换成 ASCII码.并输出。实现.十进制和 ASCII ;码相差 30h.即把这个十进制数加上 30h.就转换成 ASCII码.并把乘数的结果输出 disp proc near ;子函数 disp开始 push ax push bx mov dl,al add dl,30H ;加法指令 mov ah,2 int 21h pop bx pop ax ret disp endp ;子函数 disp结束 exit: ;结束退出语句 mov ah,4ch int 21hcode ends end start end startdisp子函数的流程图如下di函数给di子函数赋处参数执行ascll码转换指令输出ascll码值结束六、设计过程中遇到的问题及解决方法首先.遇到的问题是计算机的识别问题.计算机内部只唯一认识2进制代码.为了更好的存储信息.计算机用十六进制数存储数据.设计之初.我反复思考自己的算法没有问题.但是总是的不到想要的结果.利用 debug命令查看内存的情况也正确.后来在网上百度论坛上发帖找到答案.设计了两个子函数来处理这个问题.一个是 dis函数.一个是 disp函数之后再编译链接.执行目的程序得到预计的结果。其次.就是子函数的解决问题.编写源代码的的习惯问题.语句不是成对出现. push和 pop语句出错.导致运行链接正确.而没有正确的结果.原因是没有按顺序出栈或者不出栈.使得内存没有正确释放或者不释放引起的。在仔细阅读 IBM_PC汇编语言这本书的子函数设计一章后.加大了对子函数的认识.并修改解决上面问题。最后.问题设计初.用到的是指定循环次数.利用 loop语句来实现循环.这样结果就想一个长方形的输出.每个数相互乘了两次.同时输出两次结果.所以得到的结果不像我们使用的九九乘法表。后来使用判断跳转指令来实现循环.首先判断内循环值和外循环值的大小决定是否继续乘法.再通过外循环值和10比较决定继续执行程序还是退出程序。七、设计心得通过九九乘法表输出程序的编写.首先我更加的认识到计算机内部的运行.对计算机的认识加深.计算机的内存使用情况.它是怎样运行的有更大的理解。其次通过自己编写源代码.了解到汇编语言和高级编程的语言的区别.汇编语言更难理解和翻译但是在计算机内部却容易被计算机识别.汇编的关键字很多.存储器很有限.合理的利用和释放存储器至关重要.每利用一个存储器在后面用到时必须查看是否已经释放这个存储器.否则就会出现编译链接没错误.但是运行结果有误的情况。最后就是对 debug命令操作加深. debug命令是用来辅助汇编语言软件使用.也可以单 独编程。可以帮助我们查看内存的具体的使用情况. -u指令来查看部分内存. -g用来执行程序.单步运行可以使用 -t命令.还可以跳转到指定位置执行.在有设计子函数的程序中.利用debug命令是非常有必要的。致谢编程对算法的分析很重要.无论是用什么语言来编程.算法是不会变化的.设计一个良好的算法.不仅可减少计算机内存的使用.还可以加快程序的运行.就像我在第一次设计的时候使用的循环结构就很不合理.使得的工作量加大一倍.而且得到的结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论