【文档说明】汇编语言21寻址方式课件.pptx,共(31)页,133.995 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44769.html
以下为本文档部分文字说明:
汇编语言21寻址方式课件一、指令的构成说明要执行的是什么操作操作对象,可以有0个、1个或2个目的源指令格式:[标号:]操作码操作数[;注释]指令举例:ADDAX,[SI+6]MOVAX,BX操作码操作数INC[BX]HLT二、8086的操作数分类1、立即数(常数)
取值范围如下表:8位16位无符号数00H-FFH(0-255)0000H-FFFFH(0-65535)带符号数80H-7FH(-128~127)8000H-7FFFH(-32768~32767)2、寄存器操作数放在8个通用寄存器或4个段寄存器中的操作数AXBXCXDXSIDIBPSP只
能存放字操作数既能存放字操作数又能存放字节段寄存器存放当前操作数的段基地址CSDSESSS3、存储器操作数存储器操作数字节字双字124类型存储单元个数注意:一般不允许两个操作数同时为存储器操作数存储器操作数:存放在存储单元中的操作数若
指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。说明:解释:存储器操作数的表示(1)若M表示为一数字表示的某内存单元的地址(物理地址),则有“(M)”表示M单元的内容;间接访问:
若地址为“M”的内存单元中存放的内容“(M)”是某一内存单元的地址“N”,则有:(M)=N;((M))=(N);用于文字叙述中使用(2)在指令中表示存储器操作数时,用”[]”表示某内存单元的偏移地址。三、段缺省和段超越8086/
8088CUP的存储管理采用分段式,因此在程序中要表示一个内存地址必须说明其段地址和段内偏移地址。1、段缺省仅给出偏移地址,没说明段寄存器使用哪一个,则采用默认段寄存器。2、段超越在特殊情况下,可以不使用默认的寄存器。一、寻址方式的概念二、寻址
方式3.28086的寻址方式寻址方式——规定汇编指令中用什么样的表示方式说明实际操作数据在哪里。或实际操作数据所存放的位置如何得到。一、寻址方式的概念在8086指令系统中,说明操作数所在地址的寻址方式可分为
3大种(7小种):二、寻址方式的种类立即数寻址方式寄存器寻址方式寄存器间接寻址寄存器相对寻址存储器寻址方式基址变址寻址直接寻址基址变址相对寻址MOV指令和ADD指令1、使用MOV指令的格式:MOV操作数1,操作数2功能:将操作数2内容传送到操作数1例:MOVAX,BX将寄存器B
X中内容传送到寄存器AX中2、使用ADD指令的格式:ADD操作数1,操作数2功能:将操作数1与操作数2之和,赋给操作数1例:ADDAX,BX将将寄存器AX中内容与寄存器BX中相加,所得之和放在AX中直接把参与操作的数据写在指令中,是指令的一部分,该数据称为立即数。操作数可以是各种数制下的数
值(相当于8位或16位二进制数),也可以是带单引号的字符。强调:立即寻址只能用于源操作数例如:MOVAX,4576H;AX4576H,执行后,1、立即寻址MOVAX,4576H指令的存储形式AXOP76H45H76
45BXAX2233H2233H对于指令:MOVAX,BX;AXBX指令执行前:BX=2233HAX=1003H指令执行后:BX=2233HAX=2233H说明:寄存器寻址是执行速度最快的寻址方式2、寄存器寻址操作数放在某个寄存器中,注意源操作数
与目的操作数字长要相同(匹配),例如:MOVAX,BXMOV[3F00H],AXMOVCL,AL错误例:MOVAX,BL;字长不同程序运行时用到的数据决大部分存放在内存中,如何寻找内存中的数据就是存储器寻址方式。共5种。存储器寻址方式直接
寻址:在指令中直接给出操作数所在单元的偏移地址。(1)MOVAX,[2050H];AX←[DS×16+2050H]偏移地址通常以变量的形式出现,在指令中就直接写变量的名字,如ADDR、VAR(2)MOVSI,ADDR;ADDR为一变量默认的段寄存器为DS,但也
可以显式地指定其他段寄存器。称为段超越前缀MOVDX,ES:[2050H];使用段超越;DX←[ES×16+2050H]段超越指令格式区别MOVAX,2050H3、直接寻址指令操作例:MOVAX,[3102H]如果(DS)=2000H,(23102H)=CDH,(23103H)=ABH则操
作数的物理地址为:20000H+3102H=23102H指令执行后:AX=0ABCDHMOV操作码02H31HAHAL23102HCDHABH存储器代码段数据段..4、寄存器间接寻址操作数的偏移地址放在寄存器中只有SI、
DI、BX和BP可作间址寄存器MOVAX,[BX];AX←[DS×16+BX]MOVAL,[BX];AL←[DS×16+BX]MOVAX,[SI];SI←[DS×16+SI]MOVAX,[DI];AX←[DS×16+DI]MOVAX
,[BP];AX←[SS×16+BP]MOVAX,ES:[BX];AX←[ES×16+BX]MOVAX,DS:[BP];AX←[DS×16+BP]EA=(BX)(BP)(SI)(DI)字操作字节操作段寄存器使用SS段超越指令操作例
:MOVAX,[SI]若DS=6000H,SI=1200H,(61200H)=44H,(61201H)=33H则指令执行后,AX=3344H。44H33H60001200DSSI600006120061200HAX存储器数据段+)120044H33H5、寄存器相对寻址E
A=间址寄存器的内容加上一个8/16位的位移量EA=(BX)(BP)(SI)(DI)+8位16位位移量例:MOVAX,[BX+8]或MOVAX,8[BX]MOVCX,TABLE[SI]指令操作例:MOVAX,DATA[BX]若DS=6000H,BX=1000H,DATA=2A
00H,(63A00H)=66H,(63A01H)=55H则物理地址=60000H+1000H+2A00H=63A00H指令执行后:AX=5566H(见下页图示)操作码00偏移量低2A偏移量高DS6000BX1000+DATA2A0063A0063A00HAHALAX代码段数据段...
......66H55HMOVAX,DATA[BX]6、基址+变址寻址由基址寄存器(BX或BP)给出——基址寻址方式由变址寄存器(SI或DI)给出——变址寻址方式EA=(BX)(BP)+(SI)(DI)注意:①允许段超越。②[BX+BP]或[SI+
DI]是非法搭配由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址+变址寻址。例:MOVAX,[BX][SI]MOVAX,[BX+SI]MOVAX,DS:[BP][DI]错误例:×MOVAX,[BX][BP]×MOVAX,[DI][SI]83000操作
码DS8000BX2000+SI100083000HAHALAX代码段数据段.........2356指令操作例:MOVAX,[BX][SI]假定:DS=8000H,BX=2000H,SI=1000H则物理地址
=80000H+2000H+1000H=83000H指令执行后:AL=[83000H]=23AH=[83001H]=567、相对的基址+变址寻址在基址+变址寻址的基础上再增加一个8位或16位偏移量,三者之和为偏移地址注意事项同基址+变址寻址EA=(BX)(B
P)+(SI)(DI)+8位16位位移量例:MOVAX,BASE[SI][BX]MOVAX,[BX+BASE][SI]MOVAX,[BX+SI+BASE]MOVAX,[BX]BASE[SI]MOVAX,[BX+SI]BASE指令操作例:MOVAX,DAT
A[DI][BX]若DS=8000H,BX=2000H,DI=1000H,DATA=200H则指令执行后AH=[83201H],AL=[83200H]8320083200HAHALAX+DATA0200操作码代码段数据段........
.YYXXDS8000BX2000DI1000小结指令由()和()构成如何取得操作数——称为()操作码操作数寻址说明:①在直接寻址中,地址可以用符号代替,如“MOVAX,WORD_ADDR”,相当于“MOVAX,[xxxxH]”,“WORD_AD
DR”称为变量或符号地址,后面介绍。②偏移量可以是变量或符号数,也在后面介绍。③如果一条指令有两个操作数,源操作数和目的操作数的寻址方式可能相同,也可能不同,如指令“MOVAX,[BX]”,源操作数为寄存器间接寻址,目的操作数为寄存器寻址。立即寻址MOVAX,常数直接寻址MOV
AX,[常数];或MOVAX,变量名或标号寄存器寻址MOVAX,通用寄存器寄存器间接寻址MOVAX,[(BX,BP,SI,DI)中的一个]寄存器相对寻址MOVAX,[(BX,BP,SI,DI)中的一个+偏移量]基址变址寻址MOVAX,[基址寄存器+
变址寄存器]相对基址变址寻址MOVAX,[基址寄存器+变址寄存器+偏移量]寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:寻址方式指令操作数形式寄存器间接——只有一个寄存器(BX/BP/SI/DI之一)寄存器相对——一个寄存器加上位移量基址+变址——两个不同类别的寄存器
相对基址+变址——两个不同类别的寄存器加上位移量指出下列指令中源操作数的寻址方式。①MOVDX,[1234H]②MOVDX,1234H③MOVDX,BX④MOVDX,[BX]⑤MOVDX,[BX+1234H]⑥MOVDX,[BX+DI]⑦MOVDX,[BX+DI+1234H]作业