您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第三章80868088汇编语言程序设计
第三章汇编语言程序设计3.1程序设计语言概述3.28086/8088汇编语言的基本语法3.3汇编语言程序设计基本方法3.1程序设计语言概述程序设计语言是专门为计算机编程所配置的语言。它们按照形式与功能的不同可分为3种,即:机器语言——0、1二进制代码书写指令;难认,记,写。汇编语言——助记符、符号地址、标号书写程序;通用型、可移植性差;但可直接对硬件操作。高级语言——通用性好、简单易读、易写;但编译时间长,占内存;对硬件编程复杂。为什么学习汇编语言?汇编语言本质是机器语言,可直接对硬件控制,运行速度快,占用内存少适用场合:要求执行时间短,占用小存储容量,如实时控制软件、底层开发、直接控制硬件的软件开发汇编语言开发需要的环境?在实验室中DOS状态下的DEBUG环境专用汇编开发环境:MASM1.0到目前的MASM6.X初步了解汇编语言开发过程编辑文本编辑器,如EDIT源程序:文件名.asm汇编汇编程序,如MASMname.asm目标模块:文件名.obj连接连接程序,如LINKname.obj可执行文件:文件名.exe调试调试程序,如DEBUG.EXE应用程序错误错误错误错误3.28086/8088汇编语言的基本语法3.2.1认识汇编程序3.2.2汇编语言语句的类型和格式3.2.3汇编语言的数据本节知识点:熟悉汇编语言程序的基本结构掌握汇编语言语句几种类型、格式掌握汇编语言数据格式熟悉伪指令的构成、种类、作用3.28086/8088汇编语言的基本语法例:求从1开始连续50个奇数之和,并将结果存放在名字为SUM的字存储单元中。DATASEGMENT;定义数据段,DATA为段名SUMDW0;由符号(叫变量名)SUM指定的内存单元类型定义为一个字,初值为0DATAENDS;定义数据段结束STACKSEGMENTSTACK;定义堆栈段,这是组合类型伪指令,它规定在伪指令后须跟STACK类型名DB200DUP(0);定义堆栈段为200个字节的连续存储区,且每个字节的值为0STACKENDS;定义堆栈段结束CODESEGMENT;定义代码段ASSUMEDS:DATA,SS:STACK,CS:CODE;由ASSUM伪指令定义各段寄存器的内容3.2.1认识汇编程序—完整的定义格式START:MOVAX,DATA;将DS初始化为数据段首址MOVDS,AX的段值DATAMOVCX,50;CX置入循环计数值MOVAX,0;清AX累加器MOVBX,1;BX置常量1NEXT:ADDAX,BX;累加奇数和,计50次INCBX;求下一个奇数INCBXDECCX;循环计数器作减1计数JNENEXT;未计完50次时,转至NEXT循环MOVSUM,AX;累加和送存SUM单元MOVAH,4CH;DOS功能调用语句,机器将结束本INT21H程序的运行,并返回DOS状态CODEENDS;代码段结束ENDSTART;整个程序汇编结束3.2.1认识汇编程序汇编源程序一般由若干段组成,每个段以SEGMENT作为段的开始,以ENDS作为段的结束,这两者前面都要冠以相同的名字。3.2.1认识汇编程序---段结构段分为:代码段、堆栈段、数据段和附加段4种,但代码段与堆栈段是不可少的,数据段与附加段可根据需要设置。整个源程序必须以END语句来结束,它通知汇编程序停止汇编。END后面的标号START表示该程序执行时的起始地址。一、汇编语言语句的种类语句的种类-有3种基本语句:指令语句伪指令语句宏指令语句3.2.2汇编语言语句的类型和格式1.指令语句(也称为硬指令)是一种执行性语句,它在汇编时,汇编程序将为之产生一一对应的机器目标代码。汇编指令机器码MOVDS,AXADDAX,BX8ED8;传送指令03C33.2.2汇编语言语句的类型和格式标号:指令助记符操作数,操作数;注释Step1:step2:2.伪指令语句是一种说明性语句,为汇编程序提供进行汇编所需要的有关信息,如程序的起始、分段情况、分配存储单元,变量说明等,而本身并不生成目标代码。3.2.2汇编语言语句的类型和格式DATASEGMENTAADW20H,-30H;定义变量DATAENDS3.宏指令是以某个宏名字定义的一段指令序列。[名字]伪指令助记符参数,参数,……;注释二、汇编语言语句的格式1、指令性语句3.2.2汇编语言语句的类型和格式[标号:]指令助记符[操作数表][;注释]标号(Label)1)标号及其属性标号作为程序转移的目标地址--指令的符号地址(逻辑地址)标号3种属性——段地址、段内偏移量以及类型(near/far)标号定义:字母开头,由字母、数字、特殊字符(?、_等)出现位置:循环、转移、调用指令中指令助记符主要为8086/8088CPU指令系统中指令助记符。3.2.2汇编语言语句的类型和格式操作数立即操作数如:MOVBX,1000+5*3寄存器操作数如:MOVBX,AX存储器操作数如:movbx,[100H]注释;注明语句或程序的作用2、伪指令语句的格式[名字]伪指令[参数表][;注释]3.2.2汇编语言语句的类型和格式例如:ONEEQU1;常量名DATASEGMENT;段名STRINGDB‘Hello,Everybody!’,0DH,0AH,‘$’;AADW1,2,3;变量名DATAENDS1)名字用标识符定义的常量名、变量名、过程名、段名以及宏名等。注意:汇编程序是不区分大、小写;名字的后面没有冒号。2)伪指令符号定义伪指令—EQU/=数据定义伪指令—DB/DW/DD段定义伪指令—SEGMENT/ENDS/ASSUME过程定义伪指令—PROC/ENDP定位伪指令—ORG3.2.2汇编语言语句的类型和格式3)伪指令参数各参数之间用逗号分隔,可以是常量、变量名、表达式汇编语言的数据可以简单分为常量和变量常量可以作为硬指令的立即数或伪指令的参数,变量主要作为存储器操作数汇编语言语句中的名字和标号具有逻辑地址和类型属性,主要用做地址操作数,也可以作为立即数和存储器操作数3.2.3汇编语言的数据1、常量即已有确定值的量,如:立即数、各种位移量、伪指令语句中用于给变量赋初值。常量分类:数值常量、字符串常数、符号常量数值常量:以各种进位制数值形式表示的数据字符串常数:用单引号或双引号括起的单个多个字符符号常量:需用符号定义伪指令“EQU”或“=”给常量赋值3.2.3汇编语言的数据——常量(P55)1)数值常量指由10、16、2和8进制形式表达的数值,各种进制的数据以后缀字母区分,默认不加后缀字母的是十进制数十进制由0~9数字组成,以字母D(d)结尾(缺省情况可以省略)100,255D十六进制由0~9、A~F数字组成,以字母H(h)结尾,以字母开头的常数需要加一个前导064H,0FFH0B800H二进制由0和1两个数字组成,以字母B(b)结尾01100100B2)字符串字符串常量是用单引号或双引号括起来的单个字符或多个字符其数值是每个字符对应的ASCII码值例如:‘d’(等于64H)‘AB’(等于4142H)‘Hello,Assembly!’3)符号常量符号常量使用标识符表达一个数值MASM提供等价机制,用来为常量定义符号名符号定义伪指令有“等价EQU”和“等号=”:符号名EQU数值表达式符号名EQU字符串;MASM5.x不支持符号名=数值表达式EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。例如:X=7;等效于:Xqeu7X=X+5;“XEQUX+5”是错误的2、变量必须事先定义才能有效变量定义为变量申请固定长度的存储空间,并将该空间的基址转换为符号地址变量定义使用伪指令实现变量定义的同时可对存储单元初始化格式——变量名伪指令助记符初值表初值表是用逗号分隔的参数3.2.3汇编语言的数据——变量DB——定义字节伪指令DW——定义字伪指令DD——定义双字伪指令3.2.3汇编语言的数据—变量定义变量的伪指令DQ——定义4字伪指令DT——定义10字节伪指令初始化初值表----由数值常数、表达式或?、DUP组成?—表示初值不确定,即未赋初值;DUP—表示重复,并可带初值DUP的格式:重复次数DUP(初值参数)★例:AREADB100DUP(0);重复100次,初值全为0DW200DUP(?);重复100次,初值任意字节变量定义实例;数据段Xdb'a',-5db2dup(100),?Ydb'ABC'字变量定义实例;数据段countdw8000h,?,'AB'maxintequ64hnumberdwmaxintarraydwmaxintdup(0)3、地址型参数指令参数可为地址型的,该参数表示存储单元的地址(值)地址型参数主要形式:标号名字变量名段名过程名(子程序名)3.2.3汇编语言的数据—地址参数★例:JMPBB;假设BB为标号MOVDX,OFFSETAA;假设AA为变量名MOVAX,SEGSUBP;假设SUBP为过程名4、数值表达式一个数值表达式可自由常量、字符常量以及代表常量的名字等用算术、逻辑和关系运算符(Operator)连接而成。1)算术运算符+、-、*、/、MOD、SHR、SHL如:MOVAX,19MOD7MOVBX,AA+1MOVAX,BXSHR32)逻辑运算符---ANDORNOTXOR如:MOVAX,9999HXOR0F0F0H3.2.3汇编语言的数据本节重点:熟悉程序设计的基本步骤掌握结构化程序设计的概念掌握3种基本结构的程序设计方法了解过程设计的步骤3.3汇编语言程序设计基本方法例:对两个8字节无符号数求和,这两个数分别用变量D1及D2表示。将两数之和的最高位进位放在AL中,两数之和的其他位按从高到低顺序依次放在SI,BX,CX,DX中。3.3.1顺序结构程序顺序结构程序,在程序中不包含任何转移类指令.执行时按指令的先后次序从第一条开始逐条执行,直至程序结束.开始指令1指令2……结束指令nDSEGMENTD1DB12H,34H,56H,78H,9AH,0ABH,0BCH,0CDHD2DB0CDH,0BCH,0ABH,9AH,78H,56H,34H,12HDENDSCSEGMENTASSUMECS:C,DS:DBG:MOVAX,DMOVDS,AX;给DS赋段值LEADI,D1;偏移地址送DIMOVDX,[DI];取第1操作数MOVCX,[DI+2]MOVBX,[DI+4]MOVSI,[DI+6]CLCLEADI,D2ADDDX,[DI]ADCCX,[DI+2]ADCBX,[DI+4]ADCSI,[DI+6]MOVAL,0ADCAL,0MOVAH,4CHINT21HCENDSENDBG程序如下:3.3.2分支结构程序利用转移指令,控制计算机执行某段程序或不执行某段程序。多路分支满足判断条件1?程序段1满足判断条件n?程序段n程序段n+1...程序段2...YNNNNYY满足判断条件2?两路分支条件成立?程序段AYN程序段B例1:比较以存储器变量D1和D2表示的两个有符号字数据的大小,将其中较大数据放在BX寄存器中3.3.2分支结构程序DATASEGMENTD1DW-123H;补码为FF85HD2DW-120H;补码为FF88HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AX;给DS赋段值MOVBX,D1CMPBX,D2JGENEXT;若大,不交换,转移MOVBX,D2;若小,则交换NEXT:MOVAH,4CHINT21HCODEENDSENDBEGIN例2.编写程序实现函数.1(当X0)Y=0(当X=0)9(当X0)3.3.2分支结构程序将X的值送AXY=9Y=0Y=1YYNN开始初始化取段地址送DS取X的指针送SIAX=0?AX0?结束系统功能调用,在屏幕上显示Y的数值代码如下:DATAXYSEGMENTXDB8FHYDB?DATAXYENDSCODESEGMENTAS
本文标题:第三章80868088汇编语言程序设计
链接地址:https://www.777doc.com/doc-2120071 .html