资源描述:
《指令系统(寻址方式)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章8086/8088CPU指令系统movax,12hcalldisplayJmp1234h1主要内容:本章的重点是理解8086常用指令的功能本章的难点是8086的各种寻址方式同学们一定要采用调试程序DEBUG进行实践2调试程序DEBUGDEBUG是常用的汇编语言调试工具,为汇编语言程序员提供了分析指令、跟踪程序的有效手段。常用命令:-A汇编-U反汇编-T单步执行-G断点执行-D数据显示-R寄存器3指令的基本构成操作码[操作数],[操作数]说明要执行的是什么操作操作对象,可以有0个、1个或2个目的源4指令举例:ADDAX,[SI+6]MOVAX,BX操作码操作数INC
2、[BX]HLT5寻址方式指令系统设计了多种操作数的来源,寻找操作数的过程就是操作数的寻址方式。操作数采取哪一种寻址方式,会影响机器运行的速度和效率。如何寻址一个操作数对程序的设计来讲也很重要。在8086指令系统中,操作数所在地址的寻址方式可分为4大类:①立即寻址②寄存器寻址③存储器寻址④I/O寻址6操作数(为一常数)直接由指令给出(此操作数称为立即数)立即寻址只能用于源操作数,常用来给寄存器或存储单元赋初值。例:MOVAX,1C8FHMOVBYTEPTR[2A00H],8FH错误例:×MOV2A00H,AX;错误!1.立即寻址7立即数操作码低8位高8位存储器MOV操作码
3、02H31HAHAL代码段代码段立即寻址指令在存储器中的存放形式AX指令操作例:MOVAX,3102H;AX3102H执行后,(AH)=31H,(AL)=02H用途:直接给出操作数据,立即数存放在内存的代码段中82.寄存器寻址操作数放在某个寄存器中源操作数与目的操作数字长要相同寄存器寻址与段地址无关例:MOVAX,BXMOV[3F00H],AXMOVCL,AL错误例:×MOVAX,BL;字长不同×MOVES:AX,DX;寄存器与段无关9AXSI2233H2233H指令操作例:MOVSI,AX;SI(AX)指令执行前:(AX)=2233H指令执行后:(AX)=2233H,
4、(SI)=2233H103.存储器寻址3.1直接寻址指令中直接给出存储器操作数的16位偏移地址。存储器偏移地址也称为有效地址(EA,EffectiveAddress)存储器默认的段寄存器为DS,但也可以显式地指定其他段寄存器——称为段超越前缀存储器偏移地址也可用符号地址来表示,如ADDR、VAR例:MOVAX,[2A00H];段头隐含为DSMOVDX,ES:[2A00H];段超越MOVSI,TABLE_PTR;段头隐含为DS11例:MOVAX,[3102H];AL(3102H),AH(3103H)如果(DS)=2000H,(23102H)=CDH,(23103H)=AB
5、H则操作数的物理地址为:20000H+3102H=23102H指令执行后:(AX)=0ABCDHMOV操作码02H31HAHAL23102HCDHABH存储器代码段数据段..23103H123.2寄存器间接寻址操作数的偏移地址(有效地址EA)放在寄存器中只有SI、DI、BX和BP可作间址寄存器例:MOVAX,[BX]MOVCL,CS:[DI]错误例:×MOVAX,[DX]×MOVCL,[AX]EA=(BX)(BP)(SI)(DI)13指令操作例:MOVAX,[SI]若(DS)=6000H,(SI)=1200H,(61200H)=44H,(61201H)=33H则指令执行
6、后,(AX)=3344H。44H33H60001200DSSI600006120061200HAX存储器数据段+)120044H33H143.3寄存器相对寻址EA=间址寄存器的内容+8/16位的位移量EA=(BX)(BP)(SI)(DI)+8位16位位移量15例:MOVAX,[BX+8]MOVCX,TABLE[SI]MOVAX,[BP+1000H];默认段寄存器为SS指令操作例:MOVAX,DATA[BX]若(DS)=6000H,(BX)=1000H,DATA=2A00H,(63A00H)=66H,(63A01H)=55H则物理地址=60000H+1000H+2A00H
7、=63A00H指令执行后:(AX)=5566H(见下页图示)16操作码00偏移量低2A偏移量高DS60000BX1000+DATA2A0063A0063A00HAHALAX代码段数据段.........66H55HMOVAX,DATA[BX]173.4基址变址寻址若操作数的偏移地址:由基址寄存器(BX或BP)给出——基址寻址方式由变址寄存器(SI或DI)给出——变址寻址方式由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址变址寻址。EA=(BX)(BP)+(SI)(DI)同一组内的寄存器不能同时出现。基址寄存