第三章微机原理与接口技术汇编语言程序设计基础091113

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章汇编语言程序设计基础指令系统是微处理器(CPU)所能执行的指令的集合,它与微处理器有密切的联系,不同的微处理器有不同的指令系统。在本章中我们主要讲解Intel公司生产的8086/8088CPU的寻址方式以及各种指令系统,并通过具体实例讲述了各条指令的功能和使用方法,我们在这章里还要学习汇编语言程序设计的基本方法。•通过本章的学习,应当掌握以下内容:•操作数的寻址方式•常用指令的格式、功能、以及对标志位的影响•了解汇编语言的基本知识和特点。•熟悉汇编语言的程序结构、段定义以及语句的格式。•掌握汇编语言常用伪指令的使用方法。•熟练掌握汇编语言程序设计的基本方法:顺序结构、分支结构、循环结构和子程序结构。•掌握程序设计中的宏指令和常用的系统功能的调用方法。3、18086指令系统3.1.18086指令的寻址方式操作码地址码汇编指令:操作码:指令的操作类型;地址码:指令所需的操作数或操作数的地址;操作数可以有一个,也可以有两个,一个源操作数,一个目的操作数。例:MOVAX,CX;将CX的内容送入AX中。本章主要介绍8086/8088的指令系统以及在指令中为取得操作数地址所使用的寻址方式。•指令的寻址方式是指在指令中操作数的表示方式。•大多数指令操作数的表示方式实际是操作数存放的位置。•操作数存放的位置包括:指令中的立即数CPU内部的寄存器CPU外部的内存储器。操作数的地址在许多情况下是计算机在执行指令时根据指令的寻址方式通过计算产生的。一般来说,指令的寻址方式越丰富,指令系统的功能就越强,编程的灵活性就越好。8086的寻址方式有:立即寻址、寄存器寻址、存储器寻址、串操作寻址、外设I/O端口寻址、程序转移操作寻址。存储器寻址又包括:直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址变址寻址。注意:寻址方式只能产生存储器的有效地址EA----段内偏移地址,由EA在BIU中在和段寄存器组合才能产生20位的物理地址。1、立即寻址方式:当操作数据就在指令中的地址码部分时,操作数与操作码一起在一条指令中即为“立即寻址”。指令中的这种操作数称为立即数,它可以随指令取指一起被取入CPU立即执行。立即数可以为8位或16位。数据例:MOVAL,5;源操作数为立即寻址指令执行后,AL=05H,8位数据05H存入AL寄存器。例:MOVAX,3064H;源操作数为立即寻址指令执行后,AX=3064H,16位数据3064H存入AX寄存器。OP立即数在指令中立即数可用16进制数(以H结尾),2进制数(以B结尾)和10进制数(用D或不加特殊符号)表示。也可以使用单引号‘’括起来的ASCII码表达的字符和字符串。注意,如果16进制数以字母A~F打头,则必须在前面加上一个“0”,这是汇编程序的要求.如:0B5H----16进制数B5H,0只用于识别,不保存。B5H------机器把它视为一个变量名。8位立即数:MOVAL,43H;16进制立即数MOVAL,01000011B;2进制立即数MOVAL,67;10进制立即数16位立即数:MOVAX,4142H;16进制立即数MOVAX,0100000101000010B;2进制立即数MOVAX,16706;10进制立即数32位立即数:MOVEAX,12345678H字符或字符串立即数:MOVAL,‘A’MOVAX,‘AB’•立即数寻址方式由于操作数可以在取指令时就取入CPU,在CPU执行的时候不用等待取数据,所以执行速度很快。•立即数寻址常用于已知常数的场合。例如:初始化程序中的赋初值。运算时已知的常数。注意:用单引号可以对字符的ASCII码进行立即数表示。例:MOVAL,‘A’;执行后AL=41H2、寄存器寻址方式寄存器寻址方式中指令的地址码是寄存器名,在对应寄存器中的内容就是操作数数据,寄存器包括8位或16位通用寄存器和段寄存器。寄存器可用作80×86操作数的寄存器如下表所示。OP寄存器名数据80×86寄存器寻址中的寄存器寄存器操作数字长字节(8位)名字(16位)双字(32位)累加器AH,ALAXEAX基址寄存器BH,BLBXEBX计数寄存器CH,CLCXECX数据寄存器DH,DLDXEDX堆栈指针/SPESP基址指针/BPEBP源变址寄存器/SIESI目的变址寄存器/DIEDI代码段寄存器/CS/数据段寄存器/DS/堆栈段寄存器/SS/E数据段寄存器/ES/F数据段寄存器/FS/G数据段寄存器/GS/注意:(1)当指令中的源操作数和目的操作数都是寄存器时,必须采用同样字长的寄存器,否则汇编时会出错;(2)两个操作数不能同时为段寄存器;(3)目的操作数不能是代码段寄存器,例如指令MOVCS,AX。•寄存器寻址由于数据在CPU内部,所以指令的执行速度也很快。常将一些常用的数据调入到寄存器中,程序执行时就可以减少CPU访问内存的次数,提高程序的执行速度。•例如:MOVAL,DL;ALDL•ADDAX,BX;AXAX+BX•MOVDS,AX;DSAX•INCBX;BXBX+13存储器寻址方式•在内存寻址方式中,操作数是某个内存单元的内容(值),指令中给出的是内存单元的有效地址EA(即偏移地址),段地址通常在隐含的某个段寄存器中。•EA是由EU根据存储器寻址方式计算产生的一个16位偏移地址,该地址送入BIU后,在BIU里进行地址变换产生20位的存储器物理地址。BIU由EA可以自动产生对应的段寄存器。OP偏移地址操作数+段起始地址EA物理地址(1)直接寻址方式在直接寻址方式中,指令的地址码直接给出操作数的偏移地址(有效地址EA),即:EA=直接段内偏移地址。偏移地址有直接地址值和地址标号两种形式,段地址隐含的由DS指定,也可以通过段超越指定其它段寄存器。内存•例1:MOVAX,[2000H]将DS:2000H单元内容送入AX。AL(DS*10H+2000H)AH(DS*10H+2001H)•例2:MOVAX,ES:[2000H]将ES:2000H单元内容送入AX。AL(ES*10H+2000H)AH(ES*10H+2001H)例3:MOVDL,[2000H];DL(DS*10H+2000H)•也可以使用符号地址。•例:MOVAX,LABLE•或MOVAX,[LABEL]•将标号为LABLE(存放操作数单元的符号地址),即DS:LABLE中的内容送入AX。•注意:•使用数字地址时必须加方括号;•使用符号地址时可以不加方括号,但符号地址必须是已定义的。•例如:ABCDB25•MOVAL,ABC;AL25(2)寄存器间接寻址•寄存器间接寻址方式的操作数形式为:[reg]•指令的地址码给出一个间址寄存器,对应的寄存器中存放有操作数在内存单元的偏移地址,即:EA=BX或SI或DI•操作数的有效地址包含在基址寄存器BX或一个变址寄存器(SI或DI)中。寄存器间接寻址要用方括号括起来,以便与寄存器寻址相区别。•寄存器间接寻址的示意图:操作数+段起始地址EA物理地址OP间址寄存器偏移地址BX、SI、DI内存例如:MOVAX,[BX];将DS:BX单元内容送入AX。AL(DS*10H+BX)AH(DS*10H+BX+1)设BX=1000H,DS=5000H,则寻址的示意图为:5000:0000H5000:1000H5000:1001H5000:1002HBBAATAB:AXAHALAABB间接寻址数据段起始1000HBX内存操作数在存储器中,指令中寄存器内容作为操作数所在单元的有效地址。(BX)(SI)(DI)有效地址=段寄存器为DS物理地址计算方法:物理地址=DS*10H+BX或SI或DI注意:间址寄存器只能用BX、SI、DI例:已知:(DS)=2100H,(DI)=2000H指令:MOVAX,[DI];物理地址=DS*10H+DI=2100H*10H+2000H=21000H+2000H=23000H指令结果:将23000H单元内容送AL中,将23001H单元内容送AH中。使用寄存器可形成地址指针,通过修改指针可实现程序对多个地址单元的间接访问。例如:MOVCX,100MOVBX,2500HL:MOVAL,[BX]………………INCBXLOOPL41H42H43H44H45H2500H2501H2502H2503H2504H……..内存(3)、基址寻址方式操作数在存储器内,指令中地址码给出一个基址寄存器,EA=基址寄存器+DISP(位移量)。基址寄存器:BX----数据段BP-----堆栈段EA=BX+DISP8/DISP16物理地址=DS*10H+BX+DISP8/DISP16EA=BP+DISP8/DISP16物理地址=SS*10H+BP+DISP8/DISP16段寄存器为DS段寄存器为SS基址寻址示意图:操作数+段起始地址EA物理地址OP基址寄存器DISP基地址BX/BP+内存例:如果DS=3000H,BX=2000H,COUNT=3000H,则执行指令MOVAX,CONUT[BX],求出此种寻址方式对应的有效地址和物理地址。有效地址=2000H+3000H=5000H物理地址=DS*10H+5000H=30000H+5000H=35000H指令也可以写成:MOVAX,[BX+CONUT];MOVDX,[BP+3000H];基址寻址可用于访存地址的再定位,用于数组数据的访问。(4)、变址寻址方式操作数在存储器内,指令中地址码给出一个变址寄存器,EA=变址寄存器+DISP(位移量)。变址寄存器:SI或DI----数据段EA=SI+DISP8/DISP16物理地址=DS*10H+SI+DISP8/DISP16EA=DI+DISP8/DISP16物理地址=DS*10H+DI+DISP8/DISP16段寄存器为DS变址寻址的示意图:操作数+段起始地址EA物理地址OP变址寄存器DISP变址地址SI/DI+内存例:如果DS=4000H,SI=1000H,COUNT=500H,则执行指令MOVAX,CONUT[SI],求出此种寻址方式对应的有效地址和物理地址。有效地址=1000H+0500H=1500H物理地址=(DS)*10H+1500H=40000H+1500H=41500H指令也可以写成:MOVAX,[SI+CONUT];MOVDX,[DI+3000H];变址寻址可用于访问数组数据,SI、DI可形成数组元素的下标,通过修改SI、DI中的变址值可以实现对数组不同元素的访问。例如:ADBa0,a1,a2,a3,a4,a5,‥‥‥,a99;…………MOVSI,0;SI执行数组元素a0MOVCX,100;循环100次L:MOVAL,A[SI];取数组元素………INCSI;SISI+1,指向下一元素LOOPL;循环(4)、基址变址寻址方式:•操作数在存储器中,指令中地址码给出一个基址寄存器(BX或BP)、一个变址寄存器(SI或DI)。•EA=基址寄存器+变址寄存器•有以下4条寻址指令的EA:•EA=BX+SI;对应的段为DS•EA=BX+DI;对应的段为DS•EA=BP+SI;对应的段为SS•EA=BP+DI;对应的段为SS基址变址寻址的示意图:操作数+段起始地址EA物理地址OP基址寄存器变址寄存器基地址BX/BP+变址地址SI/DI内存BXSIBPDI有效地址=+物理地址=DS*10H+BX+SI或DI物理地址=SS*10H+BP+SI或DI例:MOVAX,[BX+DI]或MOVAX,[BX][DI](DS:BX+DI)字存储单元内容送AX。例:MOVAX,[BP+SI]或MOVAX,[BP][SI](SS:BP+SI)字存储单元内容送AX。•例:如果DS=2100H,BX=0158H,DI=10A5H,EA=11FDH,则执行指令MOVAL,[BX][DI]•有效地址:EA=BX+DI=0158H+10A5H=11FDH•物理地址=DS*10H+有效地址EA=21000H+11FDH=221FDH•执行结果:将221FDH单元内容送入寄存器AL中。(5)、相对基址变址寻址方式:•操作数在存储器中,指令中地址码给

1 / 193
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功