清华大学 微机原理03.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:60 大小:295KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

清华大学 微机原理03.ppt

清华大学微机原理03.ppt

预览

免费试读已结束,剩余 50 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第三章寻址方式与指令系统3.1概述2.程序符号指令的书写格式为:[标号:]操作码助记符操作数助记符[;注释]标号代表该指令在存储器中的地址,为分支、循环提供转移目标。可选操作码助记符如ADD,MOV等,指出指令要实现的功能操作数是指令操作的对象。当一条指令需要一个以上的操作数时,操作数间用逗号分隔,逗号前为目标操作数,逗号后为源操作数。注释可增强可读性。可选3.2寻址方式1.立即寻址操作数作为立即数直接存在指令中,可为字节、字、双字MOVEAX,12345678H2.寄存器寻址操作数包含在指令规定的8位、16位、32位寄存器中MOVECX,EDX实模式下,X86系列处理器对内存采用分段式管理,程序员在指令中使用的是逻辑地址,逻辑地址由两部分组成——存储单元所在段的基地址:段内偏移地址(偏移量)段的基地址一般由操作系统将程序装入内存时设置,程序员在编程时主要使用段内偏移地址,段内偏移地址也称为有效地址(EA)MOVES:[3000H],ALES:称为段超越前缀(可选),指示处理器访问哪个逻辑段3000H为段内偏移地址(有效地址)段内偏移地址(有效地址)可以由如下四个部分组成(称为偏移地址四元素):基址寄存器内容变址寄存器内容比例因子位移量EA=基址寄存器+变址寄存器比例因子+位移量16位寻址:基址寄存器:BX,BP变址寄存器:SI,DI比例因子:0,1位移量:0,8,16位①直接寻址指令中的操作数部分直接给出操作数的有效地址EA,操作数可以是16位或32位整数,操作数默认在DS段中MOVAX,[3000H]如果操作数在DS以外的其他段(CS,SS,ES,FS,GS)中,指令中必须包含段超越前缀MOVAX,FS:[3000H]②寄存器间接寻址操作数地址的偏移量(有效地址EA)存放在寄存器中16位寻址:偏移地址放在SI,DI,BP,BX中以SI,DI,BX间接寻址,默认操作数在DS段中MOVAX,[SI];访问数据段以BP间接寻址,默认操作数在SS段中MOVAX,[BP];访问堆栈段32位寻址:偏移地址放在8个32位通用寄存器中除ESP,EBP默认段寄存器为SS外,其余均默认段寄存器为DSMOVEAX,[ESP];访问堆栈段低地址③基址寻址EA=基址寄存器+位移量16位寻址:BP,BX为基址寄存器BX,DS为默认段寄存器BP,SS为默认段寄存器32位寻址:8个32位通用寄存器均可作为基址寄存器,除ESP,EBP默认段寄存器为SS外,其余均默认段寄存器为DS低地址数据结构的基址寻址方式④变址寻址变址寻址适用于对一维数组的元素进行操作⑴无比例因子EA=变址寄存器+位移量16位寻址:SI,DI为变址寄存器,DS为默认段寄存器32位寻址:除ESP外其余7个32位通用寄存器均可作为变址寄存器,EBP默认SS为段寄存器,其余均默认段寄存器为DS位移量表示数组起始地址,不变,变址寄存器为数组下标,可变。EA=变址寄存器比例因子+位移量只适用于32位寻址MOVEAX,[ESI*4+50]⑤基址加变址寻址基址加变址寻址主要用于二维数组操作和二重循环⑴无比例因子EA=基址寄存器+变址寄存器+位移量适用于16位和32位寻址MOVAX,[BX+SI+1000]MOVEAX,[EDX+EBP+200]单元(0,0)⑵有比例因子EA=基址寄存器+变址寄存器比例因子+位移量只适用于32位寻址MOVEAX,[EDX*8+EAX]总结:寻址方式既针对源操作数,也针对目标操作数实模式下段的最大长度为64KB,因此必须保证有效地址不超过FFFFH调试程序DEBUG调试程序DEBUG调试程序DEBUG调试程序DEBUG调试程序DEBUG调试程序DEBUG调试程序DEBUG3.3数据传送指令XCHG目标操作数,源操作数交换指令,源、目不能同为内存操作数XCHGAX,[SI+0400H]XLAT表头变量名查表指令,用来取表中某指定数的值TABLEDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HMOVBX,OFFSETTABLEMOVAL,5XLATTABLE2.堆栈操作指令PUSH源操作数进栈指令,先调整堆栈指针,再把源操作数压栈PUSHAXPUSHDWORDPTR[SI+5]POP目标操作数出栈指令,先将栈顶2/4字节送目标操作数,再调整堆栈指针POPAXPOPDWORDPTR[SI+5]PUSHFPOPF16位标志寄存器进栈/出栈指令PUSHFDPOPFD32位标志寄存器进栈/出栈指令PUSHAP