交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但段寄存器和立即数不能作为一个操作数,不能在累加器之间进行。 例如: XCHG AL,CL
XCHG AX,DI XCHG BX,SI XCHG AX,BUFFER XCHG DATA[SI],DH
4.累加器专用传送指令
有三种,输入、输出和查表指令。前两种又称为输入输出指令。 ⑴ IN 指令
一般格式:IN AL,n ; B AL←[n]
IN AX,n ; W AX←[n+1][n] IN AL,DX ; B AL←[DX] IN AX,DX ; W AX←[DX+1][DX]
功能:从I/O端口输入数据至AL或AX。
输入指令允许把一个字节或一个字由一个输入端口传送到AL或AX中。若端口地址超过255时,则必须用DX保存端口地址,这样用DX作端口寻址最多可寻找64K个端口。 ⑵ OUT 指令
一般格式:OUT n,AL ; B AL→[n] OUT n,AX ; W AX→[n+1][n]
OUT DX,AL ; B AL→[DX] OUT DX,AX ; W AX→[DX+1][DX]
功能:将AL或AX的内容输出至I/O端口。
该指令将AL或AX中的内容传送到一个输出端口。端口寻址方式与IN指令相同。 ⑶ XLAT指令
一般格式:XLAT ; AL=(DX)×16+(BX)+(AL)) 功能:完成一个字节的查表转换。
要求:①寄存器AL的内容作为一个256字节的表的下标。②表的基地址在BX中,③转换后的结果存放在AL中. TABLE: 9
例如:MOV BX,OFFSET TABLE
MOV AL,8 ……
IN AL,1 第9个字符 AAH XLAT ;查表
OUT 1,AL ;(AL)= AAH 表长度256 本指令可用在数制转换、函数表查表、代码转换等场合。
5.地址传送指令(有三条地址传送指令) ⑴ LEA (Load Effective Address) 一般格式: LEA OPRD1,OPRD2
功能:把源操作数OPRD2的地址偏移量传送至目的操作数OPRD1。
要求:①源操作数必须是一个内存操作数,②目的操作数必须是一个16位的通
用寄存器。这条指令通常用来建立串操作指令所须的寄存器指针。 例:LEA BX,BUFR;把变量BUFR的地址偏移量部分送到BX
⑵ LDS (Load pointer into DS) 一般格式: LDS OPRD1,OPRD2
功能:完成一个地址指针的传送。地址指针包括段地址部分和偏移量部分。指令将段地址送入DS,偏移量部分送入一个16位的指针寄存器或变址寄存器。
要求:源操作数是一个内存操作数,目的操作数是一个通用寄存器/变址寄存器。
例如:LDS SI,[BX] ;将把BX所指的32位
地址指针的段地址部分送入DS,偏移量部分送入SI。图2-9 LDS指令示意
如图2-9所示。
⑶ LES (Load pointer into ES) 一般格式: LES OPRD1,OPRD2
这条指令除将地址指针的段地址部分送入ES外,与LDS类似。例如: LES DI,[BX+COUNT]
6.标志寄存器传送(有四条标志传送指令)
10
⑴ LAHF (LOAD AH WITH FLAG)
将标志寄存器中的SF、ZF、AF、PF和CF(即低8位)传送至AH寄存器的指定位,空位没有定义。 ⑵ SAHF (STORE
AH WITH FLAG)
将寄存器AH的指定位,送至标志寄存器的SF、ZF、AF、PF和CF位(即低8位)。根据AH的内容,影响上述标志位,对OF、DF和IF无影响。 ⑶ PUSHF (PUSH FLAG)
将标志寄存器压入堆栈顶部,同时修改堆栈指针,不影响标志位。 ⑷ POPF (POP FLAG)
堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。
二、算术运算指令
8086/8088提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。 带符号数用补码表示。同时
8086/8088也提供了各种校正操作,故可以进行十进制算术运算。
参与加、减运算的操作数可如上图所示。 1.加法指令 (Addition)
⑴一般形式:ADD OPRD1,OPRD2
功能:OPRD1←OPRD1+OPRD2
完成两个操作数相加,结果送至目的操作数OPRD1。目的操作数可以是累加器,任一通用寄存器以及存储器操作数。 例如:
ADD AL,30;累加器与立即数相加
ADD BX,[3000H];通用寄存器与存储单元内容相加 ADD DI,CX;通用寄存器之间
ADD DX,DATA[BX+SI];通用寄存器与存储单元内容相加 ADD BETA[SI],DX;存储器操作数与寄存器相加
11
这些指令对标志位CF、DF、PF、SF、ZF和AF有影响。 ⑵一般形式:ADC OPRD1,OPRD2;带进位的加法
功能:OPRD1←OPRD1+OPRD2 +CF
这条指令与上—条指令类似,只是在两个操作数相加时,要把进位标志CF的现行值加上去,结果送至目的操作数。
ADC指令主要用于多字节运算中。若有两个四字节的数,已分别放在自FIRST和SECOND开始的存储区中,每个数占四个存储单元。存放时,最低字节在地址最低处,则可用以下程序段实现相加。
MOV AX,FIRST
ADD AX,SECOND;进行字运算 MOV THIRD,AX MOV AX,FIRST+2 ADC AX,SECOND+2 MOV THIRD+2,AX
这条指令对标志位的影响与ADD相同。 ⑶一般形式:INC OPRD ;
功能:OPRD←OPRD+1
完成对指定的操作数OPRD加1,然后返回此操作数。此指令主要用于在循环程序中修改地址指针和循环次数等。
这条指令执行的结果影响标志位AF、OF、PF、SF和ZF,而对进位标志没有影响。
如:INC AL
INC [BX]
2.减法指令(Subtraction)
⑴一般形式:SUB OPRD1,OPRD2 ;
功能:OPRD1←OPRD1-OPRD2
完成两个操作数相减,也即从OPRD1中减去OPRD2,结果放在OPRD1中。
例如: SUB CX,BX
SUB
[BP],CL
⑵一般形式:SBB OPRD1,OPRD2 ;
功能:OPRD1←OPRD1-OPRD2-CF
12
相关推荐: