汇编语言与汇编程序_第1页
汇编语言与汇编程序_第2页
汇编语言与汇编程序_第3页
汇编语言与汇编程序_第4页
汇编语言与汇编程序_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言与汇编程序1第一页,共五十三页,编辑于2023年,星期日二、汇编语言与汇编程序2.1符号指令中的表达式;2.2符号指令的寻址方式;2.3常用指令;2.4伪指令;2.5常用系统功能调用与BIOS。2第二页,共五十三页,编辑于2023年,星期日2.1符号指令中的表达式1.常量和数值表达式;2.变量和地址表达式;3.标号;4.标量和标号类型的变更。3第三页,共五十三页,编辑于2023年,星期日1.常量和数值表达式1.常量:指在汇编时已经有确定数值,程序执行期间不变的量.(1)汇编语言使用的常量:2进制(10110110B)、8进制(1234Q)、10进制(123D)、16进制(01A8H)、ASCII码字符(‘welcome’,‘1234’)(2)应用:用于伪指令给变量赋值、或机器指令语句中的操作数、寻址方式中的位移量等4第四页,共五十三页,编辑于2023年,星期日(3)分类:数值常量:直接以数值出现,如0B7H

符号常量:由‘’括起来的一串字符,最长225个字符,如‘12345678’,‘hello’(4)符号常量的定义:伪指令EQU或“=”

eg:PEQU314;P=3142.数值表达式:是由常量和算术、逻辑、关系等运算符组成的有意义的式子。5第五页,共五十三页,编辑于2023年,星期日2.变量和地址表达式变量:存储器中的数据或数据区的符号表示。变量名:是数据的地址或数据区的首地址。地址表达式:由变量、常量、寄存器(SI、DI、BX、BP)的内容和运算符组成的有意义的式子。变量或地址表达式可给出指令中的存储器的地址。由于存储器是分段使用的,因此变量或地址表达式都具有3重属性:段地址、偏移地址和类型。6第六页,共五十三页,编辑于2023年,星期日变量的段地址:变量所在段的段首地址除以10H之商;当要访问某变量时,其段地址一定要在相应的段寄存器中。变量的偏移地址:变量所在段的段首址到该变量所在存储单元的字节距离,即EA。变量的段地址和偏移地址分别用SEG或OFFSET两个算符来指定。例如:变量W的段地址和偏移地址分别表示为SEGW和OFFSETW。变量的类型:存取某变量的字节数,Byte、Word、Dword、Qword、Tbyte7第七页,共五十三页,编辑于2023年,星期日变量的定义[变量名]

数据定义伪指令表达式[,……]

变量名:数据的地址或数据区的首地址数据定义伪指令:DB(定义字节)、DW(定义字)、DD(定义双字)、DQ(定义4字)、DT(定义10字节),根据定义的字节数自动给变量分配存储单元。表达式:数值表达式、ASCII码字符串、地址表达式、?及nDUP(表达式)8第八页,共五十三页,编辑于2023年,星期日数值表达式:

A1DB(-1*3),(15/3)ASCII码字符串:B2DB‘1234’,’ABCD’(DB给每个字节分配一个单元,字符从左至右按地址递增顺序排列)地址表达式:只能用于DW或DD,表达式为一变量或标号DW定义:取其偏移地址初始化变量,

egADWVALUE;取VALUE偏移地址初始化ADD定义:取其段地址和偏移地址初始化变量,

egADDVALUE;取VALUE段地址和偏移地址初始化A,髙位字为VALUE段地址,低位字为其偏移地址?:变量无确定的值,用于预留若干字节存储单元以存放结果nDUP:DUP为重复字句,n为重复因子egADB2DUP(0,3DUP(1));011101119第九页,共五十三页,编辑于2023年,星期日例如,在数据段DATAl中定义的变量如下:

WlDWB3;

B1DB'AB$’;

W2DW-5,1994H;

B2DB4DUP(?);

DDDEB;

B3DB2DUP(-1)DBlDUP(10,’E’);

DB’13’,1,3在附加数据段DATA2中定义的变量如下:

EBDB8DUP(?)EWDW’AB’,’CD’

10第十页,共五十三页,编辑于2023年,星期日3.标号标号是指令地址的符号表示,也可以是过程名。过程名是过程入口地址的符号表示,即过程的第一条指令的地址。标号的定义方式有两种:

(1)用“:”定义,直接写在指令助记符前。如CYCLE:MOVAL,[SI](2)用PROC和ENDP伪指令定义过程。标号代表指令的地址,因而它也有3个属性:段地址、偏移地址和类型。

标号的段地址:定义该标号所在段的段地址。标号的偏移地址:标号所在段的段首址到该标号定义指令的字节距离。

标号的类型有NEAR和FAR两种。11第十一页,共五十三页,编辑于2023年,星期日4.变量和标号类型的变更格式:类型PTR地址表达式PTR算符用来明确指出某个变量、标号或地址表达式的类型属性,或者使它们临时兼有与原定义所不同的类型属性,但仍保持它们原来的段地址和偏移地址属性不变。如:BYTEPTRW1

WORDPTRB3BYTEPTR[BX+3]12第十二页,共五十三页,编辑于2023年,星期日指令(Instruction):

让计算机完成某种操作的命令。指令系统(InstructionSystem):

指令的集合。2.2符号指令的寻址方式

一、概述指令——控制计算机完成指定操作的命令机器指令——指令的二进制代码形式。例如:CD21H汇编指令——助记符形式的指令。例如:INT21H指令系统——CPU所有指令及其使用规则的集合13第十三页,共五十三页,编辑于2023年,星期日8086汇编语言指令的语句格式[标号:]指令助记符[操作数][;注释](1)标号:指令所在地址的符号,符合以下规则:由字母(a-z,A-Z)、数字(0-9)或某些特殊字符(@,_,?)等组成;首字符是字母或某些特殊字符,但“?”不能单独作标识符;有效长度为1-31个字符。14第十四页,共五十三页,编辑于2023年,星期日(2)指令助记符:指出指令的操作类型。(3)操作数:参加本指令运算的数据。(4)注释:指令功能的说明。15第十五页,共五十三页,编辑于2023年,星期日有效地址EA(EffectiveAddress)内存单元的地址:段基址16+段内偏移量EA16第十六页,共五十三页,编辑于2023年,星期日指令包含的信息(1)做什么操作(2)操作数的来源(3)操作结果的存数(4)下一条指令的位置17第十七页,共五十三页,编辑于2023年,星期日指令的基本构成操作码[操作数],[操作数]说明要执行的是什么操作操作对象,可以有0个、1个或2个目的源18第十八页,共五十三页,编辑于2023年,星期日指令举例:ADDAX,[SI+6]MOVAX,BX操作码操作数INC[BX]HLT19第十九页,共五十三页,编辑于2023年,星期日双操作数指令ADDAX,BX

大多数运算型指令都是双操作数指令,对这种指令,有的机器(大中型)使用“三地址”指令:除给出参加运算的两个操作数外,还要指出运算结果的存放地址。现代微型计算机中多采用二地址指令,两个操作数分别称为“源操作数”和“目的操作数”,指令执行后,把运算结果放到目的操作数的地址之中。20第二十页,共五十三页,编辑于2023年,星期日指令系统设计一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关键。需要说明的是,在不同的计算机系统中,寻址方式的名称和分类并不统一,但基本可以归结为以下几种方式或它们的变型或组合:21第二十一页,共五十三页,编辑于2023年,星期日二、8088/8086的操作数分为3类1、立即数(常数)取值范围如下表:立即数只能用作源操作数,如8位16位无符号数00H-FFH(0-255)0000H-FFFFH(0-65535)带符号数80H-7FH(-128~127)8000H-7FFFH(-32768~32767)MOV AX,0FA00H ;正确MOV 8000H,DX ;错误22第二十二页,共五十三页,编辑于2023年,星期日2、寄存器操作数放在8个通用寄存器或4个段寄存器中的操作数23第二十三页,共五十三页,编辑于2023年,星期日只能存放字操作数段寄存器存放当前操作数的段基地址不允许将立即数传送到段寄存器SIDIBPSPCSDSESSS24第二十四页,共五十三页,编辑于2023年,星期日3、存储器操作数存储器操作数字节字双字124类型存储单元个数一般不允许两个操作数同时为存储器操作数25第二十五页,共五十三页,编辑于2023年,星期日存储单元的物理地址=段基地址×16+偏移地址若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。例如,若(BX)=2000H,(SI)=0A00H,(DI)=2A00H,则以下指令的结果是一样的: MOVAL,[2A00H] MOVAL,[BX+0A00H] MOVAL,[BX][SI] MOVAL,[DI]26第二十六页,共五十三页,编辑于2023年,星期日一条指令的执行时间=∑指令的执行时间取指令取操作数执行指令传送结果单位用时钟周期数表示结论:

1)尽量使用寄存器作为操作数

2)若有可能,用移位代替乘除法

3)尽量使用简单的寻址方式27第二十七页,共五十三页,编辑于2023年,星期日寻址方式——寻找操作数的方法

寻找操作数的地址在8086指令系统中,说明操作数所在地址的寻址方式可分为8种:

①立即寻址⑤寄存器相对寻址

②寄存器寻址⑥基址-变址寻址

③直接寻址⑦相对的基址-变址寻址

④间接寻址⑧隐含寻址三、8086的寻址方式28第二十八页,共五十三页,编辑于2023年,星期日

操作数(为一常数)直接由指令给出

(此操作数称为立即数)

立即寻址只能用于源操作数,用于寄存器或存储器赋初值,与寄存器或存储器操作数进行算术逻辑运算例:MOVAX,1C8FHMOVAL,8FHADDAX,100H

错误例:

×

MOV2A00H,AX

1.立即寻址29第二十九页,共五十三页,编辑于2023年,星期日立即数操作码低8位高8位存储器MOV操作码02H31HAHAL代码段代码段立即寻址指令在存储器中的存放形式AX指令操作例:MOVAX,3102H;AX3102H

执行后,(AH)=31H,(AL)=02H30第三十页,共五十三页,编辑于2023年,星期日2.寄存器寻址

操作数放在某个寄存器中源操作数与目的操作数字长要相同寄存器寻址与段地址无关例:

MOVAX,BXMOV[3F00H],AXMOVCL,AL

错误例:

×

MOVAX,BL;字长不同

×MOVES:AX,DX;寄存器与段无关31第三十一页,共五十三页,编辑于2023年,星期日AXSI2233H2233H指令操作例:MOVSI,AX;SI(AX)

指令执行前:(AX)=2233H

指令执行后:(AX)=2233H,(SI)=2233HAX是累加器,结果存放在AX的话,执行时间要短些。通用寄存器是处理器的一部分,采用寄存器寻址方式可以提高效率。32第三十二页,共五十三页,编辑于2023年,星期日3.直接寻址指令中直接给出操作数的16位偏移地址

偏移地址也称为有效地址(EA,EffectiveAddress)默认的段寄存器为DS,但也可以显式地指定其他段寄存器——称为段超越前缀偏移地址也可用符号地址来表示,如ADDR、VAR例:

MOVAX,[2A00H]MOVDX,ES:[2A00H]MOVES:[2A00H],DXMOVSI,TABLE_PTR33第三十三页,共五十三页,编辑于2023年,星期日指令操作例:MOVAX,[3102H]AL(3102H),AH(3103H)如果(DS)=2000H,(23102H)=CDH,(23103H)=ABH则操作数的物理地址为:

20000H+3102H=23102H指令执行后:(AX)=ABCDHMOV操作码02H31HAHAL23102HCDHABH存储器代码段数据段..34第三十四页,共五十三页,编辑于2023年,星期日4.寄存器间接寻址

操作数的偏移地址(有效地址EA)放在寄存器中

只有SI、DI、BX和BP可作间址寄存器

例:MOVAX,[BX]MOVCL,CS:[DI]

错误例:

×MOVAX,[DX]×

MOVCL,[AX]EA=(BX)(BP)(SI)(DI)35第三十五页,共五十三页,编辑于2023年,星期日(1)EA=[BX][SI][DI]若没有前缀指明具体的段寄存器,则操作数在数据段DS中(2)EA=[BP]若没有前缀指明具体的段寄存器,则操作数在堆栈段SS。36第三十六页,共五十三页,编辑于2023年,星期日指令操作例:MOVAX,[SI]若(DS)=6000H,

(SI)=1200H,(61200H)=44H,(61201H)=33H则指令执行后,(AX)=3344H。44H33H60001200DSSI6000061200

61200HAX存储器数据段

+)120044H33H37第三十七页,共五十三页,编辑于2023年,星期日5.寄存器相对寻址(包括基址寻址和变址寻址)EA=间址寄存器的内容加上一个8或16位的位移量寄存器相对寻址常用于存取表格或一维数组中的元素——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中(或反之)EA=(BX)(BP)(SI)(DI)+8位16位位移量

38第三十八页,共五十三页,编辑于2023年,星期日(1)若EA=[BX][SI][DI]+8位或16位偏移量则操作数地址DS:EA(2)若EA=[BP]+8位或16位偏移量则操作数地址:SS:EA39第三十九页,共五十三页,编辑于2023年,星期日例:MOVAX,[BX+8]MOVCX,TABLE[SI]MOVAX,[BP];默认段寄存器为SS指令操作例:MOVAX,DATA[BX]若(DS)=6000H,(BX)=1000H,DATA=2A00H,(63A00H)=66H,(63A01H)=55H则物理地址=60000H+1000H+2A00H=63A00H

指令执行后:(AX)=5566H(见下页图示)40第四十页,共五十三页,编辑于2023年,星期日操作码00偏移量低2A偏移量高DS6000BX1000

+DATA2A0063A0063A00HAHALAX代码段数据段.........66H55HMOVAX,DATA[BX]41第四十一页,共五十三页,编辑于2023年,星期日6.基址-变址寻址若操作数的偏移地址:由基址寄存器(BX或BP)给出——基址寻址方式由变址寄存器(SI或DI)给出——变址寻址方式

由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。EA=(BX)(BP)+(SI)(DI)同一组内的寄存器不能同时出现。42第四十二页,共五十三页,编辑于2023年,星期日例:

MOVAX,[BX][SI]MOVAX,[BX+SI]MOVAX,DS:[BP][DI]错误例:

×MOVAX,[BX][BP]

×

MOVAX,[DI][SI]43第四十三页,共五十三页,编辑于2023年,星期日

83000操作码DS

8000BX

2000

+SI

100083000HAHALAX代码段数据段.........YYXX指令操作例:MOVAX,[BX][SI]假定:(DS)=8000H,(BX)=2000H,SI=1000H则物理地址=80000H+2000H+1000H=83000H指令执行后:(AL)=[83000H](AH)=[83001H]44第四十四页,共五十三页,编辑于2023年,星期日7.相对的基址-变址寻址在基址-变址寻址的基础上再加上一个相对位移量

注意事项同基址-变址寻址EA=(BX)(BP)+(SI)(DI)+8位16位位移量

例:MOVAX,BASE[SI][BX]MOVAX,[BX+BASE][SI]MOVAX,[BX+SI+BASE]MOVAX,[BX]BASE[SI]MOVAX,[BX+SI]BASE45第四十五页,共五十三页,编辑于2023年,星期日指令操作例:MOVAX,DATA[DI][BX]若(DS)=8000H,(BX)=2000H,(DI)=1000H,DATA=200H则指令执行后(AH)=[83201H],(AL)=[83200H]8320083200HAHALAX+DATA0200操作码代码段数据段.........YYXXDS

8000BX

2000

DI

100046第四十六页,共五十三页,编辑于2023年,星期日使用相对的基址-变址寻址方式可以很方便地访问二维数组。基址寄存器数组首地址变址寄存器数组元素行址位移量数组元素列址(偏移地址)47第四十七页,共五十三页,编辑于2023年,星期日8.隐含寻址

指令操作数是隐含的,在指令中未显式地指明。例:MULBL指令隐含了被乘数AL及乘积AX类似的指令还有:DIV、CBW、MOVS等(AL)×(BL)→AX48第四十八页,共五十三页,编辑于2023年,星期日分别指出下列指令中源操作数的寻址方式。(1)MOVBX,[1000H](2)ADDAX,[SI+4](3)MOV[DI],1000H(4)SUBAX,[BP+DI+5](5)MOVAX,BX49第四十九页,共五十三页,编辑于2023年,星期日指出下列指令中源操作数的寻址方式,并计算源操作数的物理地址。设(DS)=2000H,(ES)=3000H,(SS)=4000H,(SI)=100H,(BX)

温馨提示

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

评论

0/150

提交评论