《微机原理与借口技术3章寻址方式和指令系统》由会员分享,可在线阅读,更多相关《微机原理与借口技术3章寻址方式和指令系统(76页珍藏版)》请在金锄头文库上搜索。
1、3.1 寻址方式,3.1.1 立即数寻址 立即数,操作数直接包含在指令中,作为指令的一部分存放在代码段中 立即数可以是8位或16位的,在80386以上的CPU中,还可以是32位的 例3-1立即数寻址 MOV AX,2004H ;(AH)=20H,(AL)=04H MOV BL, 5AH ;(BL)=5AH MOV EAX,22334455H ;(EAX)=22334455H, (AX)=4455H 立即数常用于给寄存器赋初值,只能作源操作数,不能作目的操作数,3.1.2 寄存器寻址 操作数存放在指令指定的8位、16位或32位通用寄存器中。对于16位的操作数,寄存器可以是AX、BX、CX、DX、
2、SI、DI、SP和BP等 例3-2 寄存器寻址 MOV AX,BX ; 将BX中的内容送入AX中, BX中的内容保持不变 MOV SI,DI ;将DI中的内容送入SI中, DI中的内容保持不变 MOV EAX,EBX ;将EBX中的内容送入EAX中 为避免指令执行时间过长,双操作数指令一般必须有一个操作数使用寄存器寻址。 寄存器寻址常用来存放运算对象、中间结果、运算结果、计数值等。,3.1.3 直接寻址 直接寻址指的是操作数在存储器中的有效地址EA直接包含在指令中,书写时有效地址加上中括号 例3-3 存储器直接寻址 MOV AX,1000H ;将DS段的1000H和1001H两个 单元的内容送
3、入AX寄存器中 MOV EAX,ES:2000H ;将ES段的2000H2003H四个 单元的内容送入EAX寄存中,其中ES为段超越前缀 MOV AX,BUF ;将DS段内以有效地址BUF (符号地址)起始的两个单元的内容送入AX寄存器中 直接寻址可以方便地访问存储器中某一数据存储单元,被访问的存储单元一般由变量或含变量的地址表达式给出地址,3.1.4 寄存器间接寻址 操作数的有效地址EA存放在基址寄存器BX、BP,或变址寄存器SI、DI中 如果指定的寄存器是BX、SI、DI,则操作数默认在数据段中;如果使用BP,默认在堆栈段中 允许段超越。 书写时对间接寻址的寄存器加上中括号。 操作数的物理
4、地址为: (DS)16(SI/DI/BX)或(SS)16(BP),例3-4 寄存器间接寻址,假定(DS)2000H,(SI)=3600H,(23600H)=6022H MOV AX,SI ;先将DS中的值左移4位,然后与SI中的值相加, 形成物理地址是23600H,再将该物理地址中的 数据6022H送入AX寄存器中 例3-5 寄存器间接寻址,假定(SS)=3000H,(BP)=1100H,(31100H)=5E28H MOV BX,BP ;先将SS中的值左移4位,然后与BP中的值相加, 形成物理地址31100H,再将该物理地址中的 数据5E28H送入BX寄存器中 例3-6 偏移量为32位时的寄
5、存器间接寻址 MOV EAX,ECX ;从数据段的DS:ECX地址处开始取四个 存储单元的内容送入EAX寄存器中 MOV EAX,DX ;从DS:DX地址处开始取四个存储单元 的内容送入EAX中,3.1.5 寄存器相对寻址 操作数的有效地址是一个基址寄存器或变址寄存器中存放的数据加上指令中给出的8位或16位偏移量 其物理地址为: (DS)16(SI/DI/BX)8位或16位偏移量 或 (SS)16(BP)8位或16 位偏移量 实际上就是在寄存器间接寻址的基础上,再加上一个偏移量 例3-7寄存器相对寻址,假定(DS)=2000H,(SS)=3000H,(SI)=3600H,(BP)=1100H,
6、COUNT=10H,(23620H)=8A76H,(31110H)=4567H MOV AX ,SI+20H ;2000H16+3600H+20H=23620H, 将从23620H开始的物理地址中的 数据8A76H送入AX寄存器中 MOV BX ,BP+COUNT ;3000H161100H+10H=31110H, 将从31110H开始的物理地址中的 数据4567H送入BX寄存器中,指令MOV BX,BP+COUNT书写有下面的等效形式: MOV BX,BP+COUNT MOV BX,COUNTBP 3.1.6 基址变址寻址 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和 段寄存器
7、一般由基址寄存器决定,使用BX默认段寄存器DS;使用BP,默认段寄存器SS 允许段超越 其物理地址为: (DS)16(BX)(SI/DI) 或(SS)16+(BP)+(SI/DI) 例3-8基址变址寻址,假定(DS)=2000H,(SS)3000H,(BX)=1800H,(BP)=2080H ,(DI)=1000H,(SI)=0800H, (22800H)=80CFH,(32880H)=067AH MOV AX,BXDI ;(AX) ((DS)16(BX)+(DI)) 将从22800H开始的物理地址的两个存储单元 之中的数据80CFH送到AX寄存器中 MOV AX,BP+SI ;(AX)(SS
8、)16(BP)+(SI) 将(32880H)中的数据067AH送入AX中,3.1.7 基址变址相对寻址 操作数的有效地址是一个基址寄存器内容和一个变址寄存器的内容和8位或16位偏移量相加之和 其物理地址为: (DS)16(BX)+(SI/DI)+8位或16位偏移量 或 (SS)16(BP)+(SI/DI)+8位或16位偏移量 例3-9基址变址相对寻址 MOV AX, BX+SI+100H MOV 20H BP+SI, AX MOV CX,DS:BX+SI+NUM MOV DX,SS: NUMDIBP 例3-10 32位偏移量的寄存器比例寻址 MOV EAX,DAT EBX+ESI MOV EA
9、X,NUM EBP+EDI,3.1.8 寄存器比例寻址 形成存储器操作数的有效地址可以采用: (1)变址寄存器的内容乘以比例因子,再加上偏移量,称为比例变址方式 (2)变址寄存器的内容乘以比例因子,再加上基址寄存器的内容,称为基址比例变址方式 (3)变址寄存器的内容乘以比例因子,再加上基址寄存器的内容和偏移量,称为基址比例变址偏移方式 比例因子可以是1、2、4、8,默认情况为1 例3-11 寄存器比例寻址 MOV EAX,XEDI*4 ;EA=(EDI)*4+X, 其中X是8位或32位偏移量 MOV EBX,EDI*8EBX ;EA=(EDI)*8+(EBX) MOV EAX,XESI*4EB
10、P ;EA=(ESI)*4+(EBP)+X, 其中X是8位或32位偏移量,3.2 8086指令系统,表3-1 8086 CPU常用指令一览表,3.2.1 数据传送指令 数据传送指令用于寄存器、存储单元和输入输出端口之间传送数据或地址。除SAHF和POPF外,对标志无影响 1通用数据传送指令 (1)基本的传送指令 格式:MOV DEST , SRC 功能:将源操作数的内容传送到目的操作数中 例3-12 基本的传送指令 MOV AL,30H ;立即数传送到寄存器 MOV AL, BL ;寄存器之间传送字节数据 MOV SI, BX+62H ;寄存器和存储器之间传送数据,例3-13下列指令是不合法的
11、。 MOV 6234H,AX ;立即数不能用于目的操作数 MOV CS,AX ;CS不能用于目的操作数 MOV IP,AX ;IP不能用于目的操作数 MOV DS,4234H ;立即数不能直接传送给段寄存器 MOV AL,BX ;源操作数与目的操作数的位数必须一致 MOV BUF1,BUF2 ;不能在两个存储器单元之间传送数据 MOV DS,ES ;不能在两个段寄存器之间传送数据,(2)交换指令 格式:XCHG DEST,SRC 功能:将源操作数与目的操作数的内容交换(Exchange) 例3-14 交换指令 XCHG AL,CL ;字节交换 XCHG BX,SI ;字交换 XCHG AX,B
12、X+SI ;寄存器和存储器之间交换数据,例3-15 下列指令是非法的 XCHG AX,6234H ;寄存器与立即数之间不能交换 XCHG BUF1,BUF2 ;存储器单元与存储器单元之间不能交换 XCHG ADDR,4234H ;存储器单元与立即数之间不能交换 XCHG CS,DATBX ;不能与CS(或IP)寄存器进行交换,(3)堆栈操作指令 堆栈是按“先进后出”原则工作的一段存储器区域 格式:PUSH SRC POP DEST 功能:PUSH指令的执行是先将SP (SP)-2,然后将16位源操作数压入堆栈,SRC可以是寄存器或存储器 : POP指令的执行是先从栈顶弹出16位操作数到目的操作
13、数中,同时SP (SP)+2,DEST可以是寄存器(CS除外)或存储器,例3-16 将16位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至CX中,已知:(SS)=0200H,(SP)=0008H,(CX)=12FAH,其示意图见图3-1和图3-2。,(4)换码指令 格式:XLAT 功能:这是一条专门用于AL和字节表中某一存储单元之间执行数据传送的指令。执行(AL) BX+AL的操作,使AL中的一个值变换为内存表格中的某一个值,实现编码的转换。 例3-17 在内存的数据段中存放有一张数值09的ASCII码转换表,首地址为Hex_table,如图3-3所示。现要把数值8转换成对应的ASCII码,可
14、用以下几条指令实现: LEA BX,Hex_table ;(BX)表首偏移地址 MOV AL, 8 ; (AL)8 XLAT ;查表转换 注意:由于要查找元素的序号放在AL中,所以表格的最大长度不能超过256个字节,2地址传送指令 (1)有效地址传送指令 格式:LEA DEST,SRC 功能:这是一条取有效地址的指令(Load effective address)。它用来将源操作数的偏移地址传送到通用寄存器、指针或变址寄存器中,例3-18 有效地址传送指令 MOV BX,3200H ;将3200H单元的内容送BX LEA BX,3200H ;将有效地址3200H送BX LEA SI,ADDR
15、;将ADDR的有效地址送SI (2)地址指针传送指令 格式:LDS DEST,SRC LES DEST,SRC 功能:将源操作数指定的连续4个存储器单元中存放的32位地址指针(包括一个段地址和一个偏移地址)传送到两个16位寄存器 例3-19 地址指针传送指令 POINT DD 55663344H ;设定POINT的段地址和偏移地址 LDS BX,POINT ;(BX)=3344H,(DS)=5566H LES BX,POINT ;(BX)=3344H,(ES)=5566H 地址传送指令的寄存器不能使用段寄存器, 且操作数必须使用存储器寻址方式。,3标志传送指令 (1)标志读写指令 格式:LAHF/SAHF 功能:LAHF用于将标志寄存器的低8位送AH,即将标志寄存器FLAGS中的SF(符号标志)、ZF(零标志)、AF(半加进位标志)、PF(奇偶标志)和CF(进位标志)5个标志位分别传送到累加器AH的对应位,(2)标志入栈出栈指令 格式: