第六章 汇编语言及其程序设计 (2).ppt
《第六章 汇编语言及其程序设计 (2).ppt》由会员分享,可在线阅读,更多相关《第六章 汇编语言及其程序设计 (2).ppt(133页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章 汇编语言及其程序设计,主要内容,汇编程序及其开发过程指令格式及寻址方式8086汇编语言的基本语法顺序、分支、循环结构程序设计子程序设计,汇编语言程序及开发过程,基本概念汇编语言:是一种面向机器的程序设计语言,它是机器语言的符号化描述。特点:代码短、空间省、效率高汇编语言源程序:用汇编语言编写的程序目标程序:汇编语言经翻译程序翻译成的代码程序(即机器语言的程序)。汇编程序:把源程序转变为相应目标程序的翻译程序,宏汇编:不仅包含一般汇编语言的功能,而且采用了高级语言使用的数据结构,是一种接近高级语言的汇编语言。汇编语言程序的开发过程编写源程序:EDIT(DOS),TextPad(Windo
2、ws)将源程序保存为 XXXX.asm 文件使用MASM生成目标程序 XXXX.OBJ使用LINK生成可执行程序 XXXX.EXE,使用汇编语言的过程,基本汇编语言程序实例,(1) DATA SEGMENT(2) String DB 程序设计,”$”(3) DATA ENDS(4) CODE SEGMENT(5) ASSUME CS:CODE,DS:DATA,SS:STACK(6) START: MOV AX,DATA(7) MOV DS,AX(8) MOV DX,OFFSET String(9) MOV AH,9(10) INT 21H(11) MOV AX,4C00H (12) INT 2
3、1H(13) CODE ENDS(14) STACK SEGMENT STACK(15) DB 256 DUP(?)(16) STACK ENDS(17) END START,AH = 9功能:显示字符串DS:DX = 串地址字符串以“$”结尾,AH = 4C功能:带返回码终止AL = 返回码,汇编语言程序 的开发过程,结构化程序设计程序设计的基本步骤分析问题确定处理方案确定具体操作步骤,绘制流程图编写程序调试并运行程序,得到预期结果整理输出结果,写出有关文档资料,流程图的画法,指令格式及寻址方式,指令格式,操 作 码,操 作 数,OP CODE,D,W,0,1,2,7,形式1,OP CODE
4、,D,W,0,1,2,7,形式2,OP CODE,D,W,0,1,2,7,形式3,DATA/DISP,DATA/DISP,12个字节,12个字节,MOD,REG,R / M,DATA/DISP,DATA/DISP,12个字节,12个字节,方向位,0:REG字段指出的寄存器为源操作数寄存器 1:REG字段指出的寄存器为目的操作数寄存器,字位,0:参加运算的操作数为字节操作数 1:参加运算的操作数为字操作数,MOD字段编码表,REG字段编码表,MOD,R/M,8086/8088常用指令集数据传送指令(14条),算术运算指令(20条),逻辑运算指令(13条),字符串指令(10条),控制转移指令(28
5、条),处理机控制指令(12条),寻址方式(重点)概述目的大多数情况下,指令不直接给出操作数本身,而是给出存放操作数的寄存器或者是内存单元的地址。大多数情况下,操作数地址也不是直接给出,而是给出计算操作数地址的方法,称之为寻址方式寻址方式的种类与数据有关的寻址方式(7种)与转移地址有关的寻址方式(4种),MOV指令(简介)指令格式 mov 目的,源功能:该指令将源内容送至目的地址内例: mov ax, bx 将寄存器bx中的内容送到寄存器ax中,与数据有关的寻址方式立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。立即数可以是8位的或者
6、16位的。(386之后的机器也可以是32位的)立即数方式用来表示常数,它经常用来给寄存器赋初值。只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。,立即数寻址方式举例 MOV AL, 5 - 指令执行后(AL)= 05H MOV AX, 3064H - 指令执行后(AX)= 3064H,寄存器寻址操作数在寄存器中,指令中指定寄存器号。16位的操作数,寄存器可以是 AX,BX,CX,DX,SI,DI,SP,BP。8位的操作数,寄存器可以是 AH,AL,BH,BL,CH,CL,DH,DL。,例: MOV AX , BX,指令执行前: (AX)= 3064H (BX
7、)= 1234H,指令执行后: (AX)= 1234H (BX)= 1234H,这种方式中,不需要访问存储器来取得操作数,所以这种方式可以得到较高的运算速度,操作数的地址,段地址,偏移地址,+,8086/8088段寄存器和相应存放偏移地址的寄存器之间的默认组合,16位寻址是有效地址的三种成分的组成,直接寻址方式操作数的有效地制只包含位移量一种成分,其值就存放在代码段中指令的操作码之后。位移量的值就是操作数的有效地址。,例: MOV AX , 2000H,假设(DS)= 3000H,物理地址 = 3000H * 16 +2000H = 32000H,假设(32000H)= 3050H,则指令执行
8、后,AX = 3050H,可以用符号来代替数值地址 MOV AX , VALUE MOV AX , VALUE 如果在附加段,则应指定段前缀 MOV AX , ES:VALUE MOV AX , ES:VALUE,直接寻址方式只适用于处理单个变量。例如某个存放在存储器中的变量,可以用直接寻址方式先把变量取出送到一个寄存器中,然后再做进一步的处理,寄存器间接寻址方式操作数的有效地址只包含基址寄存器或变址寄存器的内容。因此有效地址就在某个寄存器中,而操作数在存储器中。16位寻址,可用的寄存器是BX,BP,SI,DI。 使用BX、SI、DI,其默认段是数据段DS 使用BP,其默认段是堆栈段SS,例:
9、MOV AX , BX,如果(DS)= 2000H (BX)= 1000H,物理地址 = 2000H * 16 + 1000H = 21000H,如果(21000H)= 50A0H,指令执行后 AX = 50A0H,寄存器间接寻址方式可以用于表格处理,执行完一条指令后,只需修改寄存器内容就可以取出表格的下一项。,寄存器相对寻址方式操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和。,例:MOV AX , COUNTSI(也可以表示为 MOV AX , COUNT+SI),如果(DS)= 3000H (SI)= 2000H COUNT = 3000H,物理地址 = 3000H
10、 * 16 + 2000H + 3000H = 35000H,如果(35000H)= 1234H,指令执行后 AX = 1234H,寄存器相对寻址方式同样可以用于表格的处理,表格的首地址可设置为偏移量的地址,利用修改基址或变址寄存器中的内容来取得表格中的值,基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,例:MOV AX , BXDI(也可以表示为 MOV AX , BX+DI),如果(DS)= 2100H (BX)= 0158H (DI)= 10A5H,物理地址 = 2100H * 16 + 0158H + 10A5H = 221FDH,如果(221FDH)= 1
11、234H,指令执行后 AX = 1234H,基址变址寻址方式同样可以用于数组或表格的处理,表格的首地址可存放在基址寄存器中,利用变址寄存器来访问数组或表格中的元素,相对基址变址寻址方式操作数的有效地址是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移量之和。,例:MOV AX , MASKBXSI(也可以表示 为MOV AX , MASK+BX+SI),如果(DS)= 3000H (BX)= 2000H (SI)= 1000H MASK = 0250H,物理地址 = 3000H * 16 + 2000H + 1000H + 0250H = 33250H,如果(33250H)= 1234H
12、,指令执行后 AX = 1234H,相对基址变址寻址方式常用于二维数组的寻址,如存储器中存放着由多个记录组成的文件,则位移量可以指向文件之首,基址寄存器指向某个记录,变址寄存器则指向该记录中的一个元素,与转移地址有关的寻址方式目的确定转移指令(条件转移指令、无条件转移指令)及转子指令(CALL)的转向地址当转移发生在段内的时候,给出即将转移去执行的那条指令的偏移地址,并用该偏移地址取代IP寄存器中的内容当转去执行的指令与原来执行的指令不在同一段时,则还需要用新的代码段基址取代CS寄存器中原有的内容,种类段内直接寻址段内间接寻址段间直接寻址段间间接寻址,段内直接寻址转向的有效地址是当前IP寄存器
13、的内容和指令中指定的8位或16位位移量之和无条件转移指令在位移量为8位的时候称为短跳转 JMP SHORT QUEST IP IP+8位位移量无条件转移指令在位移量为16位的时候称为近跳转 JMP NEAR PTR PROGIA IP IP+16位位移量特点 指令中的位移量是转向的有效地址与当前IP值之差,所以这一程序段在内存的不同区域运行时,转移指令本身不会发生变化,符合程序再定位的要求,段内间接转移转向的有效地址是一个寄存器或是一个存储单元的内容。 这个寄存器或者存储单元中的内容可以用除立即数以外的任何一种寻址方式获得 (IP)(EA),这种寻址方式和以下的两种寻址方式都不能用于条件转移指
14、令。即,条件转移指令只能使用段内直接寻址,而无条件转移指令JMP和CALL可以使用四种寻址方式中的任何一种。,假设: (DS)= 2000H,(BX)= 1256H, (SI)= 528FH , 位移量 = 20A1H (232F7)= 3280H,(264E5H)= 2450H JMP BX 执行该指令后,(IP)= 1256H JMP TABLEBX 执行该指令后, (IP)= (DS)* 16 + (BX)+ 位移量) = (20000H + 1256H + 20A1H) = (232F7H)= 3280H JMP BXSI (IP)= (DS)* 16 + (BX)+ (SI) = (
15、20000H + 1256H + 528H) = (264E5H)= 2450H,寄存器相对寻址方式,基址变址寻址方式,段间直接寻址指令中直接提供了转向的段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器中的内容完成的操作 JMP FAR PTR OPR (IP) OPR的段内偏移地址 (CS) OPR所在的段地址,段间间接寻址用存储器中的两个相继字的内容来取代IP和CS寄存器中的原始内容,以达到段间转移的目的。 存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式获得完成的操作 JMP DWORD PTR OPR
16、(IP) (EA) (CS) (EA+2)例 JMP DWORD PTRBX+8 (BX)= 3706H,(DS)= 1000H 物理地址 = (DS)* 16 + (BX)+ 8 = 10000H + 3706H + 8 = 1370EH,指令执行后,(IP)= 67B2H,(CS)= 3305H,8086宏汇编语言的基本语法,汇编语句指令性语句经汇编之后,有目标程序与之对应,是有实际操作的语句。一般指令性语句 一条指令性语句对应一条8086/8088机器指令宏语句 该语句由伪操作符定义,通过宏定义、宏调用、宏扩展的过程来实现宏语句。一个宏语句对应一组目标代码程序,macro name MA
17、CRO dummy parameter list 宏定义体 ENDMmacro name actual parameter list,指令性语句格式 标号:前缀指令助记符操作数,操作数;注释标号:代表“:”后面语句的存储地址,供转移指令(JMP)、转子指令(CALL)、循环指令(LOOP)使用。 由字母、数字组成串(第一个字符非数字)前缀:是与串操作运算(MOVS、CMPS、SCAS、LODS、STOS)以及总线封锁指令(LOCK)配合使用的部分。它们是REP、REPZ、REPE、REPNZ、REPNE等等。 LOOP1: REP MOVS DEST, SOURCE操作数的数目可以为0,1或2
18、,用“,”隔开,指示性语句功能:对程序的起止信息、分段情况、变量说明、内存结构等进行说明。格式: 名字伪操作指令参数,参数;注释PC宏汇编的伪指令段定义伪指令:SEGMENT,ENDS,ASSUME,GROUP,ORG符号定义伪指令:EQU,=,LABEL数据定义伪指令:DB,DW,DD,DQ,DT,RECORD,STRUC,过程定义伪指令:PROC,ENDP宏处理伪指令:MACRO,REPT,IRPC条件汇编伪指令:IF,ENDIF,IFDIF,IFDEF基本元素汇编语言字符集大写字母:AZ小写字母:az数字:09符号:+,-,*,/,(,),;,,,.,:,_,“,$,&,#,?,! 注:
19、汇编语言源程序中,大小写字母作用相同,常量与数值表达式常量在汇编时已经确定的值。在指令中作为直接操作数,或者给变量赋初值类型数值常量:以数值的形式直接写在语句中符号常量:预先为它定义一个名字,然后在语句中用名字来表示该常量(提高程序的可读性) 用 EQU 或 = 来定义 例:PORT EQU 83H ALPHT = 35*21,各种形式常量的格式,返 回,标号标号是为一组机器指令所起的名字,用于程序转移指令、调用指令和循环指令的操作数(转向地址),一般在CS段内定义和使用。标号的属性:段地址、段内偏移地址和类型 标号所处的代码段的段基址,称为该标号的段地址 标号所处的位指向对于段首地址的相对地
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 汇编语言 及其 程序设计
限制150内