当前位置:文档之家› 第三章操作数的寻址方式课堂

第三章操作数的寻址方式课堂

例:mov ax,[bx]
;(ax)←((ds)×16+(bx))
mov ax,[bp]
;(ax)←((ss)×16+(bp))
mov ax, es:[bp]
;(ax)←((es)×16+(bp))
19
2、寄存器间接寻址 例:假设有指令: mov ax, [bx],在执行时,
(ds)=3000h ,(bx)=2000h ,存储单元 32000h的内容是 1234h。问执行指令后, ax的值是什么?
第三章 操作数的寻址方式
1
第一节 汇编指令格式
汇编指令的格式:
指令助记符[操作数1 [,操作数2 ]][;注释]
根据操作数的个数分,有以下三种格式 :
1、双操作数指令 指令助记符 目的操作数( dst),源操作数( src) 运算之后,结果保存在目的操作数。
例:mov ax,1234h mov bx,5678h add ax,bx
4
概述
寻址方式:在指令中,指定操作数或操作数的存放 位置的方法称为寻址方式。
?操作数出现在指令中 ——立即数寻址 ?操作数保存在寄存器中 ——寄存器寻址 ?操作数保存在内存 ——存储器寻址 ?操作数保存在 i/o端口——i/o寻址 (见第八章)
5
第二节 操作数的寻址方式
一、概述 二、立即数寻址( imm) 三、寄存器寻址( reg) 四、存储器寻址( mem)
13
1、直接寻址
指令所要的操作数存放在内存中,在指令中直接给 出该操作数的有效地址,这种寻址方式为 直接寻址 方式。 执行过程 物理地址 =(段寄存器 )×16+有效地址,其中段地址 在默认的 ds,如果使用段超越前缀,那么,段地址 可在其它段寄存器。
14
1、直接寻址
例:假设有指令: movax,[2000h]
7
立即数寻址(imm)
要点: ? 目的操作数不能使用立即数寻址。 例:mov 1234h,ax ? 立即数可以是 8、16位数。在双操作数指令, 两个操作数的位数、数据类型必须相同。 例:mov al,1234h mov al,bx mov bx,al mov ax,70h mov ax ,-70h
6
立即数寻址(imm)
操作数出现在指令中 ,是指令的一个组成部分。这 样的操作数叫做立即数 .以这种指定操作数的方式 就叫做立即数寻址 。 执行过程
例:
mov ah, 80h add ax, 1234h mov b1, 12h mov w1, 3456h add d1, 32123456h
其中:b1、w1和d1分别是字节、字和双字内存变量。
mov ax,1234h
mov ax,[1234]
17
2、寄存器间接寻址
操作数在存储器中,操作数的有效地址用 si、di、 bx和bp等四个寄存器之一来指定,称这种寻址方式 为寄存器间接寻址方式。
18
2、寄存器间接寻址
在不使用段超越前缀的情况下,有下列规定: ?若有效地址用si、di和bx等之一来指定,则其缺省的段寄存 器为ds; ?若有效地址用bp来指定,则其缺省的段寄存器为ss(即:堆 栈段)。
2
第一节 汇编指令格式
2、单操作数指令
指令助记符 操作数
只有把数据先送入隐含的寄存器中、才能执行此操
作的指令。
例:mul cx
;(ax) ×(cx)→(dx,ax)
3、无操作数指令 指令助记符
例:clc ;0→cf stc ;1→cf
3
第二节 操作数的寻址方式
一、概述 二、立即数寻址( imm) 三、寄存器寻址( reg) 四、存储器寻址( mem)
一、概述 二、立即数寻址( imm) 三、寄存器寻址( reg) 四、存储器寻址( mem)
12
存储器寻址(mem)
指令所要的操作数存放在内存中,在指令中给出存 储器的地址来指定操作数的方法称为 存储器寻址方 式。 ?段地址 默认的段寄存器 ds或ss。如果使用段超越前缀,那 么,段地址可存放在其它段寄存器。 ?EA 形成方式:分为 5种 ?物理地址=段地址× 16+有效地址( EA)
8
第二节 操作数的寻址方式
一、概述 二、立即数寻址( imm) 三、寄存器寻址( reg) 四、存储器寻址( mem)
9
寄存器寻址( 操作数存入寄存器。把在指令中指出所使用寄存器 (寄存器符号 )的寻址方式称为寄存器寻址方式。
执行过程
指令中可以引用的寄存器及其符号如下: ? 8位寄存器有: ah、al、bh、bl、ch、cl、 dh和dl。 ? 16位寄存器有: ax、bx、cx、dx、si、di、 sp、bp、ip和段寄存器。
,在执行时,
(ds)=3000h ,内存单元 32000h 的值为1234h。问该
指令执行后, ax的值是什么?指令变为: mov al,
[2000h], al
的值是什么?
PA=(ds)×16+2000h=32000h (ax)=1234h (al)=34h
图示
15
1、直接寻址
例:指令: mov bx,es :[1234h] ,(es)=1000h , (11234h)=1234h 。问该指令执行后, bx的值是什 么?
PA=(es)×16+1234h=11234h (bx)=1234h
16
1、直接寻址
要点:
?地址也常用内存变量名来表示,书写格式: v_1或
[v_1]。
如mov ax,varw
mov ax,[varw]
?与立即数寻址的区别
? 在指令中,直接寻址给出操作数的 EA,立 即数寻址给出操作数。
? 用数字书写时,格式不一样。
10
寄存器寻址(reg)
例:
add varw,ax add varb,bh
;其中 varw ,varb 是字、字节内存变量。
add bh,78h
add ax,1234h
mov ax,bx
mov bh,al
要点:在双操作数指令,源操作数和目的操作数都 可以使用寄存器寻址。
11
第二节 操作数的寻址方式
PA=(ds)*16+(bx)=3000h*16+2000h=32000h (bx)=1234h
图示
20
3、寄存器相对寻址
操作数在存储器中,其有效地址是一个基址寄存 器(bx、bp)或变址寄存器 (si、di)的内容和指令 中的8位/16位偏移量之和。
相关主题