




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章
汇编语言与程序设计5.1汇编语言基础计算机语言包括:面向机器的语言机器语言汇编语言高级语言
汇编语言:用助记符表示指令汇编语言源程序:用汇编语言编写的程序汇编程序:编译汇编语言源程序的程序程序设计与执行过程建立源程序(文件名.ASM)编译成目标文件(文件名.OBJ)生成可执行文件(文件名.EXE)调试和运行程序用编辑软件(如EDIT.EXE)用汇编程序(如TASM.EXE)用链接程序(如TLINK.EXE)用调试程序(如TD.EXE)也可直接运行可执行文件
汇编语言包括的语句
指令性语句:
CPU执行的指令,编译后生成目标代码,要求的操作在执行程序时完成。
指示性语句:
CPU不执行的指令,编译后生不生成目标代码,要求的操作由汇编程序完成。下面分别介绍指令性语句由CPU执行的指令,编译后生成目标代码语句格式:[标号:][前缀]助记符[操作数],[操作数][;注释]例MIUS:ADDAX,BX;加法指令INCBX;BX加1指令的符号地址操作码注释前加分号指示性语句CPU不执行的指令;由汇编程序执行,编译后不生成目标代码;用于分配内存空间、定义变量、指示程序开始和结束等。指令格式:[名字]伪指令助记符操作数[,操作数,…][;注释]
例YEQU100;用符号(变量)Y代替数据100指示性语句中的操作数可以是:寄存器存储器单元常量:数值或字符、字符串变量:代表内存的数据区,程序视为存储器操作数表达式:可包括各种运算符5.2常用伪指令段定义伪指令指定段寄存器伪指令过程定义伪指令变量定义伪指令符号定义伪指令下面分别介绍段定义伪指令
说明逻辑段的起始和结束说明不同程序模块中同类逻辑段之间的联系形态段名SEGMENT[定位类型][组合类型][’类别’]
┇段名ENDS例定义数据段
DATASEGMENT
MEM1DB11H,22HMEM2DW1234H
DATAENDS说明逻辑段的起点段的类别与其他段的关系指定段寄存器伪指令功能:用于说明指向逻辑段的寄存器格式:ASSUME段寄存器名:段名[,段寄存器名:段名,…]例
DATASEGMENT;定义数据段
┇DATAENDSCODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATA;指定段寄存器
┇
CODEENDS过程定义伪指令和返回指令过程定义伪指令用于定义过程体格式:过程名PROC[NEAR/FAR]┇RET过程名ENDP
过程的返回指令:RET该指令一般位于子程序的最后用于从堆栈中弹出断点地址,返回原程序。
变量定义伪指令DB/DW/DD变量定义伪指令用于在数据段中定义变量,并按照变量类型分配存储单元和赋初值。格式1:[变量名]{DB/DW/DD}表达式格式2:[变量名][重复次数]{DB/DW/DD}DUP表达式例如:ONEDB25H;定义1个字节变量ONE,存入初值25HTWODB5,7;定义2个连续的字节单元,分别存入初值5和7THREEDB?;定义1个字节,数据任意DATA1DW1234H;定义1个字(2个字节),存入数据1234H
符号定义伪指令(EQU/=)
符号定义伪指令用于为常量、变量、表达式或其他符号定义一个名字,但不分配内存单元。格式1:符号名EQU数值表达式格式2:符号名=数值表达式例如:CONSTANTEQU10;用符号CONSTANT表示常数10VAREQU30H+99H;用符号VAR表示表达式30H+99HPURGECONSTANT;解除符号CONSTANT,以便重新定义CONSTANTEQU20;用符号CONSTANT表示常数20DATA=3;用符号DATA表示3DATA=4;把符号DATA改为表示4汇编语言程序设计
简单程序设计入门汇编语言程序在一些对内存储器容量和存取速度要求比较高的情况下,如I/O接口驱动程序、实时控制程序、系统软件等设计中常被使用,而且比用高级语言仿佛还要便当些。其实,用汇编语言编写程序,首先确定算法,然后紧紧抓住每条指令的格式、功能以及数据的寻址方式,用户也可以编写出高质量的汇编语言程序。1.寄存器的加法
下面给出了一个简单的汇编语言程序段,是用寄存器EAX、EBX、ECX和EDX实现加法运算,依此来说明寄存器加法是如何用汇编语言实现的。形成的32位的累加和被存放在EAX寄存器。
;4个32位寄存器EAX,EBX,ECX与EDX内容相加,累加和存放在EAX内┋ADDEAX,EBX;EBX寄存器内容与EAX寄存器内容相加,结果存放在EAX上ADDEAX,ECX;ECX寄存器内容与EAX寄存器内容相加,结果存放在EAX上ADDEAX,EDX;EDX寄存器内容与EAX寄存器内容相加,结果存放在EAX上┋2.存储器与寄存器加法
用存储器中的数据与寄存器中的内容进行操作运算,是用存放在存储器的数据段内,其偏移地址为NUMB和NUMB+1的两个连续单元的字节数据,与AX寄存器的内容进行累加,其累加和存放在AX寄存器上。
;用NUMB与NUMB+l存储单元内的数据与AL寄存器内容进行求和,结果存放在AX中┋MOVDI,OFFSETNUMB;将偏移地址NUMB传送到DI寄存器MOVAX,1234H;把常数1234H传送到AX寄存器ADDAX,[DI];AX寄存器内容与地址NUMB内的数据;进行加运算,结果存放在AX寄存器ADDAX,[DI+1];AX寄存器内容与地址NUMB+1内的;数据进行加运算,结果存放在AX寄存器3.数组元素加法操作
数组,是存储器中顺序排列的一个数据表。假定一个名为ARRAY的一维数组,共有10个数组元素,且数组元素是字节数据,数组元素的下标是0~9。试用汇编语言编写一个程序,实现三个数组元素ARRAY(3)、ARRAY(5)、ARRAY(7)的累加。
;三个数组元素数据进行累加运算,累加结果存放在AX中;注意该过程破坏了SI的内容┋MOVAX,0;由于累加和要存放在AX内,首先将其清0MOVSI,3;将常数3传送到源变址寄存器SIADDAX,ARRAY[SI];AX寄存器数据与数组元素ARRAY(3)相加;结果存放在AX寄存器ADDAX,ARRAY[SI+2];AX寄存器数据与数组元素ARRAY(5);相加结果存放在AX寄存器
ADDAX,ARRAY[SI+4];AX寄存器数据与数组元素ARRAY(7)相加;结果存放在AX寄存器4.数组元素加法
下面程序段是32位的程序,采用的是比例变址寻址方式,求数组ARRAY中三个数组元素ARRAY(3)、ARRAY(5)、ARRAY(7)的累加和。且数组元素是16位的操作数,并把数组元素的和存放在寄存器EAX中。
;程序段是采用比例变址进行寻址的32位操作数的程序┋MOVEBX,OFFSETARRAY;将数组地址ARRAY传送到寄存器EBXMOVECX,3;将常数3传送到ECX,ECX保存着数组元素的序号MOVEAX,[EBX+2*ECX];将数组元素ARRAY(3)的值传送到寄存器EAXMOVECX,5;将常数5传送到ECX,ECX保存着数组元素的序号ADDEAX,[EBX+2*ECX];数组元素ARRAY(3)与数组元素ARRAY(5)相加;结果存放在寄存器EAXMOVECX,7;将常数7传送到ECX,ECX保存着数组元素的序号ADDEAX,[EBX+2*ECX];数组元素ARRAY(3)+ARRAY(5)+ARRAY(7);相加,结果存放在寄存器EAX5.乘法程序设计
下面这个程序段是实现寄存器BX上的数据与寄存器CX上的数据相乘的程序段。假设BX中存放的是数据55,在CX中存放的是数据110,两数进行乘法操作,产生的32位乘积存放在寄存器对DX-AX中。;寄存器BX上的数据与寄存器CX上的数据相乘,;乘积存放在寄存器对DX-AX中
┋MOVBX,55;将字数据55装到寄存器BX上MOVCX,110;将字数据110装到寄存器CX上MOVAX,CX;将寄存器CX上的数据110,传送到寄存器AX上MULBX;寄存器AX上的数据与寄存器BX上的数据相乘;结果存放在寄存器对DX-AX中6.除法程序设计
下面的程序段是两个16位有符号数的除法,即AX中的-100除以CX中的+9。执行除法之前,要用指令CWD将AX中的-100转换成寄存器对DX-AX中的-100,除法操作执行后,结果存放在寄存器对DX-AX对中,其中商-11存放在AX中,而余数-l则是被存放在DX中。;寄存器AX中的-100除以寄存器CX中的+9,商存放在AX中,余数存放在DX中┋MOVAX,-100;将有符号数-l00传送到寄存器AXMOVCX,9;将有符号数+9传送到寄存器CXCWD;将AX中的-100转换成寄存器对DX-AX中的-100IDIVCX;用寄存器对DX-AX中的-100,除以寄存器CX上的+9;在AX中存放商-11,在DX中存放余数-l完整的汇编源程序结构DATASEGMENT;定义数据段MEM1DB11H,22H
┇DATAENDSCODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA
┇CODEENDSENDSTART;程序结束顺序结构程序设计
顺序结构的程序是完全按指令书写的先后顺序逐条执行的。这种结构的汇编程序既无分支、又无循环,只会自上而下地线性地顺序地运行,这种结构的汇编程序通常是比较简单的程序。下面所展示出的程序就是一个顺序结构汇编程序的框架。
Program5.1顺序结构汇编程序的框架.DOSSEG ;连接时按DOS方式排列段 .MODELSMALL;程序存储模式:小模式 .486;80486伪指令 .STACK300H;建立程序堆栈段:768字节 .DATA;建立程序数据段 DB16DUP(?);WINDOWS保留数据区:16字节 ;其它程序数据 .CODE;建立程序代码段START:;程序开始执行地址 MOVAX,@DATA MOVDS,AX;设置数据段地址;插入实际程序代码 MOVAH,4CH INT21H;返回DOS ENDSTART;程序结束
分支程序设计分支程序结构可以用如图所示的两种形式表示。他们的结构分别相当于高级语言中的IF-THEN-ELSE语句和CASE语句,这种结构常用于根据不同的条件作出不同处理的情况。IF-THEN-ELSE语句可以有两个分支,CASE语句则可以有多个分支。但不论是哪一种形式,他们的共同特点是:其运行方向是向前的,在确定的条件下,只能执行多个分支中的一个分支。判定条件判定条件
Program5.3分支结构的程序示例程序;显示两个数x1,x2的比较结果.DOSSEG.MODELSMALL;程序存储模式:小模式.486;80486伪指令.STACK300H.DATADB16DUP(?)X1DD1000;两个数X1,X2X2DD2000;数值可任意指定MSG1DB"X1>X2",13,10,"$";比较结果分为大于、小于、等于三种情况MSG2DB"X1<X2",13,10,"$";MSGEDB"X1=X2",13,10,"$";.CODESTART: MOVAX,@DATA MOVDS,AX MOVEAX,X1;取X1数值 CMPEAX,X2;与X2比较 JEEQUAL;相等? JGGREAT;X1大于X2? MOVDX,OFFSETMSG2;比较结果:X1<X2 JMPOKGREAT:MOVDX,OFFSETMSG1;比较结果:X1>X2JMPOKEQUAL:MOVDX,OFFSETMSGE;比较结果:X1=X2OK:MOVAH,09H;显示比较结果INT21HMOVAH,4CHINT21HENDSTART循环程序设计
在程序中,如果需要多次重复执行相同或相似的功能,就可以使用循环结构。循环结构总是包含了三个部分:1)初始化,设置循环执行的初始状态。2)循环体,需要多次重复执行的部分。3)循环条件,用于控制循环体的执行。循环体每次执行后,应该修改循环条件,使得循环能够在适当的时候终止执行。循环控制条件循环初始状态循环体循环初始状态循环控制条件循环体(1)DO-WHILE结构形式(2)DO-UNTIL结构形式下面是循环程序设计一范例。其功能是选出一组数据中的最大者放到big单元;而将最小者放到little单元。DATASEGMENTADW88,89,92,78,76,69,63,96,60,100;一组数据BIGDW?LITTLEDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETAMOVAX,[BX]MOVDX,AXINCBXINCBXMOVCX,9;循环次数放在CX之内AGAIN:CMPAX,[BX]JGENEXT1MOVAX,[BX];将大的数;放在AX之内NEXT1:CMPDX,[BX]JLENEXT2MOVDX,[BX];将较小的;数放DX之内NEXT2:INCBXINCBXLOOPAGAIN;实现循环MOVBIG,AX;存放最大数MOVLITLE,DX;存放最小数MOVAH,4CH;返回DOSINT21HCODEENDS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆买卖赊购合同
- 仓房买卖合同协议书
- 的聘用合同年
- 银行解除借款合同
- 《苏武传》教学设计 2024-2025学年统编版高中语文选择性必修中册
- Unit 1 How can I get there?PartA(教学设计)-2024-2025学年人教PEP版英语六年级上册
- 山东医学高等专科学校《物理化学B(下)》2023-2024学年第二学期期末试卷
- 山东华宇工学院《土木工程材料》2023-2024学年第二学期期末试卷
- 山西药科职业学院《财务大数据决策》2023-2024学年第二学期期末试卷
- 内蒙古电子信息职业技术学院《有色冶金设备》2023-2024学年第二学期期末试卷
- 2024-2025学年第二学期教学教研工作安排表 第二版
- 开展课外读物负面清单管理的具体实施举措方案
- 人体的免疫系统课件
- 六年级下学期开学第一课
- 体育原理课件
- 生物化学绪论
- 公路工程项目隐隐蔽工程管理办法
- PCCP安装与水压试验
- 中国民间艺术 ppt课件
- 景观生态学教学大纲(共10页)
- 电子舌技术在普洱茶品质识别中应用的研究
评论
0/150
提交评论