16-位汇编语言程序设计方法探索

上传人:日度 文档编号:146138024 上传时间:2020-09-27 格式:DOC 页数:9 大小:70KB
返回 下载 相关 举报
16-位汇编语言程序设计方法探索_第1页
第1页 / 共9页
16-位汇编语言程序设计方法探索_第2页
第2页 / 共9页
16-位汇编语言程序设计方法探索_第3页
第3页 / 共9页
16-位汇编语言程序设计方法探索_第4页
第4页 / 共9页
16-位汇编语言程序设计方法探索_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《16-位汇编语言程序设计方法探索》由会员分享,可在线阅读,更多相关《16-位汇编语言程序设计方法探索(9页珍藏版)》请在金锄头文库上搜索。

1、宁 波 工 程 学 院学年论文论 文 题 目: 16 位汇编语言程序设计方法探索 学 院 名 称: 专 业: 学 生 姓 名: 学号: 指 导 教 师: 起讫时间: 年 月 日 至 年 月 日16位汇编语言程序设计方法探索xx(宁波工程学院 电气工程及其自动化,浙江 宁波 082027)摘 要:为了研究汇编语言的编程技巧,通过对分支结构程序的实际例子,进行了多种方法编写,并对各种方法进行比较,分析了如何有效精简程序的长度,为以后编写较大程序打好基础。关键词:编程技巧;汇编语言;分支结构16-bit assembly language programming methods to explore

2、YAO Dong(Electrical Engineering and Automation ,NingBo University of Technology,Ningbo,082071,China)Abstract: In order to study assembly language programming skills, through practical examples of the branch structure of the program, were prepared by various methods, and comparison of methods to anal

3、yze how to effectively streamline the procedures for the length of the program for the future lay the foundation for the preparation of larger .Key words: programming skills; assembly language; branch structure引言汇编语言是一种面向机器的程序设计语言,是一种低级语言,与那些高级语言相比而言,代码的长度过于长,开发效率不高,但是作为一门机器语言还是有其存在的价值的。因此,对于这种又长又难懂

4、的语言,需要有良好的编程习惯,并且需要对计算机硬件有一定了解,掌握一定的编程技巧。1 汇编程序设计方法介绍汇编语言的程序结构跟各种语言基本上类同,都分为顺序结构,分支结构,循环结构这三大块结构类型,综合性的程序则是综合了以上几种结构的结合体。汇编语言编写起来无关乎定义数据段,堆栈段(在需要用到大量数据的时候使用),代码段这几个程序的主干部分,因此有必要先把这几个段的功能做一个简单的介绍。数据段:通常是指用来存放程序中已初始化的全局变量的一块内存区域,它属于静态内存分配,因此定义数据段很重要的一块就是要分配好全局变量的地址,有效的分配地址对程序的运行速度和编写效率都有很大的帮助。堆栈段:是用来存

5、放局部变量和函数返回地址的,而且它是在程序运行时动态分配使用,只需要通过栈顶指针即可访问,因此,在要求大量使用数据或者一个数据在多个子程序被多次使用到时,为了方便可以在程序里面定义堆栈段,但是一般的小程序是不需要用到堆栈段,可以根据系统要求来定义一个空的堆栈段。代码段:通常是指用来存放程序执行代码的一块内存区域,这部分区域的大小在程序运行前就已经确定了,并且在内存区域内通常属于只读, 但是某些架构也是允许代码段为可写的,即允许自修改程序。简而言之,代码段是编写指令的地方,是一个程序的灵魂所在,也是作为一个编程者的编写技巧体现的地方。从上面可以看出,数据段,堆栈段定义没什么技巧可言,而真正的所谓

6、变化是在代码段里面,相比高级语言的变化多端,汇编语言的变化稍显单薄,但是基本上经典的方法都是能够完全还原的。在这里,一个亘古不变的词又出来了,那就是“算法”, 算法是一系列解决问题的清晰指令,而它代表着用系统的方法描述解决问题的策略机制。算法并不是在计算机里面存在的,它是通过人的大脑创造出来的,所以编程的关键是在于对算法的设计,关于“算法”的设计,我会在文章后面结合具体的例子再详细阐述的。由于后面的例子需要,这里再来讲一下DOS中断调用。所谓DOS中断调用,就是为了节省编程工作量与优化程序结构,在DOS中预先设计好了一系列的的通用子程序,以便供DOS调用。由于这种调用采用的是以中断INT n的

7、内部中断方式进行的,因此常称为DOS中断调用;又因为在一个中断程序中往往包含多个功能相对独立的子程序,所以也将中断调用称为系统功能调用或中断功能调用。2 汇编语言与C语言的比较 汇编语言与其他我们常用语言相比,比如C语言或者VB语言这些程序语言来讲,算是直接面向机器的低级语言,本人在这里就以我们常用的C语言作为高级语言的代表,来与汇编语言作比较,而像C语言这种高级语言,因为工作空间内有大量的函数可以调用,并且有能让机器更容易识别的能力,更重要的是也更容易被编写者理解,因此在就设计方法的变化来讲,可以有多得多的变化,并且用汇编语言编写的程序往往都可以被C语言运行来实现的,甚至用C语言可以更加容易

8、,但是汇编语言有一个优势是其他任何语言所不具备的,这也是为什么汇编语言能一直在编程中占有一席之地,那就是汇编语言对硬件的直接控制,也就是说它能直接对硬件操作,可以绕过操作系统等等之类。虽然有的领域的其他编程也能够实现,但是在很多地方上往往是汇编语言能更加简单,更加完美的完成任务。而且学好了汇编语言你就能对CPU是怎么工作的有了清晰的认识,对存储空间的取址方式也能够有更加清晰的认识。 3 设计实例的编写要求与分析3.1编写要求从键盘上输入1个数,判断其奇偶性,如果是奇数,屏幕上显示“It is odd”,否则显示“It is even”。3.2 编程思路分析由于在键盘输入的字符在计算机上读取的是

9、该字符的ASCII码,因此就要想办法去判断输入字符的ASCII码的奇偶性,而ASCII码可以表示成为二进制,并且二进制代码的每一位除了“0”就是“1”,最低位是“0”就是偶数,否则便是奇数。因此在这里算法的关键的就是如何取得输入字符的ASCII码的最后一位并且要来判断是“0”或者“1”。尽管也可以用传统的判断奇偶性的方法也就是将输入字符除以2再拿除出来的余数来判断“0”或者“1”,但是这种方法用汇编语言会显得比较麻烦,因此在这里不采用这种方法。 4 程序 4.1 本人编写的第一种方法这种方法的思路就是先定义数据段,然后再定义代码段,代码段中的算法核心是:键盘输入并显示一个字符循环左移7位循环右

10、移7位(取得字符的最后一位)比较最后一位是“0”或者“1”,是“0”就是偶数,输出“it is even”,是1就是奇数,输出“it is odd”。这里是利用DOS中断调用的1号功能(等待扫描从键盘输入的一个字符,保存并显示在屏幕上)来输入一个字符,利用DOS中断调用的9号功能(显示以$结尾的字符串),来显示要输出的字符串。利用中断调用的4ch号功能来调回到DOS界面,在下面的方法中也是同样。data segment ;开始定义数据段 d1 db please input a number ,0dh,0ah,$ ;此数据段存入“please input a number”这句 d2 db i

11、t is odd ,0ah,$ ;此数据段存入“it is odd”这句 d3 db it is even ,0ah,$ ;此数据段存入 “it is even”这句 data ends ;定义数据段结束 code segment ;开始定义代码段(这里不需要定义堆栈段) assume cs:code,ds:data ;assume伪操作 是指定某个段分配给哪一个段寄存器 start: mov ax,data ;start主程序开始 mov ds,ax ;上面两句是规定数据存取的寄存器 mov dx,offset d1 ;offset伪指令取数据段d1的首地址 mov ah,9 ;9号DOS中

12、断调用int 21h ;在屏幕上输出“please input a number” mov ah,1 ;1号DOS中断调用 int 21h ;键盘任意输入一个字符并将其显示在屏幕上 mov cl,7 ;给cl赋值,为后面的运算用 shl al,cl ;循环左移7位shr al,cl ;循环右移7位cmp al,0 ;比较最后一位是否为“0” ;以上三句是此程序核心,取最后一位与“0”比较判断奇偶。 je a ;若运算结果为“0”,跳入名字为a的程序分支 mov dx,offset d2 ;若运算结果不为“0”,执行下面语句 mov ah,9 ;9号DOS中断调用 int 21h ;这里是在屏幕上输出“it is odd”这句 jmp over ;跳入到over分支程序,退回DOS程序 a: mov dx,offset d3 ;a程序分支是用来显示偶数情况的 mov ah,9 int 21h ;这里是在屏幕上输出“it is even”这句jmp overover: mov a

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号