chap21.ppt

上传人:本田雅阁 文档编号:2891141 上传时间:2019-06-02 格式:PPT 页数:40 大小:286.52KB
返回 下载 相关 举报
chap21.ppt_第1页
第1页 / 共40页
chap21.ppt_第2页
第2页 / 共40页
chap21.ppt_第3页
第3页 / 共40页
chap21.ppt_第4页
第4页 / 共40页
chap21.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《chap21.ppt》由会员分享,可在线阅读,更多相关《chap21.ppt(40页珍藏版)》请在三一文库上搜索。

1、第2章 汇编语言与汇编程序,2,主要内容:,指令系统的一般概念 对操作数的寻址方式 六大类指令的操作原理: 操作码的含义 指令对操作数的要求 指令执行的结果 伪指令,3,概述,机器语言二进制数形式的指令和数据。 如“B0 64”等,既不直观,又不易理解和记忆. 而“MOV AL,64H”,很容易记忆理解,这就是助记符。 助记符用便于记忆的英语单词或其缩写表示的指令操作码。它反映了指令的功能和主要特征,便于人们理解和记忆。,4,标号及符号 用于表示操作数或操作数及指令的地址, 以方便编程; 用于实现变量和避免使用绝对地址; 伪指令由汇编程序执行的指令,它本身不被汇编成机器指令; 汇编语言指令助记

2、符,符号地址,标号,伪指令等语言元素的集合以及这些元素使用的规则; 汇编语言源程序用汇编语言编写的程序.,5,汇编程序,源程序的编译程序,汇编程序,汇编语言源程序,机器语言目标程序,汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫汇编。高级语言中称该过程为“解释”或“编译”。执行翻译的程序称为“汇编程序”。,6,2.1 符号指令中的表达式,常量及数值表达式 变量及变量定义 标号 变量和标号的类型变更,7,2.1.1 常量和数值表达式,1.常量 二进制数,以B结尾。如01001101B。 十进制数,如85。 十六进制数,以H结尾。第1个数字为A-F时,前面应加0,如0F1

3、60H。 字符串:用引号括起来的1个或多个字符。如ERROR!, a,汇编时被翻译成对应的ASCII码45H,52H,52H,4FH,52H,21H和61H。,8,符号常量,把一个常数用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示。类似于C语言中的#define。 符号定义伪指令有两种:EQU,=; 用“EQU”定义的符号未清除前,不能重新定义。用“=”定义的符号可在任何时候进行重定义。 二者均不占用存储空间,仅是给符号赋值 例: FIVE EQU 5 COUNT = 10,9,2.数值表达式,汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。 数值表达式中

4、的运算符主要有3类:算术、逻辑、关系。 1)算术运算符 +、-、*、/,MOD 用于数字表达式,例: MOV AX,4*1024 汇编后的形式为: MOV AX,4096,10,2)逻辑运算符 AND、OR、XOR、NOT,逻辑运算符只能用于数字表达式中。 例:MOV CL,36H AND 0FH 经汇编后:MOV CL,06H 注意,不要把逻辑运算符与逻辑运算指令混淆: 例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与AND AX, 3F00H等价。,11,3)关系运算符EQ、NE、LT、GT、LE、GE,关系运算的结果是一个逻辑值:真

5、或假 关系为真,结果为全1 关系为假,结果为全0 例:MOV BX,PORT GT 300H 若PORT的值大于300H,则汇编后为: MOV BX,0FFFFH 否则汇编后为: MOV BX,0,12,2.1.2 变量和地址表达式,变量即内存中的存储单元或数据区。 变量名是存储单元(数据区)的符号地址或名字。 变量有三个属性: 段地址变量所在段的段地址 偏移量变量单元地址与段首地址之间的位移量。 类 型常见有BYTE、WORD和DWORD三种。 变量在程序中作为存储器操作数被引用。,13,组成:A-Z(不分大小写), 0-9, _ 不能以数字开头 长度小于31个字符 不能与保留字(指令助记符

6、、伪指令、预定义符号等)重名 不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1 错误的:4M, LOOP, AAA, #HELP, +ONE,变量和标号名的使用规则,14,用于定义变量,即内存单元或数据区。数据定义伪指令的格式为: 变量名 数据定义伪指令 操作数,操作数, 常用的数据定义伪指令有如下几种: DB 定义字节 DW 定义字 DD 定义双字 DQ 定义四字 DT 定义10字节 操作数可以是常数、变量或表达式,数据定义伪指令,15,例1: DATA_B DB 10,5,10H DATA_W DW 100H,-4 DATA_D DD 0FFFBH 汇编

7、后的内存分配情况 如右图所示。,05H,10H,00H,01H,FCH,FFH,FBH,FFH,00H,00H,0AH,Q,DATA_B,DATA_W,DATA_D,10,5,10H,100H,-4,0FFFBH,16,例2:操作数可以是字符串,例如 STR DB HELLO 汇编后的情况如图:,STR,H,E,L,L,O,48H,45H,4CH,4CH,4FH,O,STR,H,E,L,L,48H,45H,4CH,4CH,4FH,O,STR,H,E,L,L,48H,45H,4CH,4CH,4FH,17,操作数?用来保留存储空间,但不存入数据. 例3:ABC DB 0,1,2,3,4,OK,$

8、RSV DW ?,?,?,?,?,?,?,? 复制操作符DUP: 重复的数据可以使用复制操作符DUP,如上面RSV亦可写成: RSV DW 8 DUP(?),18,2.1.3 标号,表示指令所在内存单元的符号地址 有三个属性: 段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 类 型:NEAR或FAR ,默认为NEAR : NEAR表示标号所在语句与转移指令/调用指令在 同一码段内,跳转时只需改变IP即可。 FAR标号所在语句与转移指令/调用指令不在同 一代码段内。 标号通常作为转移指令或CALL指令的转移地址。,19,SEG:取变量/标号的段地址 OFFSET:取变

9、量/标号的偏移地址 例:VAR DB 12H MOV BX,OFFSET VAR ;取变量VAR的偏移地址 MOV AX,SEG VAR ;取变量VAR的段地址 注意,以下指令的异同: MOV BX, OFFSET VAR LEA BX, VAR OFFSET只能取静态的偏移地址;,取地址运算符SEG、OFFSET,20,2.1.4 类型变更,常使用属性运算符PTR 用来指定操作数的类型。 格式: PTR 类型BYTE, WORD, DWORD, NEAR, FAR BYTE、WORD、DWORD 用于描述数据存储单元(变量)地址 NEAR、FAR 用于描述转移、调用的目的地址,21,寻址方式

10、寻找操作数的方法,一般指 寻找操作数的地址; 在8086指令系统中,说明操作数所在地址的寻址方式主要有7种: 寄存器寻址 基址寻址 立即寻址 变址寻址 直接寻址 基址变址寻址 间接寻址,2.2 符号指令的寻址方式,22,操作数放在某个寄存器中 源操作数与目的操作数字长要相同 寄存器寻址与段地址无关 例: MOV AX, BX MOV 3F00H, AX MOV CL, AL 错误例: MOV AX, BL ; 字长不同 MOV ES: AX, DX ; 寄存器与段无关,2.2.1 寄存器寻址,23,AX,SI,指令操作例:MOV SI,AX ; SI (AX) 指令执行前:(AX)=2233H

11、 指令执行后:(AX)=2233H,(SI)=2233H,2233H,2233H,24,操作数(为一常数,称为立即数)直接由指令给出; 立即寻址只能用于源操作数 例: MOV AX, 1C8FH MOV BYTE PTR2A00H, 8FH 错误例: MOV 2A00H, AX ; 错误!,2.2.2 立即寻址,25,立即数,操作码,低8位,高8位,存储器,MOV操作码,02H,31H,AH,AL,代码段,代码段,立即寻址指令在存储器中的存放形式,AX,指令操作例:MOV AX,3102H ; AX 3102H 执行后,(AH) = 31H,(AL) = 02H,26,指令中直接给出操作数的1

12、6位偏移地址 偏移地址也称为有效地址(EA, Effective Address) 默认的段寄存器为DS,但也可以显式地指定其他段寄存器称为段超越前缀 偏移地址也可用符号地址来表示,如ADDR、VAR 例: MOV AX , 2A00H MOV DX , ES: 2A00H MOV SI , TABLE_PTR,2.2.3 直接寻址,27,指令操作例:MOV AX,3102H AL (3102H) , AH (3103H),如果(DS)=2000H, (23012H) = CDH, (23013H) = ABH 则操作数的物理地址为: 20000H+3102H = 23102H 指令执行后:(

13、AX) = ABCDH,MOV操作码,02H,31H,AH,AL,23102H,CDH,ABH,存储器,代码段,数据段,. .,28,操作数的偏移地址(有效地址EA)放在寄存器中 只有SI、DI、BX和BP可作间址寄存器 例: MOV AX, BX MOV CL, CS:DI 错误例 : MOV AX, DX MOV CL, AX,2.2.4 间接寻址,EA =,(BX) (BP) (SI) (DI),29,指令操作例:MOV AX,SI 若 (DS)=6000H, (SI)=1200H, (61200H)=44H, (61201H)=33H 则指令执行后,(AX)=3344H。,30,2.2

14、.5 基址寻址与变址寻址,EA=基址(变址)寄存器的内容加上一个8/16位的位移量,常用于存取表格或一维数组中的元素 使用BX或BP则称为基址寻址,使用SI或DI则称为变址寻址,EA =,(BX) (BP) (SI) (DI),+,8位 16位,位移量,31,例: MOV AX, BX+8 ; 默认段寄存器为DS MOV CX, TABLESI ; 默认段寄存器为DS MOV AX, BP+1000H ; 默认段寄存器为SS 指令操作例:MOV AX,DATABX 若(DS)=6000H, (BX)=1000H, DATA=2A00H, (63A00H)=66H, (63A01H)=55H 则

15、物理地址 = 60000H + 1000H + 2A00H = 63A00H 指令执行后:(AX)=5566H (见下页图示),32,操作码,00 偏移量低,2A 偏移量高,DS 6000,BX 1000,+ DATA 2A00,63A00,63A00H,AH,AL,AX,代码段,数据段,. . .,. . .,. . .,66H,55H,MOV AX,DATABX,33,2.2.6 基址变址寻址,若操作数的偏移地址: 由基址寄存器(BX或BP)给出 基址寻址方式 由变址寄存器(SI或DI)给出 变址寻址方式,由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变

16、址寻址。,EA =,(BX) (BP),+,(SI) (DI),同一组内的寄存器不能同时出现。,34,例: MOV AX, BX SI MOV AX, BX+SI MOV AX, DS: BP DI 错误例: MOV AX, BX BP MOV AX, DI SI,35,83000,操作码,DS 8000,BX 2000,+ SI 1000,83000H,AH,AL,AX,代码段,数据段,. . .,. . .,. . .,YY,XX,指令操作例:MOV AX,BXSI 假定:(DS)=8000H, (BX)=2000H, SI=1000H 则物理地址 = 80000H + 2000H + 1

17、000H = 83000H 指令执行后: (AL)=83000H (AH)=83001H,36,基址变址寻址(续),在基址变址寻址的基础上再加上一个相对位移量 注意事项同基址变址寻址,EA =,(BX) (BP),+,(SI) (DI),+,8位 16位,位移量,例:,MOV AX,BASE SI BX MOV AX,BX+BASE SI MOV AX,BX+SI+BASE MOV AX,BX BASE SI MOV AX,BX+SI BASE,37,指令操作例:MOV AX,DATADIBX 若(DS)=8000H, (BX)=2000H, (DI)=1000H, DATA=200H 则指令

18、执行后(AH)=83021H, (AL)=83020H,83200,83200H,AH,AL,AX,+ DATA 0200,操作码,代码段,数据段,. . .,. . .,. . .,YY,XX,DS 8000,BX 2000,DI 1000,38,小结,指令由( )和( )构成,如何取得操作数称为( ),操作码,操作数,寻址方式,39,寄存器间接、基址与变址、基址变址、相对基址变址五种寻址方式的比较: 寻址方式 指令操作数形式 寄存器间接 只有一个寄存器(BX/BP/SI/DI之一) 基址 BX或BP加上位移量 变址 SI或DI加上位移量 基址变址 两个不同类别的寄存器 相对基址-变址 两个不同类别的寄存器加上位移量,40,2.2.8 存储器寻址中段地址的确定,段地址的确定有一个基本约定,除非指令中特别说明要超越这个约定,则按该约定进行,其约定见下表:,例:MOV ES:DI,AL,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1