汇编语言程序设计及上机指导_第3章_指令格式及寻址方式
最新《汇编语言程序设计》学习指导
《汇编语言程序设计》学习指导《汇编语言程序设计》学习指导李涛课程名称:汇编语言程序设计课程英文名称:PROGRAMMING BY ASSEMBLE LANGUAGE总学时数:70讲课学时:50上机学时:20学分:4开课单位:远程教育学院授课对象:远程教育学院专升本计算机科学与技术专业学生先修课程:C语言程序设计一.本课程的教学目的、基本要求及其在教学计划中的地位汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而在对于程序的空间和时间要求很高的场合,汇编语言是必不可少的,至于对于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可。
每一系列的处理器都有自己独特的操作指令集。
Intel公司生产的8086系列微处理器在微型计算机中使用最广泛。
基于8086系列机型的汇编语言程序设计,对学习和使用微型计算机有着广泛的使用价值。
从1981年8088被IBM选中做个人计算机的处理器,随后8086系列的增强版本有8086、80286、80386、80486、Pentium(or 586)、PentiumPro(or6x86)、PentiumII and PentiumIII,每个版本都提供了更多的操作和更快的速度。
虽然机器的发展速度远远超出了人们的想象,但汇编语言,一门和机器硬件直接打交道的语言,是永远都不会过时的。
相反,它有着极强的生命力,随着硬件的发展不断的发展和完善。
每当新版本CPU推出后,汇编语言也扩展自己的指令对新硬件提供支持(如从8086到80286提供了对虚模式的支持,从80286到80386对寻址范围的扩展),但汇编语言的基本指令集没有变,这就对学习汇编语言提供了极大的方便,学生在对汇编的基本指令的学习中就可抓住汇编语言的精髓。
更重要的是,程序设计的基本思想是不会变的。
在对汇编语言基本指令的学习中掌握了程序设计的基本思想,则拥有了解决问题的方法,在以后的工作中,通过查阅资料等方式了解硬件的新特性,就可以完成实际工作。
第3章 8086指令系统-汇编语言程序设计教程-陆遥-清华大学出版社
直接寻址方式可以利用变量名的偏移地址属性来 描述操作数的偏移地址(可直接用变量名,或将 变量名置于方括号[ ]中),段寄存器默认为DS。 如果实际使用的段寄存器不是DS,则必须用段 前缀明确指出。
【例3.7】设数据段内有如下变量定义语句
VAR DB 76H,5CH,0A3H,08H
分析以下指令的执行结果。
3.1 指令系统基本概念
指令是给计算机下达的一个简单操作任务,CPU 所能执行的所有指令构成了一个计算机的指令系 统(也称指令集)。
汇编语言指令是对机器指令的符号化表示,采用 助记符来表示指令的操作功能和操作对象。
指令通常可以分为以下几类:
⑴ 数据传送类指令。 ⑵ 算术运算类指令。
⑸ 程序控制类指令。 ⑹ 处理器控制类指令。
【例3.3】要求将数据68传送给AL寄存器,写出相应的传 送指令。 分析:由于AL寄存器接收数据,所以目的操作数为AL, 采用寄存器寻址方式,而源操作数为常数68,采用立即寻 址方式
MOV AL,68 ;AL←68
【例3.4】设被加数存于寄存器DX中,加数为512,写出相 应的加法指令。 分析:因为被加数由寄存器DX提供,所以DX为目的操作 数,采用寄存器寻址方式,而加数为常数512,采用立即 寻址方式
操作数。
2. ADD指令
指令格式:ADD DST,SRC 指令功能:DST←(DST)+(SRC) 。执行加法运算。 操作数特点:两个操作数。被加数DST为目的操作数,加
数SRC为源操作数。
3. NOT指令
指令格式:NOT OPR 指令功能:OPR←(OPR) 。执行逻辑非运算。 操作数特点:一个操作数。OPR既是目的操作数,也是源
段地址由段寄存器提供,用段前缀(DS:,ES:, CS:或SS:)来指明;偏移地址(亦称有效地址) 则有多种表示形式,由此形成了不同的存储器寻 址方式。
汇编第3章-汇编语言程序设计
另外还要按被调用的功能的要求在指
定的寄存器中放一定的数据,称为入 口参数,使用不同的功能需要不同的 入口参数。 如果操作有需要交给用户程序的数据, 将放在特定的寄存器或内存中,称为 出口参数。调用完成后,用户程序可 以从那些特定的寄存器或内存中取出 数据使用,或者判断操作完成的情况。
1.DOS的1号子功能——单字符输入
(6)
MUL (7) MUL (8) MUL (9) MUL
⑽
BYTE PTR [BP+DI];正确 DS ;错误 1024H ;错误 [BX] ;错误
MUL AX, BX ;错误
5.
DIV指令 【指令格式】DIV S 【功能】完成无符号数的除法运算。 根据S的类型分两种情况:如果S是字 节型,则用AX的值作为被除数,S作为 除数,运算结果:字节型的商放到AL 中,字节型的余数放到AH中;如果S是 字型,则DX、AX组成32位的被除数,S 作为除数,计算结果:字型的商放到 AX中,字型的余数放到DX中。
【功能】从键盘上读取一个按键的
ASCII码值。 【具体操作】: (1) AH中放子功能号1; (2) [入口参数] 无; (3) INT 21H 软中断调用 (4) [出口参数] AL中是按键的ASCII 码值。
[说明]
该功能只要求在执行INT
21H指令时AH 中的值是1,而不论AH是在何时、以何 种指令被赋的值,这一点对所有DOS系 统功能调用都是一样的。 调用时,计算机的屏幕上将出现一个 闪烁的光标,等待操作人员按键;当 有键被按下后,取出该按键的ASCII值 放入AL。
表3-1 特殊输出效果相应的ASCII码值
【例3-6】
编写程序段完成回车换
汇编语言程序设计(第四版)第3章【课后答案】
汇编语言程序设计第四版【课后习题答案】--囮裑為檤第3章汇编语言程序格式〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用?〔解答〕伪指令语句与硬指令语句的本质区别是能不能产生CPU动作;伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。
〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成?〔解答〕为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符;汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。
〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。
〔解答保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。
汇编语言对大小写不敏感。
如定义字节数和字符串的DB就是伪指令助记符。
〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成?〔解答〕汇编语句有执行性语句和说明性语句;执行性语句由标号、硬指令助记符、操作数和注释四部分组成;说明性语句由名字、伪指令助记符、参数和注释四部分组成〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。
〔解答〕⒈编辑文本编辑程序汇编语言源程序.asm⒉汇编汇编程序目标模块文件.obj⒊连接连接程序可执行文件.exe或.com⒋调试调试程序应用程序〔习题3.6〕区分下列概念:(1)变量和标号(2)数值表达式和地址表达式(3)符号常量和字符串常量〔解答〕(1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。
(2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。
第3章 8086指令系统及汇编语言程序设计
图3-7 立即数寻址
第3章 8086指令系统及汇编语言程序设计
注意: (2)寄存器寻址方式 ● 寄存器寻址方式的指令操作在CPU 定义:操作数放在寄存器内,由指令直接给出某个 内部执行,不需要执行总线周期,执行速 寄存器的名字,以寄存器的内容作为操作数。寄存器可以 度快。 是16位的 AX、BX、CX、DX、SI、DI、SP、BP寄存器, ● 寄存器寻址方式既适用于指令的源 也可以是8位的 AH、AL、BH、BL、CH、CL、DH、DL 寄存器。 操作数,也适用于目的操作数,并且可同 时用于源操作数和目的操作数。 【例3-2】 MOV AX,CX ;(AX)←(CX) INC AL ;(AL)←(AL)+1 指令执行结果如图3-8 所示
图3-8 寄存器寻址
第3章 8086指令系统及汇编语言程序设计
(3)直接寻址方式 定义:操作数在存储器中,指令中直接给出操作数所在存 注意: 储单元的有效地址。有效地址( EA)也称为偏移地址,它代表 ●直接寻址方式的操作数所在存储单元的段地址一 操作数所在存储单元距离段首址的字节数。有效地址是一个无 般在数据段寄存器DS中。 符号的16位二进制数。 ●如果操作数在其他段,则需要在指令中用段超越 【例3-3】 前缀指出相应的段寄存器名。 ● VALUE是一种符号表示法,此内容将在伪指令中 MOV AH, [1234H ] ;将DS段中1234H单元的内容送给AH 给予讲解。 MOV AH ,VALUE ;将DS段中VALUE单元的内容送给AH ●在实地址方式下,物理地址=16*段地址(DS) MOV AX, [2100H] ;将DS段中2100H单元的内容送给AL, +偏移地址(EA) 2101H单元的内容送给AH MOV BX,ES:【2000H】 ;段超越,操作数在附加段。即 物理地址=(ES)*16+2000H
汇编语言程序设计_第3章 80x86指令系统
3.3.2 算术指令
1. 加法
一般形式:
ADD dest, src ; dest = dest + src
ADC dest, src ; dest = dest + src + CF
INC
dest
; dest = dest + 1
语法格式:
ADD reg/mem, reg/mem/imm
ADC reg/mem, reg/mem/imm
movsx ax, al ; 等价于cbw movsx eax, ax ; 等价于cwde movsx eax, al ; 等价于顺序执行cbw与cwde
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
(3)MOVZX 一般形式: MOVZX dest, src ; src零扩展为dest;386新增 语法格式: MOVZX reg16, reg8/mem8 MOVZX reg32, reg8/mem8/reg16/mem16
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
5. 堆栈操作指令
80x86系统的堆栈具有如下特点: 堆栈是在内存的堆栈段中,具有“先进后出”的特点。 堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单
元。 堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地
INC
reg/mem
对标志位的影响:
ADD、ADC:按一般规则影响CF、OF、SF和ZF。 INC:不影响CF,其它同ADD。 说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。
2019/8/26
微型计算机原理及应用(第二版)第3章指令系统及汇编语言程序设计
第3章 指令系统及汇编语言程序设计
在执行段间直接寻址指令时,指令操作码后的第二个 字将赋予代码段寄存器CS,第一个字将赋予指令指针寄存 器IP,最后,CS×16和IP内容相加则得转移地址。指令中 用FAR PTR操作符指明这是一条远转移指令。
当CS和IP的内容同时改变时,便会发生段间转移。当 8088(8086)CPU执行一条远转移指令时,将从指令码下面的 4个顺序单元中取出4个字节,分别放入IP和CS。这样就改 变了两个寄存器的内容。这4个字节是由汇编程序事先放好 的段间转移的目标地址。
第3章 指令系统及汇编语言程序设计
(2) 若以寄存器BP间接寻址,则操作数存放在堆栈段 区域中。此时,堆栈寄存器SS的内容乘16加上BP中的16位 段内偏移地址,即得操作数的地址。例如:
MOV DX,4000H MOV SS,DX MOV BP,500H MOV BX,[BP]
第3章 指令系统及汇编语言程序设计
第3章 指令系统及汇编语言程序设计
3.1.2 决定转移地址的寻址方式
由于8088(8086)对内存的寻址是利用段寄存器对内存 分段来实现的,CPU执行的程序存放在代码段寄存器所决 定的内存代码段中,这就存在着程序的转移可以在段内进 行也可以在段间进行的情况。8088(8086)CPU支持这两种情 况的转移,下面分别加以说明。
第3章 指令系统及汇编语言程序设计
2) 段间间接寻址 这种寻址方式和段内间接寻址相似。但是,由于确定 转移地址需要32位信息,因此只适用于存储器寻址方式。 用这种寻址方式可计算出存放转移地址的存储器的首地址, 与此相邻的4个单元中,前两个单元存放16位的段内偏移地 址;而后两个单元存放的是16位的段地址,例如:
第三章 8086指令系统与汇编语言程序设计 微机原理与接口技术 教学课件
2、组成
操作码 :说明计算机要进行的操作。 操作数 :说明操作对象。
例:MOV AX, BX
2
3.1基本概念
二、指令系统
一台计算机期目的而用程序设 计语言设计的一系列操作,体现形式是指令序列。
3
3.2.1 8086的数据寻址方式
与数据有关的寻址方式:以 MOV 指令为例
12
四、寄存器间接寻址
注:1、不允许使用AX、CX、DX 存放 EA MOV AX, [CX]
2、源操作数和目的操作数的字长一致 MOV DL, [ BX ] ; BX指示一个字节单元 MOV DX, [ BX ] ; BX指示一个字单元
13
五、基址变址寻址
特点:1、操作数的有效地址是一个基址寄存器和 一个变址寄存器的和。
BX SI
有效地址 =
+
BP DI
指令
基址寄存器 变址寄存器
变址值
内存
+ EA 数据
基址值
14
五、基址变址寻址
2、如未指明操作数所在的段,指令中指定的基址寄存器是BX, 默认为数据段;基址寄存器是BP时,默认为堆栈段。
例:MOV AX, [BX] [DI] ;PA = 16d DS + BX+DI MOV AX, [BP] [SI] ;PA = 16d SS + BP +SI
• 立即数寻址
MOV AX , 3069H
• 寄存器寻址
MOV AL , BH
• 直接寻址
MOV AX , [ 2000H ]
• 寄存器间接寻址 MOV AX , [ BX ]
• 基址变址寻址 MOV AX , [ BP ] [ DI ]
汇编语言程序设计第三章习题答案
第三章答案:3.1(1)立即数寻址代码段(2)寄存器寻址数据段(3)寄存器间址数据段(4)寄存器间址数据段(5)直接寻址数据段(6)直接寻址数据段(7)基址寻址堆栈段(8)直接寻址代码段(9)寄存器寻址数据段(10)变址寻址数据段(11)基址变址寻址数据段(12)基址变址寻址堆栈段(13)基址变址寻址堆栈段(14)基址变址寻址堆栈段3.2(1)直接寻址30000H+0ABCH=30ABCH(2)寄存器寻址(3)直接寻址30000H+2000H=32000H(4)基址寻址30000H+0100H+2000H=32100H(5)寄存器间址30000H+0100H=30100H(6)寄存器间址30000H+00A0H=300A0H(7)寄存器间址20000+0010H=20010H(8)基址变址寻址20000H+0010H+2000H+00A0H=220B0H (9)基址寻址30000H+0100H-40H=300C0H(10)变址寻址30000H+0040H+00A0H=300E0H(11)基址变址寻址30000H+0100H+0100H-0040H=301C0H (12)基址变址寻址20000H+00A0H+0100H+0010H=201B0H (13)变址寻址30000H+2000H+0002H=32002H(14)基址变址寻址41000H+2000H+0100H+0002H=43102H 3.3第一种:MOV AX,[02C0H]第二种:MOV AX,[BP]第三种:MOV AX,0240H[BX]第四种:MOV AX,0100H[DI]第五种:MOV AX,0220H[SI](只要物理地址为095C0H即可)3.4(1)错,类型不匹配(2)错,类型二义性(3)对(4)错,立即数不能直接送入段寄存器(5)错,字节单元无法存放PUSH的值(6)对(7)对(8)错,不能把数据从段寄存器传入段寄存器(9)错,源操作数与目的操作数不能同时为存储器操作数(10)错,操作数类型二义性(11)错,XCHG指令的两个操作数都不能为立即数(12)错,类型不匹配(13)错,操作数类型二义性(14)错,RCL移位不为1时,必须用CL寄存器来操作(15)错,不能传送入段寄存器CS(16)错,目的操作数不能为立即数(17)错,格式不正确(18)错,变址寄存器不能使用寄存器BP(19)错,基址寄存器不能使用寄存器SI(20)错,目的操作数必须为通用寄存器3.5(1)(CL)=0F6H(2)(1E4F6)=5678H(3)(BX)=0056H (AX)=1E40H(4)(SI)=00F6H (DS)=1E40H (1E4F6H)=0024H (5)(CX)=00F6H (AX)=5678H (09226H)=1234H 3.6MOV是数据传送指令,LEA是取地址指令。
第三章MCS-51指令系统及汇编语言程序设计
指 令 系 统 的 寻 址 方 式
MCS-51指令系统及一般说明 MCS-51指令系统及一般说明
在介绍指令之前, 在介绍指令之前 , 先对指令中使用的一些符号意义进行简单 的说明。 的说明。 direct---直接地址, ---直接地址 ① direct---直接地址,即8位的内部数据存储器单元或特殊 功能寄存器的地址。 功能寄存器的地址。 #data--包含在指令中的8位常数。 --包含在指令中的 ② #data--包含在指令中的8位常数。 #datal6--包含在指令中的16位常数 包含在指令中的16位常数。 ③ #datal6--包含在指令中的16位常数。 rel-- 位的带符号的偏移量。用于SJMP --8 SJMP及所有的条件转移 ④ rel--8位的带符号的偏移量。用于SJMP及所有的条件转移 指令中。 指令中 。 偏移量按相对于下一条指令的第一个字节地址与跳转 后指令第一个字节地址之差计算, 范围内取值。 后指令第一个字节地址之差计算,在-128~+127范围内取值。 128 +127范围内取值 DPTR--数据指针,可用作16位的地址寄存器。 --数据指针 16位的地址寄存器 ⑤ DPTR--数据指针,可用作16位的地址寄存器。
指 令 系 统 的 寻 址 方 式
寄存器间接寻址
寄存器间接寻址方式可用于访问内部RAM 或外部数据存储器 寄存器间接寻址方式可用于访问内部 RAM或外部数据存储器 。 RAM 或外部数据存储器。 这种寻址方式是由指令指定某一寄存器的内容作为操作数的 地址。 地址。 其中(Ri)=40H (Ri)=40 例如 MOV A,@Ri ;(i=0或1),其中(Ri)=40H 这条指令表示从Ri中找到源操作数所在单元的地址, Ri中找到源操作数所在单元的地址 这条指令表示从Ri中找到源操作数所在单元的地址,把该地 址中的内容传送给A 即把内部RAM 40H单元的内容送到累加器A RAM中 址中的内容传送给A。即把内部RAM中40H单元的内容送到累加器A 中。
【2019年整理】汇编语言程序设计及上机指导第3章指令格式与寻址方式
语 有效地址四分量的使用规则:
言
程 有效地址分量 16位寻址方式
32位寻址方式
64位寻址方式
序 设 基址寄存器 计 及 变址寄存器 上 机 比例因子
指 导 位移量
BX,BP
SI,DI
不用该分量,默 认为1
0,8,16(位)
所有32位通用寄存器
除ESP外的所有32位 通用寄存器
所有32位/64位通用寄存 器(16个)
所有32位/64位通用寄存 器(16个)
1,2,4,8(倍) 1,2,4,8(倍)
0,8,32(位)
0,8,32,64(位)
》 如:ADD AX,20[BX][SI]
;EA=(BX)+(SI)+20
第
MOV EBX,[EAX][4*EDX+2AH] ;EA=(EAX)+(EDX)×4+2AH
3
章6 26 April 2019
(3)寄存器相对寻址
返回
《
汇 EA=[基址/变址寄存器]+位移量
编 语
其中位移量由指令直接给出,是指令的一部分。
言 基址寄存器的使用规则:
程 序 设 计
1)16位寻址时,BP和BX作为基址寄存器,默认情况下,BX 以DS作为段寄存器,BP以SS作为段寄存器;SI(源变址) 和DI(目的变址)作为变址寄存器,默认DS作为段基址寄
;用于64位方式,有效地址为EAX+EDX的和再扩展为64位 MOV RBX,[R10+RBP] ;有效地址为R10+RBP的64位和。
及 BX 2000H
…… 低地址
上 机
SI 3000H
机器 指令
指 和 5000H 导
《汇编语言程序设计》第三章
此寻址方式由于存取操作数直接从CPU内部寄存器中获得, 不需访问存储器,因而指令执行的速度快。
寄存器寻址既可用于源操作数,又可用于目的操作数,应用 频率高。
【例3.2】 MOV DS,AX
ADD CL,AH
汇编语言 淮南师范学院重点课程
3、存储器寻址
存储器寻址方式的操作数都是存放在存储器中,一般是 数据段、附加段、堆栈段中的存储单元。指令中给出的是存 储单元的地址或产生存储单元地址的表达式。在汇编语言源 程序中,存储单元地址是采用逻辑地址的形式表示的,即: 段首址:段内偏移地址。段首址存放在某个段寄存器中,段 内偏移地址是指存放操作数的存储单元与段起始地址(段首 址)之间的距离(字节数),又可称为“有效地址”,记作 EA。有效地址EA是由3个地址分量的某种组合求得,这3个地 址分量是:位移量 、基址 、变址 。
3.2 寻址方式
寻找指令中所需操作数存放地址的方式或程序 转移时寻找转移地址的方式称为寻址方式,因而寻 址方式分为两大类,一类是数据寻址方式,另一类 是转移地址寻址方式。
由于80X86指令涉及四种操作数:立即操作数、 寄存器操作数、存储器操作数和隐含操作数,因此, 数据寻址方式又可对应四种寻址方式,即:立即寻 址、寄存器寻址、存储器寻址和固定寻址。
汇编语言 淮南师范学院重点课程
1、立即寻址
此寻址方式所提供的操作数直接包含在指令中, 它紧跟在指令操作码后面,存放在存储器代码段中。 立即操作数可以是8位,也可以是16位。
汇编格式:n (n是用8位或16位二进制补码表示的有符号数)
【例3.1】 MOV AX,1234H
立即寻址方式用来表示常数,它常用于给寄存器 赋初值。需要强调的是,立即寻址只能用于源操作 数,不能用于目的操作数。
汇编语言第3章 指令系统和寻址方式.ppt
第3章 指令系统和寻址方式
(Instruction system and Addressing mode)
• 指令简介: 操作码 操作数
1.操作码 2.操作数:无操作数,单操作数,双操作 数,三操作数
3.1 寻址方式
(Addressing mode)
• 有效地址(EA):即上章的偏移地址
4.寄存器间接寻址方式(register indirect addressing)
EA=基址(base) 或变址( index) 基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段
(SI) 物理地址=(DS)*16+(BX)
(DI) =(SS)*16+(BP)
例:mov AX,[BX] (DS)=1000H (BX)=1200H
寄存器有:AX,BX,CX,DX,SP,BP,SI,DI AH,AL,BH,BL,CH,CL,DH,DL
用途:单个数据传送
以下五种寻址方式均对内存进行的 物理地址=段首地址x16+EA
EA=基址(base) +变址( index) +偏移量 (displacement)
3.直接寻址方式(Direct addressing)
3.段间直接寻址(intersegment direct addressing)
(IP)新和(CS)址=DS*16+(BX)+(DI)
=DS*16+1200+1000=12200H 若:(12200)=34H,(12201)=12H 则,(AX)=1234H 允许段超越。 例:mov AL,ES:[BX][DI] 用途:处理成组数据(举例说明)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有效地址EA计算方法:
3
2018年9月7日星期五
《 汇 编 16位寻址方式主要是针对于实地址存储模式的应 用,兼容了Intel 8086的工作模式。存储器的 语 最大分段不超过64KB,最大线性地址空间是 言 1MB。 程 序 32位寻址方式主要是用于保护模式下,程序只能 设 存取最低4GB地址空间,使用16位或32位地址。 计 使用 16 位的分段选择子以及 32 位的段内偏移地 及 址,每个段最大可达4GB。 上 机 64位寻址方式采用64位线性地址空间,支持40 指 位物理地址空间。通常不采用分段方式,而是将 导 CS,DS,ES和SS的段基址看成0,这样线性地 》 址等于有效地址,是一种平展存储管理模式。 第 章
15
3052H 3053H
2018年9月7日星期五
34H 12H ……
3
高地址
( 4 )基址加变址寻址 《
汇 编 语 言 程 序 设 计 及 上 机 指 导 》 第 章
16
EA= [基址寄存器]+[变址寄存器] MOV AX,[BX+SI] ;或写成MOV AX,[BX][SI],BX决定默认段基址由DS指出 MOV EAX,[EDX][EBP] ;由EBP决定默认SS为段基址寄存器 MOV R12,[EAX+EDX] ;用于64位方式,有效地址为EAX+EDX的和再扩展为64位 MOV RBX,[R10+RBP] ;有效地址为R10+RBP的64位和。
2018年9月7日星期五
3
《 汇 编 3)64位寻址时,16个32位/64位通用寄存器都能作 语 为基址寄存器。当使用32位通用寄存器时,先将32 言 位通用寄存器内容零扩展为64位,再与经过符号扩 程 展为64位的位移量相加形成64位有效地址。只有 序 MOV指令允许使用64位的位移量,而其他指令只 设 能使用不超过32位的位移量。 计 及 上 MOV RAX,[R15+5];有效地址为R15寄存器内容加5 的和 机 MOV RCX,[EDX+0F0H] 指 导 ;有效地址为EDX寄存器内容零扩展为64位后,再与位移量 0F0H符号扩展成64位(0FFFFFFFFFFFFFFF0H)相加 》 的和 第 章
14
3
2018年9月7日星期五
《 汇 MOV AX,[BX+24] ;也可写成 MOV AX,24[BX] 编 语 MOV ECX,[EBP+50] ;也可写成 MOV ECX,50[EBP] 言 MOV DX,[EAX+BASE] ;也可写成 MOV DX,BASE[EAX] 程 BASE是符号常量或变量 序 MOV ECX,[EBP+50]指令执行时,EBP寄存器内容为3000H,再加上 设 位移量50H之和为3050H,然后把由SS寄存器寻址的段中的3050H 计 单元的32位数据传送给ECX。 及 …… 低地址 上 EBP 00003000H 机器 机 + 50H CX 指令 00003050H 指 ECX 1234H 5678H …… 导 3050H 78H 》 3051H 56H 第 章
3
2018年9月7日星期五
《 汇 编 EA=[基址寄存器]+([变址寄存器]×比例因子)+位移量 语 有效地址四分量的使用规则: 言 16位寻址方式 32位寻址方式 64位寻址方式 程 有效地址分量 序 所有32位/64位通用寄存 BX,BP 所有32位通用寄存器 设 基址寄存器 器(16个) 计 除ESP外的所有32位 所有32位/64位通用寄存 SI,DI 及 变址寄存器 器(16个) 通用寄存器 上 不用该分量,默 1,2,4,8(倍) 1,2,4,8(倍) 机 比例因子 认为1 指 0,8,16(位) 0,8,32(位) 0,8,32,64(位) 导 位移量 》 如:ADD AX,20[BX][SI] ;EA=(BX)+(SI)+20 第 MOV EBX,[EAX][4*EDX+2AH] ;EA=(EAX)+(EDX)×4+2AH 章
12
3
而寄存器间接寻址中有效地址EA来自寄存器,该内容由前面的指 2018年9月7日星期五 令确定,相当于一个变量。
( 3 )寄存器相对寻址 《
汇 编 语 言 程 序 设 计 及 上 机 指 导 》 第 章
13
EA=[基址/变址寄存器]+位移量 其中位移量由指令直接给出,是指令的一部分。 基址寄存器的使用规则: 1)16位寻址时,BP和BX作为基址寄存器,默认情况下,BX 以DS作为段寄存器,BP以SS作为段寄存器;SI(源变址) 和DI(目的变址)作为变址寄存器,默认DS作为段基址寄 存器。位移量是8位或16位。 2)32位寻址时,8个32位通用寄存器都能作为基址或变址寄存 器。其中ESP、EBP默认段寄存器为SS,其余6个寄存器均 默认段寄存器为DS,段可以超越;除ESP外的任何32位通 用寄存器均可作变址寄存器。且EBP以SS为默认段寄存器, 其余以DS为默认段寄存器。位移量是8位或32位,当位移量 超过8位则按照32位处理。
第3章 指令格式与寻址方式
【本章提要】 本章讲述Intel系列微处理器的指令通用格式和各种寻 址方式。除无操作数指令以外,一般指令都需要指出 操作数,指令中操作数的给出(即寻址方式)有多种 方法。通过多种寻址方式,提高了程序设计的灵活性, 也扩充了指令的具体功能。 【学习目标】 • 熟练掌握汇编语言指令和机器指令的基本格式 • 明确操作数的各种寻址方式 • 掌握各种寻址方式物理地址的计算
AH
AL
…… 操作码 20H 10H ……
代码段
3
2018年9月7日星期五
《 汇 编 语 言 程 序 设 计 及 上 机 指 导 》 第 章
9
二、寄存器寻址方式
寄存器寻址方式下,被访问的操作数存放在指令规定 的寄存器中。
INC MOV MOV MOV CL DS,AX ECX,EAX RBX,RAX ;8位寄存器加1 ;16位寄存器传送 ;32位寄存器传送 ;64位寄存器传送
10
三.存储器寻址方式
3
2018年9月7日星期五
2000H 2001H
34H 12H ……
高地址
《 汇 编 语 言 程 序 设 计 及 上 机 指 导 》 第 章
11
(2)寄存器间接寻址
操作数在存储器中,而操作数的有效地址EA却在指定的寄存器中, 即 EA=[寄存器] 1)16位寻址时,EA放在SI、DI、BP或BX中。 若以SI、DI、BX间接寻址,则默认操作数在DS段中。 MOV AX,[SI] ;默认DS为段基址 若以寄存器BP间接寻址,则默认操作数在堆栈段中。 MOV AX,[BP] ;默认SS为段基址 如果操作数不在上述规定的默认段,则必须在指令中相应的操作数前加上 段超越前缀。 MOV CX,DS:[BP] ;DS:是段超越前缀, 表示访问 数据段,而非堆栈段 2)32位寻址时,8个32位通用寄存器均可作寄存器间接寻址。 MOV CH,[EAX] MOV DX,[EBX] 除EBP、ESP默认段寄存器为SS外,其余6个寄存器均默认段寄存器DS, 可以采用段超越前缀对其它段进行寻址。 CS和ES不能被超越,在堆栈操作时,SS也不能被超越。
2
3.1 指令格式
3
2018年9月7日星期五
3.2.2 有效地址的概念 《
汇 编 语 言 程 序 设 计 及 上 机 指 导 》 第 章
5
在80X86系列CPU中,内存单元的地址由两部分组成: 段基地址和段内偏移地址(也称段内偏移量) 1)段基地址一般可由段寄存器直接给出,如CS、DS、SS、 ES等,也可以通过段寄存器的内容进行计算得出。 2)段内偏移量最多可以由四个基本部分,按照一定的规则计 算组合而成,所以也称为有效地址EA。 有效地址四个分量包括: ①基址寄存器内容: 基址、变址寄存器的值通常为某 ②变址寄存器内容: 局部存储区的首地址(比如数组) ③比例因子: ——在32/64位寻址方式中使用 ④位移量: ——一般是一个具体数值
1 2018年9月7日星期五
《 汇 编 机器指令格式: 操作码 操作数 语 指令助记符 操作数列表 ;注释 言 汇编指令格式: 程 序 指令助记符表示指令的名称,它是指令功能的英文缩写,对应的是机 器指令中的操作码部分; 设 计 操作数即被处理的对象,若指令中包含多个操作数,则操作数之间以 逗号分隔; 及 上 注释以分号开始,用来说明程序功能,不影响指令的执行。 机 指 最常用的数据传送指令MOV的格式为: 导 MOV DEST,SRC ;将源操作数SRC的值传送至目的操作数 》 【例】 MOV EAX,EBX ;将EBX的值送给EAX 第 章
2018年9月7日星期五
3
《 汇 编 3)64位寻址时,16个32位/64位通用寄存器均可作寄存器间接寻址使用。 语 MOV CL,[R10] ;操作数是8位的,操作数地址由64位寄存器R10指出 言 MOV RDX,[EBX] ;操作数是64位的,操作数地址由32位寄存器EBX,指 出经零扩展后形成64位有效地址 程 序 MOV AX,[BX] 的执行过程:假设BX寄存器的内容为1000H,则把DS段中的 设 1000H号单元的16位数据传送给AX寄存器,该指令的机器码为8B07H。 …… 低地址 计 8BH 及 07H 上 BX 1000H …… AX 20H 04H 机 1000H 04H 指 1001H 20H 导 …… 高地址 》 第 注意:直接寻址中有效地址EA来自指令自身,相当于一个常量; 章
(6)பைடு நூலகம்例变址寻址
章
17
3
2018年9月7日星期五
《 汇 编 语 言 程 序 设 计 及 上 机 指 导 》 第 章
18
(7)基址加比例变址寻址
EA=[基址寄存器]+[变址寄存器]×比例因子 只适于32/64位寻址的情况