汇编语言程序设计
- 格式:docx
- 大小:108.37 KB
- 文档页数:12
汇编语⾔程序设计第4章汇编语⾔程序设计§4.1 汇编语⾔的模式⼀、汇编语⾔源程序的⼀般模式[Name 模块名][Title 标题][定义宏][定义数据段][定义附加段][定义堆栈段]定义代码段源程序结束中括号括起的部分可以省略,可见在⼀个汇编语⾔源程序中必须要定义代码段,并且必须有源程序结束指令。
⼆、8086汇编语⾔程序的⼀个例⼦Pg90。
§4.2 语句⾏的构成汇编语⾔中的语句⼀般分为两种类型:指令性语句和指⽰性语句。
指令性语句的格式为:[标号:] 助记符 [操作数1[,操作数2]] [;注释]指⽰性语句的格式为:[名称] 助记符 [参数1,参数2,……] [;注释]标号和名称都是编程⼈员根据需要和⼀定的规则任意取的。
也可以认为汇编语⾔的语句⾏是由标记和分隔符(空格)构成。
⼀、标记1.IBM宏汇编的字符集(1)字母(2)数字符(3)特殊字符2.界符⽤于定界⼀个标记的结束或⼀个标记的开始,本⾝具有⼀定的意义。
3.常量出现在汇编语⾔源程序中的固定值称为常量。
(1)数值常量①⼆进制:以字母B结束。
②⼗进制:以字母D或⽆字母结束。
③⼋进制:以字母Q(或O)结束。
④⼗六进制:以字母H结束。
(2)字符常量指⽤单引号或双引号引起的字符或字符串。
4.标识符由程序员⾃⼰建⽴的字符序列(标号或名称)。
⼀个标识符不能超过31个字符,不能以数字开头。
5.保留字汇编语⾔中具有特殊意义的字符序列。
6.注释⼀⾏中分号以后的部分。
⽤于对⼀段或⼀⾏程序进⾏说明,便于阅读和理解。
⼆、符号具有⼀定意义的字符序列。
1.寄存器名2.变量段属性、偏移属性、类型属性3.标号段属性、偏移属性、类型属性4.常数5.其它三、表达式由操作数和运算符组合⽽成的序列。
1.操作数(1)⽴即数(2)寄存器操作数(3)存储器操作数2.运算符(1)算术运算符+、-、*、/、MOD(求余)(2)逻辑运算符AND、OR、NOT、XOR(3)关系运算符EQ、NE、LT、LE、GT、GE结果为“假”时,返回0,结果为“真”时,返回⼆进制全1。
汇编语言程序设计实验要求一、实验目的1.理解计算机的基本组成结构和运行原理;2.掌握汇编语言的基本语法和应用;3.学会使用汇编语言设计并实现简单的程序;4.培养分析和解决问题的能力。
二、实验内容根据实验的具体要求,设计并实现汇编语言程序,要求程序的功能和执行效果符合实验要求。
三、实验要求1.完成实验报告,并按照实验报告模板的要求编写。
2.实验过程中能提出并解答问题的,要及时记录下来。
3.实验过程中发现的问题要及时上报和解决。
4.保持实验室设备的安全性和完好性。
四、实验步骤1.紧密结合课程内容,理清实验的基本思路和需求。
2.设计程序的框架和算法,明确每个步骤的功能和实现方法。
3.编写汇编语言程序的代码,注意代码的规范性和可读性。
4.进行程序的编译和调试,确保程序能够正确运行并得到正确的结果。
5.运行程序,观察程序的执行过程和结果是否符合设计要求。
五、实验评分标准1.实验报告的撰写质量(包括格式、内容、语言表达等)占总分的30%。
2.汇编语言程序的设计和实现质量占总分的50%。
3.程序的运行效果和正确性占总分的20%。
六、实验注意事项1.在编写汇编语言程序时,要注意程序的可读性和可维护性。
2.在程序的编译和调试过程中,要保持对程序的追踪和记录。
3.注意程序的输入和输出的正确性和合法性。
4.在实验过程中,要积极与实验指导教师和同学之间进行交流和讨论。
以上就是汇编语言程序设计实验的要求。
通过这门实验课程的学习和实践,我们能够更加深入地了解计算机体系结构和汇编语言的基本原理和应用,从而为我们今后的学习和工作打下坚实的基础。
希望同学们在实验中能够认真学习和探索,通过实践提高自己的动手能力和问题解决能力。
第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。
(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。
在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。
(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。
汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。
①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。
②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。
(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。
)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。
操作数:给指令的操作提供数据或地址。
注释:是对语句或程序段的解释说明。
(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。
冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。
汇编语言程序设计实验报告实验名称上机过程及顺序结构与分支结构程序设计实验班级学号姓名日期2017年10月26号成绩评阅人软件学院一、实验目的与意义理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。
通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。
熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。
熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。
二、实验环境操作系统:Microsoft Windows8集成环境:Masm for Windows上机地点:信息楼B405教室三、实验的预习内容预习的主要内容:1. 使用DEBUG命令的方法;2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,);3. 分支结构和顺序结构的步骤以及相关的指令;4. 常用的标志位状态及相应的作用;实验思路:在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。
依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。
进一步优化算法。
实验之前必须了解十进制、十六进制和ASCII码之间的转换。
预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。
实验一:题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。
题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。
实验二:先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。
实验三:先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数据段中的data3并判断data3是否大于0;最终通过不同数据情况判断应当输出空字符、字符“-”或字符“+”。
四、实验的步骤与调试方法实验一:按照要求编写代码,然后编译、连接、运行。
使用E命令修改数据,G命令查看,D命令查看数据变化;使用A命令修改加法为减法,G命令查看,再用D 命令查看数据变化。
实验二:编写代码运行后从键盘输入0-9其中一个数字,检验结果是否正确,多次运行并检测。
实验三:编写代码运行后,检验结果正确性,Debug使用E命令修改数据,检验结果正确性。
遇到的问题及调试办法:分支结构出错,判断之后指向错误导致结果错误。
Debug使用P单步执行。
五、实验数据与实验结果实验一:程序一:执行的结果如下:从中可以看出初始的值为13和26,之后继续进行单步执行,知道程序的结束,此时程序执行完毕,执行结果如下:之后,执行D 0B3E:0002观察结果,得知此时的和为39,结果如下图:之后,使用E命令,在E后加入数据地址,之后输入要修改的数据,将13改为3,将26改为5,并且使用了D命令观察数据是否更改,经验证数据已经进行了更改,结果如下图:之后,使用G命令来继续执行程序,结果如下图:之后使用D命令来显示结果得知结果为8,结果正确:使用A命令来更改ADD为SUB,首先使用U命令来进行反汇编,找到ADD所在的地址,使用A命令,在A后面加上ADD的地址进行修改,如下图:之后进行单步执行得到结果如下得到减法的结果为ED:程序二:经过debug的D命令显示,得到如下结果经过和之前实验预先的猜测一致,这样进一步加深了我对汇编语言数据的存储的理解。
实验二:输入3,5得到的运行结果为实验三:原始数据:78H 56H 23H 输出‘+’E命令修改数据为:-21H -13H -18H 输出‘-’ E命令修改数据为:-10H 00H 23H 输出‘’六、实验用程序清单(要有注释)实验一:DSEG SEGMENT ;数据段开始DATA1 DB 13H,26H ;原始数据DATA2 DW 0 ;保存结果单元DSEG ENDS ;数据段结束SSEG SEGMENT STACK ;堆栈段开始SKTOP DB 20 DUP(0)SSEG ENDS ;堆栈段结束CSEG SEGMENT ;代码段开始ASSUME CS:CSEG,DS:DSEGASSUME SS:SSEGSTART: MOV AX,DSEG ;初始化数据端地址MOV DS,AXMOV AX,SSEG ;初始化堆栈段地址MOV SS,AXMOV SP,LENGTH SKTOP ;设置堆栈指针MOV AL,DATA1 ;取第一个数据ADD AL,DATA1+1 ;与第二个数据相加MOV BYTE PTR DATA2,AL ;保存结果MOV AH,4CHINT 21H ;返回DOSCSEG ENDS ;代码段结束END START ;源程序结束实验二DSEG SEGMENTDATA1 DB30H,30H,30H,31H,30H,34H,30H,39H,31H,36H,32H,35H,33H,36H,34H,39H,3 6H,34H,38H,31HDSEG ENDSSSEG SEGMENT STACKSKTOP DB 00HSSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGASSUME SS:SSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AXMOV AH,01H ;从键盘录入一个数,将其ascall码存于ALINT 21HSUB AL,30H ;将acsall码减去30H获得该数大小存于ALMOV BL,02H ;BL赋值为02HMUL BL ;AL乘以02H结果存在AX,表示该数平方的MOV BP,AX ;AX的值赋给BPMOV DL,DS:[BP] ;将十位数赋给DLMOV AH,02H ;输出十位数INT 21H ;MOV DL,DS:[BP+1] ;将个位数赋给DLMOV AH,02H ;输出个位数INT 21HMOV AH,4CHINT 21HCSEG ENDSEND START实验三DSEG SEGMENTDATA1 DB 01H,-02H,03HDSEG ENDSSSEG SEGMENT STACKSKTOP DB 00HSSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGASSUME SS:SSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AXXOR BP,BPMOV AH,DS:[BP]MOV AL,DS:[BP+01H]MOV BH,DS:[BP+02H] ;三个数分别置于AH AL BH中CMP AH,AL ;比较AH AL大小JL MOVE1 ;若AH小于AL,跳跃到MOVE1MOV BL,AHMOV AH,ALMOV AL,BL ;AH与AL交换MOVE1: CMP AL,BH ;比较AL与BH大小JL MOVE2 ;若AL<=BH,跳跃到MOVE2MOV BL,ALMOV AL,BHMOV BH,BL ;AL与BH交换MOVE2: MOV BL,00H ;BH赋值为0CMP AH,BL ;比较AH与0的大小JL MOVE3 ;若AH<=0,跳跃到MOVE3MOV DL,'+' ;若AH>0,则输出‘+’MOV AH,02HINT 21H ;JMP MOVE5MOVE3: CMP BH,BLJL MOVE4MOV DL,' 'MOV AH,02HINT 21HJMP MOVE5MOVE4: MOV DL,'-'MOV AH,02HINT 21HMOVE5: MOV AH,4CHINT 21HCSEG ENDSEND START七、思考题(必需回答)写明如下问题1.按照操作顺序写出上机操作的步骤;(1)在编辑器中输入汇编语言程序,点击编译,查看有无语法类型的错误(2)用link.exe链接(3)链接完毕,用cmd/c运行程序,查看运行结果(4)输入不同的数据多次运行并记录(5)用debug命令在debug下运行2.上机操作的步骤与顺序可以调整吗?为什么?不可以调整;因为如果调整了的话将无法正常进行上机操作3.写出用DEBUG中的E命令修改内存单元内容的两种方法;(1)E Address;(2)E Address [list];4.写出用DEBUG中的A命令修改指令的方法及应注意的问题;命令的格式为:A Address当执行A命令时,DEBUG等待用户输入指令序列。
输入每条指令后回车,再直接按回车键结束A命令。
DEBUG将输入指令序机的机器码存入指定地址开始的内存单元中。
需要注意的是A命令修改指令过程中默认输入的数值都为16进制,如果需要输入十进制数需要在数值后面加D或d5.总结DEBUG中E、D、U命令的功能;E 命令用来设置指定内存单元的值D命令用来显示内存单元的值U命令用来将二进制代码反汇编为汇编语言的符号指令6.总结DEBUG中P、G、T命令的功能;继续命令P命令执行循环、重复的字符串指令、软件中断或子例程;程序运行命令G命令用来执行指定范围地址的指令跟踪命令T命令用来执行指定地址的指令7.写出数据定义伪指令DB、DW和DD存储整数的格式;DB:在内存中用一个字节存储一个整数,由低地址至高地址依次存储;DW:在内存中用两个字节存储一个整数,高地址存高位,低地址存地位,由低地址至高地址依次存储;DD:在内存中用四个字节存储一个整数,高地址存高位,低地址存地位,由低地址至高地址依次存储。
8.同一个正数分别用DB、DW和DD定义,存储格式有何变化?所占用的内存大小有变化,DB占用一个字节,DW占用两个字节,值在低地址,高地址用0填充,DD占用四个字节,值在低地址,高地址用0填充9.同一个负数分别用DB、DW和DD定义,存储格式有何变化?所占用的内存大小有变化,DB为一个字节,DW为两个字节,DD为三个字节,高地址存高位,低地址存地位,高位补F。
10.自定义标号分别用DW和DD定义,存储格式有何变化?DW、DD分别两个一组、四个一组储存11.DB、DW和DD在定义数据串时有何不同?DB定义时每个值占用一个字节,DW定义时每个值占用两个字节,DD 定义时每个值占用四个字节12.说明十六进制数转换为ASCII码的方法;将16进制数除以16,商与余数分别加上0的ASCII码,分别输出。