




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章
汇编语言程序设计4.1汇编语言源程序4.2伪指令4.3
DOS系统功能调用4.4
汇编语言程序设计基础4.5综合举例4.1汇编语言源程序了解:计算机的三种语言源程序的结构汇编语言语句格式4.1汇编语言源程序4.1.1汇编语言源程序结构4.1.2
汇编语言语句格式4.1.3数据项和表达式一、计算机设计语言机器语言汇编语言高级语言面向机器的语言机器语言汇编语言高级语言汇编程序汇编语言源程序用助记符编写源程序的编译程序汇编程序汇编语言源程序机器语言目标程序汇编语言程序设计与执行过程输入汇编语言源程序源文件.ASM汇编(编译)目标文件.OBJ链接可执行文件.EXE调试最终程序4.1.1汇编语言源程序结构p155数据段名SEGMENT…数据段名ENDS附加段名SEGMENT…附加段名ENDS堆栈段名SEGMENT…堆栈段名ENDS代码段名SEGMENT…代码段名ENDSP156例题4-1详细解释。4.1.2
汇编语言语句格式指令语句的一般格式如下:[标号:]指令助记符操作数;注释1.标号:标号是机器指令语句存放地址的符号表示,代表该指令目标代码的第一个字节地址,后面必须紧跟冒号“:”
。2.指令助记符:指令助记符为语句的核心成分,表示了该语句的操作类型。
3.操作数:操作数表示指令助记符的操作对象。
4.注释:注释均以分号开始,它可占一行或多行,一般放在一条语句的后面。
伪指令语句格式伪指令语句格式如下:[符号名]伪指令符操作数;注释1.符号名:符号名是伪指令语句的一个可选项。
2.伪指令符:伪指令符指定汇编程序要完成的具体操作,如数据定义伪指令DB、DW、DD,段定义伪指令SEGMENT,假定伪指令ASSUME等。
3.操作数:伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由具体的伪指令决定,各个操作数之间必须以“逗号”分隔。4.注释:伪指令的注释必须以“;”开始,其作用同指令语句中的注释部分。
4.1.3数据项和表达式p1571常量2
标号3
变量4表达式与运算符5运算符的优先级操作数可以是寄存器操作数,存储器操作数,或者数据项数据项包括:常量
标号
变量
表达式1常量1.数值常量2.字符串常量1.数值常量各种形式数字常量格式对照表2.字符串常量字符串常量是用单引号或双引号引起来的一个或多个字符。字符串常量是以各字符的ASCⅡ码表示的。如‘A’用41H表示,字符串‘A1B2’用41H,31H,42H,32H表示。2标号标号是一条指令语句的符号地址。在汇编源程序中,只有在需要转向一条指令语句时,才为该指令语句设置标号,以便在转移类指令(含子程序调用指令)中直接引用这个标号。因此,标号可作为转移类指令的操作数,即转移地址。【例3.3】符号地址表示。
┆NEXT:MOV AL,[SI] ;带标号NEXT的指令
┆
DECCXJNENEXT ;标号NEXT作转移指令的操作数段值变量所在段的段地址偏移量变量单元地址与段首地址之间的位移量。类型字节型、字型和双字型标号也具有三种属性3变量1.变量2.变量的定义(1)段属性(2)偏移地址属性(3)类型属性1.变量变量是存储器中某个数据区的名字,由于数据区中的内容是可以改变的,因此变量的值也可以改变。赋值方式:(1)数值表达式(2)字符串表达式(3)?表达式(4)带DUP的表达式2.变量的定义数据定义伪指令可以为一个或连续的存储单元设置数值初值。【例3.1】为数据段分配存储单元。DATA SEGMENTA DB 11H,12H,13HB DW 1122H,3344HC DD 12345678HDATA ENDS上述变量的存储单元分配及初始化情况如下图3.1所示。(1)数值表达式数据段中数据存储分配图1122332211443378563412ABCDATA
moval,bufmoval,buf+1moval,buf+2字符串表达式中的字符串必须用引号引起来。DB、DW、DD伪指令将字符串中的各字符均以ASCⅡ码形式存放在相应的存储单元,但表示形式各不相同。【例3.2】为字符串分配存储单元。DATA SEGMENTSTR1 DB ‘1234’STR2 DW ‘AB’,‘CD’,‘A’STR3 DD ‘AB’DATA ENDS其存储单元分配如下图3.2所示。(2)字符串表达式数据段存储分配图(3)?表达式
DATASSEGMENTbufdb1,2,?,'?',1,2DATASENDS在表达式中使用重复数据操作符DUP,可以为连续的存储单元提供重复数据,其格式为:
NDUP(表达式)其中N为重复因子,只能取正整数,表示定义了N个重复数据存储单元,其类型由它前面的数据定义伪指令确定,而每个数据存储单元中的初值由DUP后面圆括号中的表达式给定。例如:BUFDB100DUP(0)以上语句定义了以BUF为首址,大小为100个字节,初值为0的数据存储单元。(4)带DUP的表达式重复操作符为一个数据区的各单元设置相同的初值格式:
[变量名]伪指令助记符nDUP(初值,…)例:
DW20DUP(0)
DB3DUP(22H,11H,?)随机数2211?2211?2211?09FF:00000F99:000B09FF:0008用?预留存储空间MEM1DB34H,’A’,?,?,?DW20DUP(?)预留40个字节单元4表达式与运算符1.算术运算符2.逻辑运算符3.关系运算符4.属性运算符5.数值返回运算符算术运算符包括:+(加)、-(减)、*(乘)、/(除)、MOD(求模)、SHL(左移)、SHR(右移)几种,它既可以用于数值表达式又可用于地址表达式。1.算术运算符
┆NUM1 EQU 25*4–50 ;NUM1=50NUM2 EQU NUM1/7 ;NUM2=7NUM3 DB NUM1MOD7 ;NUM3=1VAR1 DB 1,2,3,4,5VAR2 DB ‘12345’NUM4 EQU VAR2-VAR1 ;NUM4=5NUM5 EQU 0FH ┆ MOV AL,NUM5SHL4 ;(AL)=11110000B MOV BL,NUM5SHR4 ;(BL)=00000000B【例3.4】用算术运算符进行数值表达式运算。逻辑运算符包括:逻辑乘(AND)、逻辑加(OR)、按位加(XOR)、逻辑非(NOT)四种运算。由于逻辑运算是按位操作,且在汇编过程中完成,因而运算的结果仍为整数常量。【例3.5】用逻辑运算符进行运算。MOV AL,34HAND0FH ;04H→ALMOV BL,05HOR30H ;35H→BLMOV CX,NOT00FFH ;0FF00H→CXMOV DX,789AHXOR000FH ;7895H→DX2.逻辑运算符关系运算符包括:相等(EQ),不等(NE),小于(LT),大于(GT),小于等于(LE)及大于等于(GE)。【例3.6】用关系运算符进行数值表达式运算。NUM1 DB 10LT5 ;NUM1=0NUM2 DB 10GT5H
;NUM2=0FFH MOV AX,‘A‘EQ41H ;0FFFFH→AX MOV BX,NUM2LTNUM1 ;0→BX3.关系运算符(1)PTR运算符格式:类型PTR地址表达式②PTR与EQU连用,可定义与PTR右边地址表达式类型不同的新变量名或新标号,但不另分配存储单元。
4.属性运算符(1)SEG运算符(2)OFFSET运算符(3)TYPE运算符(4)LENGTH运算符(5)SIZE运算符5.数值返回运算符(1)SEG运算符格式:SEG变量或标号功能:分离出其后变量或标号所在段的段首址。例如:MOV AX,SEG BUFMOV DS,AX(2)OFFSET运算符格式:OFFSET变量或标号功能:分离出其后变量或标号的偏移地址。例如:
MOVBX,OFFSETBUF
等价于:LEABX,DATA(3)TYPE运算符格式:TYPE变量或标号功能:分离出其后变量或标号的类型。如果是变量,将返回该变量的类型对应字节数;如果是标号,则返回代表标号类型的数值。它们之间的关系见表所示。例如:
VAR1DB12H,13HVAR2DW10H,DUP(0)
VAR3DDVAR1
┆MOVAL,TYPEVAR1;AL=1MOVCX,TYPEVAR2;CX=2MOVBL,TYPEVAR3;BL=4(4)LENGTH运算符格式:LENGTH变量功能:取出变量所含的数据存储单元个数。(5)SIZE运算符格式:SIZE变量功能:取出变量所含的数据存储区大小。其返回值为:
LENGTH变量*TYPE变量LENGTH和SIZE运算符的具体运算规则是:如果变量是用重复操作符DUP定义的,那么运算符LENGTH的运算结果是外层DUP的给定值(即外层重复次数),如果没有用DUP定义的变量,运算结果总是1。而运算符SIZE是LENGTH和TYPE两个运算结果的乘积。
【例】取出变量占存储单元个数。
DATA SEGMENTA DB ‘ABCDEF’B DW 10 DUP(1,2DUP(2))
C DB 3,20 DUP(0)
DATA ENDS┆ MOV AX,LENGTHA ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆
SIZEA=LENGTHA*TYPEA=1SIZEB=LENGTHB*TYPEB=20SIZEC=LENGTHC*TYPEC=1取值运算符例若BUFFER存储区是用如下伪指令定义:
BUFFERDW200DUP(0)
则:
TYPE BUFFER 等于2LENGTHBUFFER
等于200SIZE
BUFFER 等于4005运算符的优先级表3.3运算符的优先级4.2伪指令4.2.1数据定义伪指令4.2.2符号定义伪指令4.2.3段定义伪指令SEGMENT/ENDS4.2.4设定段寄存器伪指令ASSUME4.2.5
过程定义伪指令4.2.6
宏定义伪指令4.2.7源程序结束伪指令4.2.1数据定义伪指令常用的数据定义伪指令有DB定义的变量为字节型DW定义的变量为字类型(双字节)DD定义的变量为双字型(4字节)DQ定义的变量为4字型(8字节)DT定义的变量为10字节型格式:[变量名]数据定义伪指令表达式[,…]功能:定义数据存储区,类型由数据定义伪指令确定,初值由表达式给定。
返回本节数据定义伪指令例DATA1DB11H,22H,33H,44HDATA2DW11H,22H,3344HDATA3DD11H*2,22H,33445566H以上变量在内存中的存放形式数据定义伪指令伪指令的性质决定所定义变量的属性定义字符串必须用DB伪指令例:
DATA1DB‘ABCD’,66H‘A’‘B’‘C’‘D’41H42H43H44H66H低地址高地址4.2.2符号定义伪指令1.等价伪指令2.等号伪指令1.等价伪指令格式:符号名EQU表达式功能:为常量、表达式及其他各种符号定义一个等价的符号名,但它不申请存储单元。用途:①
用符号表示常量、数值表达式,即定义符号常量。使用符号常量可使程序简单明了,增强程序的可读性和通用性。②EQU与属性运算符PTR联合使用,可以给变量或标号定义新的类型属性并重新命名,但保持其段偏移地址属性不变。③利用EQU可以用一个符号名替代一个复杂的地址表达式和其他一些符号,如指令助记符、变量名、标号、段名、寄存器名、宏定义名等。
VRW1DW1234HVRB1
EQUBYTEPTRVRW1VRW2DB12H,34H
┆
MOVAX,VRW1MOVBL,VRB1;不会为VRB1重新分配新的存储单元,VRB1和VRW1具有相同的段属性和偏移量。即逻辑地址相同。在指令中也可使用PTR,临时修改变量或标号属性仅在此指令中存放,其他指令无效。例如:
MOVAX,WORDPTRVRW2
MOVBL,BYTEPTRVRW1
AX是16位,临时修改按字访问BL是8位,临时修改按字节访问2.等号伪指令格式:符号名=表达式功能:为常量、表达式及其他各种符号定义一个等价的符号名,并能对所定义的符号多次重复定义,且以最后一次定义的值为准。【例3.17】定义等价符号名。
┆COST=20LOST=LOST+10 ;30→LOST ┆P1624.2.3段定义伪指令SEGMENT/ENDS1.段名2.定位方式3.类别4.组合方式段定义伪指令段名SEGMENT[定位类型][组合类型][’类别’]
┇段名ENDS说明逻辑段的起点说明不同模块中同名段的组和连接方式书中164页,例4-31.段名段名是为该段起的名字,用来指出汇编程序为该段分配的存储区起始位置。2.定位方式定位类型是一个选项,它表示对段起始边界的要求,可以有4种选择:(1)PAGE(页):表示本段要从一个页的边界开始,即能被256整除的地址处开始存放,即起始地址的最低八位必须是0。(2)PARA(节):表示本段必须从一个节的边界开始,即必须从能被16整除的地址处开始存放,即段起始地址最低四位必须是0。如果未选择定位类型,则隐含PARA。(3)WORD(字):表示本段要从一个偶数地址处开始存放,即段起始地址的最低一位必须是0。(4)BYTE(字节):表示本段起始地址可以从任一地址处开始存放。3、组合类型组合类型也是一个可选项,它表示本段是否与其它段进行连接,有六种类型可供选择。
(1)NONE“不选择”(2)PUBLIC(3)STACK(4)COMMON(5)MEMORY(6)AT表达式
1)NONE
这是隐含选择,表示本段与其他段在逻辑上无连接关系,本段有自己的段基址。(2)PUBLIC
在满足定位类型的条件下,将本段与其他段名相同的段邻接在一起形成一个段,共用一个段基址,并相对这个段基址调整段内变量的偏移量。(3)COMMON
当连接多个程序模块时,为各模块中段名相同且用COMMON说明的段指定相同的段起始地址,并产生一个覆盖段。该段的长度取决于最长的COMMON段的长度。(4)STACK
将同段名的段连接成一个连续段,并且自动初始化堆栈寄存器SS和堆栈指针
SP,SS中为这个段的段基值,SP中为该段的字节长度。(5)MEMORY表示本段连接在其它所有段的后面,即分配在存储器的高址址端。(6)AT表达式表示本段的起始地址由表达式的值指定。表达式的值只能为16位二进制数。如“AT1001H”表示本段从主存地址10010H开始。(表示本段可定位在表达式所指示的小节边界上)【例3.19】不同模块连接时将相同类别的段放在连续的内存区域中DATA1 SEGMENT ‘DATA’CODE SEGMENT ‘CODE’STACK1 SEGMENT ‘STACK’DATA2 SEGMENT ‘DATA’STACK2 SEGMENT ‘STACK’经连接程序连接后,各段的相对位置如下:DATA1 SEGMENT ‘DATA’DATA2 SEGMENT ‘DATA’STACK1 SEGMENT ‘STACK’STACK2 SEGMENT ‘STACK’CODE SEGMENT ‘CODE’4.类别书中164页,例4-3软件中的例子【例3.20】有两个模块,各模块段定义如下:
模块1:
┆DATA1SEGMENTPARAPUBLIC‘DATA1’M1 DB45HDUP(0)DATA1ENDSDATA2 SEGMENTPARACOMMON‘DATA2’N1 DB102HDUP(0)DATA2ENDSEND模块2:
┆DATA1 SEGMENTPARAPUBLIC‘DATA1’M2 DB104HDUP(11H)DATA1 ENDSDATA2 SEGMENTPARACOMMON‘DATA2’N2 DB105HDUP(0)DATA2 ENDSDATA3 SEGMENTT1 DB50DUP(20H)DATA3 ENDSEND该段的定位组合方式示意图如图3.3所示。图3.3模块1、模块2连接后段的定位组合方式示意图返回本节通常练习用的程序,通常只需分三个段,其结构如下:DATASEGMENT┆DATAENDSSTACK1SEGMENTPARASTACK┆STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:……┆CODEENDSENDSTARTDATA无定位类型和组合类型,表明其它定位类型为节边界。组合类型为NONE;STACK1,节边界,组合类型STACK;
CODE,代码段,无定位类型、组合类型。4.2.4、段寻址伪指令ASSUME格式:ASSUME段寄存器:段名[,段寄存器:段名]功能:建立段寄存器与段之间的对应关系。该伪指令一般出现在代码段中。【例】用ASSUME伪指令建立代码段、堆栈段与CS和SS的对应关系。DATA1 SEGMENTDA1DB?DATA1 ENDSDATA2 SGEMENTDB2 DB?DATA2 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA1,ES:DATA2START: ……DA3DB?
MOV DS,AX ;DATA1→DS MOV AX,DATA3 MOV ES,AX ;DATA3→ES ┆CODE ENDS END START4.2.5
过程定义伪指令用于定义一个过程体格式:
过程名PROC[NEAR/FAR]
┇
RET
过程名ENDP过程入口的符号地址P166例例程演示4.2.6
宏定义伪指令宏命令——源程序中由汇编程序识别的具有独立功能的一段程序代码格式:宏命令名MACRO<形式参数>
┇
┇ENDM宏体P167例宏体所放的位置不限4.2.7源程序结束伪指令表示源程序结束功能:该语句标志整个程序的结束,是源程序的最后一条语句格式:END[标号]注意和段定义伪指令的区别!一个完整源程序结构例DSEGSEGMENTDATA1DB1,2,DATA2DW1234HDSEGENDSESEGSEGMENTDB20DUP(?)ESEGENDSSSEGSEGMENTSTACK‘STACK’DB200DUP(?)SSEGENDS一个完整源程序结构例CSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:ESEG,SS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,ESEGMOVES,AXMOVAX,SSEGMOVSS,AX┇CSEGENDSENDSTART源程序代码其它伪指令1格式:ORG数值表达式功能:将数值表达式的值赋给汇编地址计数器。数值表达式的值须为0~65535之间的非负整数。【例3.22】给汇编地址计数器赋值。DATA SEGMENTORG 10 ;置$值为10VAR1 DW100H,200HORG $+5 ;置$的值为14+5,即为19VAR2 DB1,2N EQU$-VAR2;($)=21DATA ENDS返回本节其他伪指令2NAME——为目标程序设定一个名字格式:
NAME模块名TITLE——为程序清单指定打印标题格式:
TITLE标题名P169例4.3
DOS系统功能调用4.3.1概述4.3.2常用的DOS系统功能调用返回本章首页用相应的程序说明4.3.1概述对8086系列机来说,MS-DOS操作系统是最主要的操作系统。MS-DOS操作系统除了具有较为完整的文件管理功能之外,同时还为各种应用程序、外围设备等提供软件接口。它由三部分组成:IO.SYS、MSDOS.SYS以及COMMAND.COM。DOS系统功能调用的方法一般可分为以下几步:①设置所要调用功能的入口参数。②在AH寄存器中存入所要调用功能的功能号。③INT21H指令自动转入中断子程序入口。④相应中断子程序运行完毕,可按规定取得出口参数。
返回本节4.3.2常用的DOS系统功能调用1.单字符输入(1号调用)2.单字符显示(2号调用)3.打印输出(5号调用)4.结束调用(4CH号调用)5.显示字符串(9号调用)6.字符串输入(10号调用)p410DOS功能调用高级调用,操作系统提供
BIOS功能调用低级调用DOS功能调用包含多个子功能的功能包,用软中断指令调用,中断类型码固定为21H各子功能采用功能号来区分附录CDOS功能调用设备管理目录管理文件管理其他DOS功能调用调用格式:
MOV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论