第03章 汇编语言_第1页
第03章 汇编语言_第2页
第03章 汇编语言_第3页
第03章 汇编语言_第4页
第03章 汇编语言_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章汇编语言本章重点3.1寻址方式3.2汇编语言的语句格式3.3汇编语言中数据的表示方式3.4运算符号3.5伪指令3.6汇编语言的上机过程3.7汇编语言程序的调试过程

3.1寻址方式3.1.1操作数的种类3.1.2九大寻址方式3.1.3段跨越与段更换3.1.1操作数的种类什么是寻址方式?指令中提供操作数或操作数地址的方法。操作数:源操作数:其值不变化。目标操作数:其值有可能变化。(1)立即操作数:指令要操作的数据在指令代码中直接给出。

MOVAL,10H;指令码

B010(2)寄存器操作数:指令要操作的数据存放在CPU的寄存器中。

MOVAL,BL;指令码88D8(3)存储器操作数:指令要操作的数据在存储器(内存)中存放。

MOVAL,[1234H];(4)I/O端口操作数:指令要操作的数据来自或要送到I/O端口。

INAL,20H;指令码E4203.1.2九大寻址方式1.固定寻址2.立即数寻址3.寄存器直接寻址4.寄存器间接寻址5.存储器直接寻址6.基址寻址7.变址寻址8.基址变址寻址9.数据串寻址1.固定寻址

指令要操作的数据在指令中并没有明确给出,但隐含在指令中。

例:

MULBL;AL*BL=>AX

在该指令中,AL和AX并未给出.2.立即数寻址

指令要操作的数据包含在指令码中。例:MOVAX,1234H

其指令码为B83412注意:只能用于源操作数,不能用于目标操作数。3.寄存器直接寻址指令要操作的数据在寄存器中存放。例:MOVAL,3

注意:寄存器直接寻址即可用于源操作数,也可以用于目标操作数,若两个操作数都为寄存器直接寻址,则两个寄存器的类型必须一致。

4.寄存器间接寻址

在寄存器间接寻址中,操作数位于内存中,操作数的地址位于某个寄存器中,在指令(码)中给出的是该寄存器的名字(编号)。

举例:

MOVAL,[BX];指令码:8A07

MOVAX,[SI];指令码:8B04

可以用于寄存器间接寻址的寄存器有:BXSIDIBXSIDI的默认数据段DS

注意:汇编语言的两个操作数不能同时来源于存储器。5.存储器直接寻址

在存储器直接寻址中,指令直接给出的是操作数在内存中存放的地址。

例如:MOVAL,[1000H]MOVBX,[1000H]注意:隐含段为数据段。此方式即可用于源操作数,也可用于目标操作数,但两个操作数不能同时为存储器直接寻址方式。

在基址寻址中,操作数位于内存中,操作数的地址由基址寄存器BX或BP与一个位移量相加给出,在指令(码)中给出的是该基址寄存器的名字(编号)及位移量。

举例:MOVAL,[BX+1234H]注意:若为BX,则隐含段为数据段。若为BP,则隐含段为堆栈段。6.基址寻址

在变址寻址中,操作数位于位于内存中,操作数的地址由变址寄存器SI或DI与一个位移量相加给出,在指令(码)中给出的是该变址寄存器的名字(编号)及位移量.举例:

MOVAL,[SI+1234H]注意:隐含段为数据段。7.变址寻址8.基址变址寻址

在基变址寻址中,操作数位于内存中,操作数的地址由基址寄存器BX或BP与变址寄存器SI或DI及一个位移量相加给出,在指令(码)中给出的是寄存器的名字(编号)及位移量。

有效地址=(BX)(BP)+(SI)(DI)+位移量注意:若为BX,则隐含段为数据段。若为BP,则隐含段为堆栈段。3.1.3段更换与段跨越当要操作的数据不在隐含段中时,就需要段更换或段跨越。

MOVBX,0100HMOVAL,CS:[BX](1)MOV

AX,[1024](2)MOV[-100],BL(3)MOV[BX],[SI-10](4)MOV[AX+10],BL(5)MOV[BX+BP-50],DX(6)MOV[SI+DI],CL(7)MOV[SI+BX-100],100(8)MOVBX,[BX+SI-5](9)MOV[BX],AX3.2

汇编语言的语句格式[标号:]操作符[操作数][;注解][标号名]定义符参数1,…,参数n[;注释]一、汇编语句格式注意:1、机器指令的标号以冒号结束,伪指令的标号后不能加冒号。2、标号不能重复定义,但是可以多次使用。3、标号/变量的三大属性

标号是可执行语句的地址符号。变量是一个可以存放数据的存储单元的名字,变量名表示该数据区或存储区的第一个数据单元的首地址。标号和变量都具有以下三种属性:(1)段属性(SEGMENT)

当命名了一个标号或变量时,实际上也就是定义了该存储器操作数的所在的段。因此,也就确定了它们的段地址。在使用时,由于正在使用的段地址一定在CS、DS、ES、SS中。一般,标号的段地址在CS中,变量的段地址在DS中,在指令执行时,这种段地址被隐含地使用。(2)偏移量属性(OFFSET)

标号或变量所在的地址距段基址的偏移量。(3)类型属性(TYPE)

标号的类型分为段内(即近或NEAR)属性及段间(即远或FAR)属性。

定义一个变量时,用伪指令DB定义的变量,其类型属性即为字节(BYTE);用伪指令DW定义的变量,其类型属性即为字(WORD);用伪指令DD定义的变量,其类型属性即为双字(DWORD)。4、操作符5、操作数6、注释二、数据在机内的表示1、符号的表示2、数的表示法:定点与浮点3、数的表示范围3.3汇编语言中数据的书写格式1.二进制2.八进制3.十进制4.十六进制5.科学计数法6.ASCII码常量7.符号常量8.表达式3.4汇编语言中的运算符运算符分为算术运算符、逻辑运算符和关系运算符以及分析运算符等六种。1、算术运算符算术运算符包括+、-、*、/(加、减、乘、除)以及求除法运算后的余数的运算符MOD、SHL、SHR。这些运算符用于数值操作数中,其结果应为可计算的数值。如19/7其值为2,而19MOD7其值是5。2、逻辑运算符逻辑运算符是指实现按位操作的符号AND、OR、XOR和NOT。逻辑运算符的操作数只能是数字,且结果也为数字。3、关系运算符关系运算符有EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)等运算符。一个关系运算符联系的两个操作数,可以为数值,也可以为地址表达式。但其运算的结果一定是一个固定的数值,用来表示逻辑值。关系成立时,用0FFFFH表示真;关系不成立时,用0表示假。关系运算符所完成的操作也是在汇编时完成的。4、分析运算符该类操作符不改变操作数的属性,但能取得操作数的某一属性值。它们通常用于返回存储器操作数的段属性值,偏移量属性值及类型属性值。(1)SEG格式:SEG变量或标号名功能:返回变量或标号所在的段基址。例如:MOVAX,SEGA1;把变量A1的段基址送入AX中。(2)OFFSET格式:OFFSET变量名或标号名功能:返回变量或标号所在段的段内偏移量。例如:MOVAX,OFFSETA1;把A1的段内偏移量送入AX。(3)TYPE

格式:TYPE变量名或标号名功能:返回变量名或标号名的类型值。若为变量,其类型值由类型所对应的字节数决定。对于字节类型,类型值为1;对于字类型,类型值为2;对于双字类型,类型值为4。标号的类型值则用特殊的负数表示。对于NEAR类型的标号,类型值为-1,对于FAR类型的标号,类型值为-2。例如:ALFADW20DUP(?)…MOVAL,TYPEALFA(4)LENGTH格式:LENGTH变量名功能:返回与标号相联系的数据个数。

例如:ALFADW50DUP(?)

则MOVAL,LENGTHALFA(5)SIZE格式:SIZE变量名功能:返回与标号相联系的字节数。例如:ALFADW50DUP(?)

则MOVAL,SIZEALFA例如:DSEGSEGMENTD1DB3D2DW10DUP(?)

D3DB4DSEGENDS1.MOVAX,OFFSETD12.MOVAX,OFFSETD23.MOVAX,OFFSETD34.MOVAX,TYPED25.MOVAX,SIZED26.MOVAX,LENGTHD2

根据4,5,6能够得到怎样的关系?5、组合运算符①PTR

格式:类型PTR表达式类型可以为:BYTE,WORD,DWORD,QWORD,TBYTE,NEAR,FAR

功能:建立或修改表达式的类型为新类型。例如:MOVWORDPTR[SI],3MOVBYTEPTR[SI],3

D1DW1234HMOVAL,BYTEPTRD1②THIS

格式:THIS类型功能:建立一个新的类型例如:D1EQUTHISWORDD2DB20DUP(10H)

MOVAL,D2MOVAX,D16、字节分离运算符

HIGH*LOW*

注意:*为16位数据。例如:MOVAL,HIGH1234HMOVBL,LOW1234H注意运算符的优先级:单目〉双目算术〉关系〉逻辑

3.5伪指令伪指令:在汇编过程当中,起说明作用的指令。3.5.1符号定义伪指令符号定义伪指令可以为符号名赋新值。1.等价定义伪指令EQU伪指令格式:符号名EQU表达式功能:将表达式的值赋给符号名,或为表达式赋于另一个等价的符号名。注意:

EQU伪指令定义的符号名是常量,不能再赋值,即不允许用EQU再为符号名重新定义。A1EQU10+3A2EQUA1A3EQUAXA4EQUMOV2.等号定义伪指令伪指令格式:

符号名=表达式功能:将表达式的值赋给符号名(变量)。功能与EQU伪指令相似,不同之处是它可以在程序中不同地方多次使用,可以重新为符号名赋值。

B1=20

B2=20+7

B3=30+6例如:A1EQU30A1EQU40A1=30A1=40A1=30A1EQU40A1EQU40A1=303.5.2数据定义伪指令数据定义伪指令可为变量分配存储单元或定义数值。伪指令DB、DW、DD、DQ、DT分别定义字节、字或双字变量(或数据)。伪指令格式:

[变量名]DB表达式[变量名]DW表达式[变量名]DD表达式[变量名]DQ表达式[变量名]DT表达式功能:定义一个存储单元的标号名并初始化该单元或从该单元开始的若干连续单元。3.5.3段定义伪指令可以用来组成段的结构。1.段定义伪指令SEGMENT和ENDS

伪指令格式:段名SEGMENT[定位类型][组合类型][’类别’]

段名ENDS功能:用此伪指令可以把模块分为若干个逻辑段,每一对SEGMENT和ENDS可定义一个逻辑段。1)定位类型定位类型任选项告诉汇编程序如何确定逻辑段的边界在存储器中的位置。定位类型共有以下四种:●

BYTE(边界起始地址

=××××

××××

××××

××××

××××B)

该类型表示逻辑段从一个字节的边界开始,即可以从任何地址开始。此时本段的起始地址可紧接在前一个段的后面。●WORD(边界起始地址

=××××

××××

××××

××××

×××0B)

该类型表示逻辑段从字的边界开始。2字节为1个字,此时本段的起始地址必须是偶数。●PARA(边界起始地址

=××××

××××

××××

××××0000B)

该类型表示逻辑段从一个节(Paragraph)的边界开始(一节等于16个字节),也即段的起始地址能被16整除。故本段的起始地址(十六进制)应为××××0H。如果省略定位类型任选项,则默认其为PARA。●PAGE(边界起始地址=××××

××××

××××

00000000B)

该类型表示逻辑段从页边界开始(一页等于256个字节),也即段的起始地址能被256整除。故本段的起始地址(十六进制)应为×××00H。

2)组合(Combine)类型

SEGMENT伪指令的第二个任选项是组合类型,它告诉汇编程序当装入存储器时各个逻辑段如何进行组合。六种组合类型:

(1)不组合。如果SEGMENT伪指令的组合类型任选项缺省,则汇编程序认为这个逻辑段是不组合的。也就是说,不同程序中的逻辑段,即使具有相同的段名,也分别作为不同的逻辑段装入内存,不进行组合。(2)PUBLIC

连接时,对于不同程序模块中的逻辑段,只要具有相同的段名,就把这些段集中成为一个逻辑段装入内存。

(3)STACK

组合类型为STACK时,其含意为表明连接时,此段为堆栈段。

(4)COMMON

连接时,对于不同程序中的逻辑段,如果具有相同的段名,则都从同一个地址开始装入,因而各个逻辑段将发生重叠。最后,连接以后段的长度等于原来最长的逻辑段的长度,重叠部分的内容是最后一个逻辑段的内容。(5)MEMORY

该类型表示当几个逻辑段连接时,本逻辑段定位在地址最高的地方。如果被连接的逻辑段中有多个段的组合类型都是MEMORY,则汇编程序只将首先遇到的段作为MEMORY段,而其余的段均当作COMMON段处理。(6)AT表达式这种组合类型表示本逻辑段根据表达式的值定位段地址。如AT8A00H,表示本段的段地址为8A00H,则本段从存储器的物理地址8A000H开始装入。3)'类别'('Class')

类别名是合法的自定义符,必须放在单引号内。凡是类型名相同的段在连接时均按先后顺序连接起来。2.段假设伪指令ASSUME

伪指令格式:ASSUME段寄存器:段名[,…]段寄存器可以是CS,DS,ES,SS。段名为SEGMENT定义的逻辑段的名字。凡是本程序需要使用的段,都应指出。

功能:向汇编程序指示当前各段所用的段寄存器。设定段寄存器与段间的对应关系。3.源程序结束伪指令END

伪指令格式:END[表达式]其中表达式为存储器地址,通常为标号。功能:END表示一个模块的结束。通知汇编程序,源程序到此结束,且用表达式指出程序开始执行时的指令地址。表达式只用于主程序模块中。4.指令定位伪指令ORG

伪指令格式:ORG表达式其中表达式为16位无符号二进制数。功能:确定其后的数据和代码存放在相应段中的起始地址。

3.6汇编语言的上机过程例如:输出A与B的较大者SSEGSEGMENTSTACKSTKDB20DUP(0)SSEGENDSDSEGSEGMENTADB-3BDB4DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,SSEGMOVSS,AXMOVSP,SIZESTKMOVAL,AMOVBL,BCMPAL,BLJGL1MOVAL,BLL1:MOVDL,ALADDDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCSEGENDSENDSTART1.编辑源程序

EDIT.EXEEDITM1.ASM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论