第三章操作数的寻址方式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(4)基址变址寻址: lea bx,num mov si,4 mov dx,[bx][si]
P33 1、2、3、5、6(单数)、
立即数寻址(imm)
操作数出现在指令中,是指令的一个组成部分。这 样的操作数叫做立即数.以这种指定操作数的方式 就叫做立即数寻址。 执行过程
例:
mov ah, 80h add ax, 1234h mov b1, 12h mov w1, 3456h add d1, 32123456h
其中:b1、w1和d1分别是字节、字和双字内存变量。
图示
1、直接寻址
例:指令:mov bx,es:[1234h],(es)=1000h, (11234h)=1234h。问该指令执行后,bx的值是什 么?
PA=(es)×16+1234h=11234h (bx)=1234h
1、直接寻址
要点:
地址也常用内存变量名来表示,书写格式:v_1或 [v_1]。
存储器寻址(mem)
指令所要的操作数存放在内存中,在指令中给出存 储器的地址来指定操作数的方法称为存储器寻址方 式。 段地址 默认的段寄存器ds或ss。如果使用段超越前缀,那 么,段地址可存放在其它段寄存器。 EA 形成方式:分为5种 物理地址=段地址×16+有效地址(EA)
1、直接寻址
指令所要的操作数存放在内存中,在指令中直接给 出该操作数的有效地址,这种寻址方式为直接寻址 方式。 执行过程 物理地址=(段寄存器)×16+有效地址,其中段地址 在默认的ds,如果使用段超越前缀,那么,段地址 可在其它段寄存器。
(8)[bx][si] (9)x
;x是变量名
(10) num[bx]
ቤተ መጻሕፍቲ ባይዱ
;num是数组名
综合
例2 判断下列操作数的寻址方式是否正确,若错误 说明错误原因。 (1)[cx] (2)[bx+bp] (3)ah (4)[bl+44h] (5)[dx+100] (6)si[100] (7)[si+di+100]
概述
寻址方式:在指令中,指定操作数或操作数的存放 位置的方法称为寻址方式。
操作数出现在指令中——立即数寻址 操作数保存在寄存器中——寄存器寻址 操作数保存在内存——存储器寻址 操作数保存在i/o端口——i/o寻址 (见第八章)
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
情况下,有下列规定:
若有效地址用si、di 和bx等之一来指定,则 其缺省的段寄存器为ds;
若有效地址用bp来指 定,则其缺省的段寄存 器为ss(即:堆栈段)。
4、基址变址寻址
例:mov ax,[bx+si] ;
(ax)←(ds×16+(bx)+(si))
mov ax,[bp+di] ;
(ax)←((ss)×16+(bp)+(di))
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
寄存器寻址(reg)
指令所要的操作数已存储在某寄存器中,或把目标 操作数存入寄存器。把在指令中指出所使用寄存器 (寄存器符号)的寻址方式称为寄存器寻址方式。
执行过程
指令中可以引用的寄存器及其符号如下: 8位寄存器有:ah、al、bh、bl、ch、cl、 dh和dl。 16位寄存器有:ax、bx、cx、dx、si、di、 sp、bp、ip和段寄存器。
操作数在存储器中,其有效地址是一个基址寄存 器(bx、bp)或变址寄存器(si、di)的内容和指令 中的8位/16位偏移量之和。
在不使用段超越前缀的情 况下,有下列规定:
若有效地址用si、di和bx 等之一来指定,则其缺省 的段寄存器为ds;
若有效地址用bp来指定, 则其缺省的段寄存器为 ss(即:堆栈段)。
立即数寻址(imm)
要点: 目的操作数不能使用立即数寻址。 例:mov 1234h,ax 立即数可以是8、16位数。在双操作数指令, 两个操作数的位数、数据类型必须相同。 例:mov al,1234h mov al,bx mov bx,al mov ax,70h mov ax,-70h
第二节 操作数的寻址方式
2、寄存器间接寻址
在不使用段超越前缀的情况下,有下列规定: 若有效地址用si、di和bx等之一来指定,则其缺省的段寄存 器为ds; 若有效地址用bp来指定,则其缺省的段寄存器为ss(即:堆 栈段)。
例:mov ax,[bx] ;(ax)←((ds)×16+(bx)) mov ax,[bp] ;(ax)←((ss)×16+(bp)) mov ax, es:[bp] ;(ax)←((es)×16+(bp))
2、寄存器间接寻址
例:假设有指令:mov ax, [bx],在执行时, (ds)=3000h,(bx)=2000h,存储单元32000h的内容是 1234h。问执行指令后,ax的值是什么?
PA=(ds)*16+(bx)=3000h*16+2000h=32000h (bx)=1234h
图示
3、寄存器相对寻址
EA=(bx)+1000h=1000h+1000h=2000h PA=(ds)*16+EA=3000h*16+2000h=32000h。 (ax)=1234h
图示
4、基址变址寻址
操作数在存储器中,其有效地址是一个基址寄存
器(bx、bp)和一个变址寄存器(si、di)的内容之
和。
在不使用段超越前缀的
EA=(bx)+(si)+1000h=700h+300h+1000h=2000h PA=(ds)*16+EA=1000h*16+2000h=32000h (ax)=1234h
图示
5、基址变址相对寻址
注意: 相对基址加变址寻址方式有多种等价的书写方式, 书写格式:
[bx+si+1000h] 1000h[bx+si] 1000h[bx][si] 1000h[si][bx] 但格式:bx[1000h+si]、si[1000h+bx]等是错误的, 即所用寄存器不能在”[ ]”之外,该限制对寄存 器相对寻址方式的书写也同样起作用。
总结
一、立即数寻址 二、寄存器寻址 三、存储器寻址
不涉及寄存器:直接寻址
涉及一个寄存器:寄存器间接寻 址和寄存器相对寻址
涉及两个寄存器:基址变址寻址 和基址变址相对寻址
综合
例1 指出下列操作数的寻址方式。
(1)[bx]
(2)si
(3)[bp+si+100]
(4)[23] (5) 23[di]
(6)100 (7)es:[bx]
第三章 操作数的寻址方式
第一节 汇编指令格式
汇编指令的格式: 指令助记符[操作数1[,操作数2]][;注释] 根据操作数的个数分,有以下三种格式:
1、双操作数指令 指令助记符 目的操作数(dst),源操作数(src) 运算之后,结果保存在目的操作数。
例:mov ax,1234h mov bx,5678h add ax,bx
如mov ax,varw
mov ax,[varw]
与立即数寻址的区别
在指令中,直接寻址给出操作数的EA,立 即数寻址给出操作数。
用数字书写时,格式不一样。
mov ax,1234h
mov ax,[1234]
2、寄存器间接寻址
操作数在存储器中,操作数的有效地址用si、di、 bx和bp等四个寄存器之一来指定,称这种寻址方式 为寄存器间接寻址方式。
1、直接寻址
例:假设有指令:mov ax, [2000h],在执行时, (ds)=3000h,内存单元32000h的值为1234h。问该 指令执行后,ax的值是什么?指令变为:mov al, [2000h], al的值是什么?
PA=(ds)×16+2000h=32000h (ax)=1234h (al)=34h
图示
5、基址变址相对寻址
操作数在存储器中,其有效地址是一个基址寄存 器(bx、bp)的值、一个变址寄存器(si、di)的值 和指令中的8位/16位偏移量之和。
在不使用段超越前缀的情况下,有下列规定: 若有效地址用si、di和bx等之一来指定,则其缺省 的段寄存器为ds; 若有效地址用bp来指定,则其缺省的段寄存器为 ss(即:堆栈段)。
综合
例4:如图所示,取第三个字数 据→(dx) 解:取第3个数据,其偏移量: num+3 (1)直接寻址: mov dx,num+4 ;num为字变量 (2)寄存器间接寻址: lea bx,num+4 mov dx,[bx]
综合
(3)寄存器相对寻址: mov si,4 mov dx,num[si]
综合
例3、已知(DS)=2000H,(BX)=100H,(SI)=2,存储 单元[21200H]~[21203H]依次存放(十六进制)2A、 4C、B7、65,说明下列每条指令执行完后AX寄存器 的内容。 (1)mov ax , [1200h] (2)mov ax , [bx+1101h] (3)mov ax , [bx][si+1100h]
mov ax,ds:[bp+di] ;
(ax)←((ds)×16+(bp)+(di))
4、基址变址寻址
例:mov ax, [bx+si],在执行时,(ds)=3000h, (bx)=1500h,(si)=500h,内存单元32000的内容为 1234h。问指令执行后,ax的值是什么?
EA=(bx)+(si)=1500h+500h=2000h PA=(ds)*16+EA=3000h*16+2000h=32000h (ax)=1234h
第一节 汇编指令格式
2、单操作数指令
指令助记符 操作数
只有把数据先送入隐含的寄存器中、才能执行此操
作的指令。
例:mul cx
;(ax) ×(cx)→(dx,ax)
3、无操作数指令 指令助记符
例:clc ;0→cf stc ;1→cf
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
5、基址变址相对寻址
例:mov ax,[bx+si+06h]
;(ax)←((ds)×16+(bx)+(si)+06h)
mov ax,[bp+si+06h]
;(ax)←((ss)×16+(bx)+(si)+06h)
图示
5、基址变址相对寻址
例: 假设指令:mov ax, [bx+si+1000h],在执行 时,(ds)=3000h,(bx)= 700h,(si)=300h,内存 单元32000h的内容为1234h。问指令执行后,ax的 值是什么?
3、寄存器相对寻址
例:mov al,[bx+1000h]
;(al)←((ds)×16+(bx)+(1000h))
mov ax,es:[bp+06h]
;(ax)←((es)×16+(bp)+(06h))
3、寄存器相对寻址
例:假设指令:mov ax, [bx+1000h],在执行它时, (ds)=3000h,(bx)=1000h,内存单元32000h的内容 为1234h,问该指令执行后,bx的值是什么?
寄存器寻址(reg)
例:
add varw,ax add varb,bh
;其中varw,varb是字、字节内存变量。
add bh,78h
add ax,1234h
mov ax,bx
mov bh,al
要点:在双操作数指令,源操作数和目的操作数都 可以使用寄存器寻址。
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
P33 1、2、3、5、6(单数)、
立即数寻址(imm)
操作数出现在指令中,是指令的一个组成部分。这 样的操作数叫做立即数.以这种指定操作数的方式 就叫做立即数寻址。 执行过程
例:
mov ah, 80h add ax, 1234h mov b1, 12h mov w1, 3456h add d1, 32123456h
其中:b1、w1和d1分别是字节、字和双字内存变量。
图示
1、直接寻址
例:指令:mov bx,es:[1234h],(es)=1000h, (11234h)=1234h。问该指令执行后,bx的值是什 么?
PA=(es)×16+1234h=11234h (bx)=1234h
1、直接寻址
要点:
地址也常用内存变量名来表示,书写格式:v_1或 [v_1]。
存储器寻址(mem)
指令所要的操作数存放在内存中,在指令中给出存 储器的地址来指定操作数的方法称为存储器寻址方 式。 段地址 默认的段寄存器ds或ss。如果使用段超越前缀,那 么,段地址可存放在其它段寄存器。 EA 形成方式:分为5种 物理地址=段地址×16+有效地址(EA)
1、直接寻址
指令所要的操作数存放在内存中,在指令中直接给 出该操作数的有效地址,这种寻址方式为直接寻址 方式。 执行过程 物理地址=(段寄存器)×16+有效地址,其中段地址 在默认的ds,如果使用段超越前缀,那么,段地址 可在其它段寄存器。
(8)[bx][si] (9)x
;x是变量名
(10) num[bx]
ቤተ መጻሕፍቲ ባይዱ
;num是数组名
综合
例2 判断下列操作数的寻址方式是否正确,若错误 说明错误原因。 (1)[cx] (2)[bx+bp] (3)ah (4)[bl+44h] (5)[dx+100] (6)si[100] (7)[si+di+100]
概述
寻址方式:在指令中,指定操作数或操作数的存放 位置的方法称为寻址方式。
操作数出现在指令中——立即数寻址 操作数保存在寄存器中——寄存器寻址 操作数保存在内存——存储器寻址 操作数保存在i/o端口——i/o寻址 (见第八章)
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
情况下,有下列规定:
若有效地址用si、di 和bx等之一来指定,则 其缺省的段寄存器为ds;
若有效地址用bp来指 定,则其缺省的段寄存 器为ss(即:堆栈段)。
4、基址变址寻址
例:mov ax,[bx+si] ;
(ax)←(ds×16+(bx)+(si))
mov ax,[bp+di] ;
(ax)←((ss)×16+(bp)+(di))
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
寄存器寻址(reg)
指令所要的操作数已存储在某寄存器中,或把目标 操作数存入寄存器。把在指令中指出所使用寄存器 (寄存器符号)的寻址方式称为寄存器寻址方式。
执行过程
指令中可以引用的寄存器及其符号如下: 8位寄存器有:ah、al、bh、bl、ch、cl、 dh和dl。 16位寄存器有:ax、bx、cx、dx、si、di、 sp、bp、ip和段寄存器。
操作数在存储器中,其有效地址是一个基址寄存 器(bx、bp)或变址寄存器(si、di)的内容和指令 中的8位/16位偏移量之和。
在不使用段超越前缀的情 况下,有下列规定:
若有效地址用si、di和bx 等之一来指定,则其缺省 的段寄存器为ds;
若有效地址用bp来指定, 则其缺省的段寄存器为 ss(即:堆栈段)。
立即数寻址(imm)
要点: 目的操作数不能使用立即数寻址。 例:mov 1234h,ax 立即数可以是8、16位数。在双操作数指令, 两个操作数的位数、数据类型必须相同。 例:mov al,1234h mov al,bx mov bx,al mov ax,70h mov ax,-70h
第二节 操作数的寻址方式
2、寄存器间接寻址
在不使用段超越前缀的情况下,有下列规定: 若有效地址用si、di和bx等之一来指定,则其缺省的段寄存 器为ds; 若有效地址用bp来指定,则其缺省的段寄存器为ss(即:堆 栈段)。
例:mov ax,[bx] ;(ax)←((ds)×16+(bx)) mov ax,[bp] ;(ax)←((ss)×16+(bp)) mov ax, es:[bp] ;(ax)←((es)×16+(bp))
2、寄存器间接寻址
例:假设有指令:mov ax, [bx],在执行时, (ds)=3000h,(bx)=2000h,存储单元32000h的内容是 1234h。问执行指令后,ax的值是什么?
PA=(ds)*16+(bx)=3000h*16+2000h=32000h (bx)=1234h
图示
3、寄存器相对寻址
EA=(bx)+1000h=1000h+1000h=2000h PA=(ds)*16+EA=3000h*16+2000h=32000h。 (ax)=1234h
图示
4、基址变址寻址
操作数在存储器中,其有效地址是一个基址寄存
器(bx、bp)和一个变址寄存器(si、di)的内容之
和。
在不使用段超越前缀的
EA=(bx)+(si)+1000h=700h+300h+1000h=2000h PA=(ds)*16+EA=1000h*16+2000h=32000h (ax)=1234h
图示
5、基址变址相对寻址
注意: 相对基址加变址寻址方式有多种等价的书写方式, 书写格式:
[bx+si+1000h] 1000h[bx+si] 1000h[bx][si] 1000h[si][bx] 但格式:bx[1000h+si]、si[1000h+bx]等是错误的, 即所用寄存器不能在”[ ]”之外,该限制对寄存 器相对寻址方式的书写也同样起作用。
总结
一、立即数寻址 二、寄存器寻址 三、存储器寻址
不涉及寄存器:直接寻址
涉及一个寄存器:寄存器间接寻 址和寄存器相对寻址
涉及两个寄存器:基址变址寻址 和基址变址相对寻址
综合
例1 指出下列操作数的寻址方式。
(1)[bx]
(2)si
(3)[bp+si+100]
(4)[23] (5) 23[di]
(6)100 (7)es:[bx]
第三章 操作数的寻址方式
第一节 汇编指令格式
汇编指令的格式: 指令助记符[操作数1[,操作数2]][;注释] 根据操作数的个数分,有以下三种格式:
1、双操作数指令 指令助记符 目的操作数(dst),源操作数(src) 运算之后,结果保存在目的操作数。
例:mov ax,1234h mov bx,5678h add ax,bx
如mov ax,varw
mov ax,[varw]
与立即数寻址的区别
在指令中,直接寻址给出操作数的EA,立 即数寻址给出操作数。
用数字书写时,格式不一样。
mov ax,1234h
mov ax,[1234]
2、寄存器间接寻址
操作数在存储器中,操作数的有效地址用si、di、 bx和bp等四个寄存器之一来指定,称这种寻址方式 为寄存器间接寻址方式。
1、直接寻址
例:假设有指令:mov ax, [2000h],在执行时, (ds)=3000h,内存单元32000h的值为1234h。问该 指令执行后,ax的值是什么?指令变为:mov al, [2000h], al的值是什么?
PA=(ds)×16+2000h=32000h (ax)=1234h (al)=34h
图示
5、基址变址相对寻址
操作数在存储器中,其有效地址是一个基址寄存 器(bx、bp)的值、一个变址寄存器(si、di)的值 和指令中的8位/16位偏移量之和。
在不使用段超越前缀的情况下,有下列规定: 若有效地址用si、di和bx等之一来指定,则其缺省 的段寄存器为ds; 若有效地址用bp来指定,则其缺省的段寄存器为 ss(即:堆栈段)。
综合
例4:如图所示,取第三个字数 据→(dx) 解:取第3个数据,其偏移量: num+3 (1)直接寻址: mov dx,num+4 ;num为字变量 (2)寄存器间接寻址: lea bx,num+4 mov dx,[bx]
综合
(3)寄存器相对寻址: mov si,4 mov dx,num[si]
综合
例3、已知(DS)=2000H,(BX)=100H,(SI)=2,存储 单元[21200H]~[21203H]依次存放(十六进制)2A、 4C、B7、65,说明下列每条指令执行完后AX寄存器 的内容。 (1)mov ax , [1200h] (2)mov ax , [bx+1101h] (3)mov ax , [bx][si+1100h]
mov ax,ds:[bp+di] ;
(ax)←((ds)×16+(bp)+(di))
4、基址变址寻址
例:mov ax, [bx+si],在执行时,(ds)=3000h, (bx)=1500h,(si)=500h,内存单元32000的内容为 1234h。问指令执行后,ax的值是什么?
EA=(bx)+(si)=1500h+500h=2000h PA=(ds)*16+EA=3000h*16+2000h=32000h (ax)=1234h
第一节 汇编指令格式
2、单操作数指令
指令助记符 操作数
只有把数据先送入隐含的寄存器中、才能执行此操
作的指令。
例:mul cx
;(ax) ×(cx)→(dx,ax)
3、无操作数指令 指令助记符
例:clc ;0→cf stc ;1→cf
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
5、基址变址相对寻址
例:mov ax,[bx+si+06h]
;(ax)←((ds)×16+(bx)+(si)+06h)
mov ax,[bp+si+06h]
;(ax)←((ss)×16+(bx)+(si)+06h)
图示
5、基址变址相对寻址
例: 假设指令:mov ax, [bx+si+1000h],在执行 时,(ds)=3000h,(bx)= 700h,(si)=300h,内存 单元32000h的内容为1234h。问指令执行后,ax的 值是什么?
3、寄存器相对寻址
例:mov al,[bx+1000h]
;(al)←((ds)×16+(bx)+(1000h))
mov ax,es:[bp+06h]
;(ax)←((es)×16+(bp)+(06h))
3、寄存器相对寻址
例:假设指令:mov ax, [bx+1000h],在执行它时, (ds)=3000h,(bx)=1000h,内存单元32000h的内容 为1234h,问该指令执行后,bx的值是什么?
寄存器寻址(reg)
例:
add varw,ax add varb,bh
;其中varw,varb是字、字节内存变量。
add bh,78h
add ax,1234h
mov ax,bx
mov bh,al
要点:在双操作数指令,源操作数和目的操作数都 可以使用寄存器寻址。
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)