第3章指令系统与寻址方式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.3 实例三 寻找操作数
3.3.1 寻址方式的选择
常用的寻址方式有7种之多,其中立即 寻址和寄存器寻址无论从指令长度和 指令执行时间都比存储器寻址要好, 但是也要根据具体情况选用。 学会使用寻址方式是理解指令作用的 关键,也是掌握程序设计技巧的一种 途径。
例:编写一段显示字符串STRING的程序
* 不允许使用AX、CX、DX 存放 EA: MOV AX, [CX] * SRC 和 DST 的字长一致
MOV DL, [ BX ] ; [BX]指示一个字节单元 MOV DX, [ BX ] ; [BX]指示一个字单元 *适于数组、字符串、表格的处理
四个间址寄存器:BX,BP ,SI ,DI
返回
练 习 : 已 知 (DS)=1500H,(SS)=2500H, (ES)=4350H,(BX)=4080H,(BP)=7567H, (SI)=9578,(DI)=8456H,COUNT=2345H, TOP=6930H, 求 下 列 指 令 操 作 数 的 物 理 地 址 。
MOV TOP[BX][SI],AX MOV AH,ES:[BX] MOV [SI+BP],CX;=>ss:[ si+bp ] MOV DX, COUNT [DI]
BP作为基址的寻址
SS
串操作的源操作数
DS
串操作的目的操作数
ES
可跨越的 段寄存器

偏移地址
IP

SP
CS ES SS 有效地址EA
CS DS ES
BP
CS ES SS
SI

DI
练习: 已知(DS)=1500H,(SS)=2500H, (ES)=4350H, TABLE=4780H,VALUE=7567H,(BX)=4080H
例4 VALUE EQU 1000H MOV AX,DS:[VALUE] MOV AX,ES:[VALUE]
若已知(DS)=1500H ,(ES)=3600H,
E A=VALUE=1000H,
则指令源操作数的物理地址计算为:
第1条指令物理地址=16000H
第2条指令物理地址=(ES)×10H+EA
=36000H+1000H = 37000H
* SRC 和 DST 的字长一致
MOV AH, BX
* CS 不能用 MOV 指令改变 MOV CS, AX 返回
3.直接寻址方式
— 有效地址EA由指令直接给出
例:MOV AX, [ 2000H ] EA=2000H, 假设(DS)=3000H, 则PA=32000H
隐含的段为数据段 DS 可使用段跨越前缀 MOV AX, ES: [2000H] 操作数地址可由变量(符号地址)表示,
( 5 ) DOS 显示字符串功能
mov dx, offset string
mov ah, 9 int 21h
; string的偏址 dx ; lea dx, string
; 显示一串字符
补充:80x86 新增的寻址方式(了解 )
EA= (基址寄存器) + (变址寄存器) 比例因子 + 位移量
5.寄存器相对寻址方式
指令格式: MOV AX, COUNT[SI] 或 MOV AX, [COUNT+SI]
(BX)
(BP)
有效地址 =
+
(SI)
8位 位移量 16位
(DI)
(BX)
操作数的物理地址=(DS)×10H+ ( SI )+ 8位(16位)位移量
(DI )
操作数的物理地址=(SS)×10H+( BP ) + 8位(16位)位移量
第三章 指令系统与寻址方式
设问:
1.汇编指令的特点是什么? 2.汇编指令中有寄存器、存储器吗? 3.指令中的操作数在哪儿存放? 4. 为什么要有寻址方式?
本章重点
汇编语言指令格式 指令的寻址方式 存储器寻址
3.1 汇编语言指令
3.1.1 机器指令
机器指令也称作代码指令。它是计算机能识 别的一组二进制代码。
MOV 40H, AL
➢源操作数 和目的操作数( DST )的字长一致
MOV AH, 3064H
➢段寄存器不能作为目的操作数
MOV DS,1000H
例: MOV AX,3060H
2.寄存器寻址方式
— 操作数在指定的寄存器中
MOV AX, BX
MOV AL, BH
MOV AX, 3064H
* 字节寄存器只有 AH AL BH BL CH CL DH DL
操作码字段 操作数字段
例1 单操作数指令(一地址指令)
INC AX ;加1指令。 INC BL ;加1指令。 PUSH AX ;进栈指令。 JMP LA1 ;无条件转移指令。
例2 双操作数指令(两地址指令) MOV AX,5 ;传送指令。 ADD AX,BX ;加法指令。
目的操作数(SRC) 源操作数(DRC)
机器指令可以用二进制表示也可以用十六进 制表示,指令的长度也可以不一样。如前两 条指令的长度为2字节,第三条指令的长度 为3字节。 用汇编指令实现将7加3的结果存入5号字节 单元:
MOV AL,7 ADD AL,3 MOV [5],AL
3.1.2 汇编指令
1、指令格式 汇编指令由操作码字段和操作数字段构成。
; 显示字符‘H’ ; 显示字符‘A’
( 2 ) 寄存器间接寻址
Next :
mov mov mov mov int inc
cx, count bx, offset string dl, [bx] ah, 2 21h bx
loop next
; mov cx, 17 ; string的偏பைடு நூலகம் bx
; 显示一个字符 ; 循环指令
返回
7.相对基址变址寻址方式
操作数的物理地址 =(DS)×10H+(BX) + ( SI ) + 8位(16位)位移量 =(DS)×10H+(BX) + ( DI ) + 8位(16位)位移量 =(SS)×10H+(BP) + ( SI ) + 8位(16位)位移量 =(SS)×10H+(BP) + ( DI ) + 8位(16位)位移量
3.2指令的寻址方式
3.2.1寻址方式
寻址方式: 指令中提供操作数或操作数地址的方式。 有效地址: EA(Effective Address): 操作数的偏移地址。 操作数的物理地址=段地址×10H+EA 寻址方式的分类:
与数据有关的寻址方式 与转移地址有关的寻址方式
3.2.2 立即寻址方式 3.2.3 寄存器寻址方式 3.2.4 存储器寻址方式
(TABLE,VALUE为符号地址)
求下列指令操作数的物理地址。
MOV AX,105
MOV AL,BH MOV AX,DS:[1250] MOV AX,TABLE MOV AX,[BX] MOV CX,[VALUE]
MOV DS:[3A47H], AH
MOV DL,ES:[TABLE] MOV [VALUE],BH MOV AX,SS:[BX] MOV AX,3040H MOV AX,CX
( 3 ) 寄存器相对寻址
Next :
mov cx, count mov si, 0 mov dl, string[si] mov ah, 2 int 21h inc si loop next
; mov cx, 17 ; mov dl, [string+si] ; 显示一个字符 ; 循环指令
( 4 ) 基址变址寻址
Next :
mov mov mov mov mov int inc loop
cx, count bx, offset string si, 0 dl, [bx] [si] ah, 2 21h si next
; mov cx, 17 ; string的偏址 bx
; mov dl, [bx+si]
; 显示一个字符 ; 循环指令
返回
6.基址变址寻址方式
指令格式:
MOV AX, [BX+SI];或MOV AX, [BX][SI]; MOV AX, [BX+DI];MOV AX, ES:[BX] [SI] MOV AX, [BP+SI] MOV AX, [BP+DI]
有效地址 =
(BX) +
(SI)
(BP) (DI)
* 适于数组、字符串、表格处理:数组首址=>BX 下标=>SI
直接寻址方式 寄存器间接寻址方式 寄存器相对寻址方式 基址变址寻址方式 相对基址变址寻址方式
例 例
例1 例2
1.立即寻址方式
—— 操作数在指令中给出 指令格式: MOV AL, 5
MOV AX, 3064H MOV AL, ‘A’ MOV BX,0A46DH ADD CH,23
➢只能用于 源操作数(SRC)字段
(2)指令的执行时间——指令的执行时间 (以CPU时钟周期为单位)也是一个重要的 属性。它会影响程序的执行速度,因此采用 较少执行时间的指令可提高程序的运行速度。
3.1.3 指令系统
1.指令系统 计算机所能执行的各种代码指令的集合。 2.指令的分类
8086的指令共分为六大类。分别是:
➢ 数据传送指令 mov ax,bx ➢ 算术运算指令 sub cx,10 ➢ 逻辑运算指令 and ax,0 ➢ 字符串处理指令 movsb ➢ 控制与转移指令 jz lab1 ➢ 处理机控制指令 hlt
VALUE DB 10 ;注意变量的属性 MOV AH, VALUE MOV AX, VALUE MOV AX, WORD PTR VALUE
(1)存储器读操作 例1:MOV AX,[2000H]
返回
(2)存储器写操作
例2 MOV [4000H],AX
返回
(3)符号地址 类似高级语言的变量
指令格式: MOV AX,MASK[BX][SI]
或 MOV AX,[MASK+BX+SI]
或 MOV AX,[BX+SI].MASK
有效地址:EA=MASK+(BX)+(SI)
物理地址= (DS)+EA
返回
段寄存器的使用规定
默认的 访问存储器的方式 段寄存器
取指令
CS
堆栈操作
SS
一般数据访问
DS
例3 VALUE DW 2301h MOV AX,VALUE MOV AX,[VALUE]
设VALUE=1000H
有效地址:EA=VALUE=1000H
设(DS)=1500H
物理地址=(DS)×10H+EA
=15000H+1000H=16000H
执行指令后:(AX) =2301H
返回
(4)段超越(跨段)
例3 三操作数指令(三地址指令) IMUL EBX,[ESI],7 ;乘法指令。 (80386机器指令)
例4 无操作数指令(零地址指令) CBW ;字节扩展指令 CLC ;进位标志CF清零 NOP ;不操作指令 HLT ;停机指令
2.指令属性
(1)指令长度——根据指令的功能不同, 指令的长度也不一样(以字节为单位)。 分为单字节指令、双字节、三字节、四字 节和多字节指令等。
DATA STRING COUNT DATA
SEGMENT DB ‘ HAPPY NEW YEAR! ’, 0DH , 0AH , ‘ $ ’ DW 17 ENDS
( 1 ) 直接寻址
mov dl, string mov ah, 2 int 21h
mov mov int : :
dl, string+1 ah, 2 21h
若(37000H) = 9091H
返回
执行第二条指令后:(AX) = 9091H
4.寄存器间接寻址方式
—EA 在基址寄存器(BX/BP) 或变址寄存器(SI/DI)
例: MOV AX,[BX] (BX)
操作数的物理地址=(DS)×10H+ ( SI ) (DI )
操作数的物理地址=(SS)×10H+ ( BP )
* 必须是一个基址寄存器和一个变址寄存器的组合
返回
MOV AX, [BX] [BP] ; MOV AX, [SI] [DI]
例1 MOV AX,[BX+DI] 执行前:(DS)=2100H, (BX)=0158H
(DI)=10A5H, (AX)=0FFFFH (221FD)=34H,(221FE)=12H 有效地址: EA=(BX)+(DI)= 0158+10A5 =11FDH 物理地址 =21000+11FD =221FDH 执行后:(AX)=1234H
例1 用机器指令实现将7加3的结果存入5号字节单元 共需要三条机器指令实现:
把数7送到AL中 1011 0000 0000 0111B (B007H )
把数3与AL内容相加,结果放在AL中 0000 0100 0000 0011B (0403H)
把AL中的内容送到地址为5的存储单元中 1010 0010 0000 0101 0000 0000B (A20500H)
相关文档
最新文档