8088指令系统英文全称(对记忆有帮助)[1](1)
- 格式:doc
- 大小:63.00 KB
- 文档页数:8
第四章 8086指令系统只有硬件的计算机称为裸机,它是不能工作的,若要工作,必须要事先编好程序,也称为软件。
计算机是硬件与软件共同组成的不可分割的系统。
程序是由指令组成的。
因此,要理解计算机的工作原理,掌握它的指令系统是必不可少的。
指令是控制计算机去完成某种操作的命令,与计算机的硬件有关,根据设计使某型计算机所具有的指令的集合便是计算机的指令系统,因此不同类型的计算机有不同的指令系统。
指令的表达形式:机器码指令和汇编语言指令。
①用二进制代码表示的指令称为机器码指令或目标代码指令,这种形式的指令能够直接被计算机识别和执行。
8086的指令一般有二到六个字节,较复杂,我们不作介绍。
②因为机器码指令难以记忆和编程,就将指令操作功能的英文缩写作为指令的符号,称为助记符。
用助记符表示的指令便于记忆和编程,但不能被计算机直接识别和执行,必须经过汇编转换为机器码后才能执行,汇编语言指令由此而得名。
汇编语言指令与机器码指令有一、一对应关系,用汇编语言指令进行编程能够充分开发计算机硬件资源,它的程序目标代码短,运行速度快,因此,汇编语言是面向机器的语言,它在自动控制、智能化仪器仪表、监测等领域应用非常广泛。
8086指令系统兼容了8080的全部指令,这部分对8位微处理器的指令是处理字节的,此外8086还有自已所特有的对字或字符串的处理指令,以及对带符号数的运算指令,中断指令和协处理器的指令等。
§4.1 汇编语言指令的格式与寻址方式一、8086汇编语言指令的格式指令格式是指编写指令是的书面表达形式,一条完整的汇编语言指令由四个部分(字段)组成:[标号]:(指令助记符)[操作数] [,操作数] [;注释]各部分间用空格或规定的标点符号隔开,方括号内的字段为可选项,圆括号内的字段为关键字,必选项。
1、标号是给该指令所在地址取的名字,必须后跟“:”,它可以缺省,是可供选择的标识符。
8086汇编语言中的标号按以下规则设定:(1)标识符由字母(a~z,A~Z),数字(0~9)或某些特殊字符(@,—,?)组成;(2)第一字符必须是字母(a~z,A~Z)或某些特殊字符号(@,—,?)但“?”不能单独作标识符;(3)标号有效长度为31个字符,若超过31个字符,则只保留前面的31个字符为有效标识符。
80868088指令系统⽬录名称含义IM (Immediate)⽴即数REG (Register)寄存器操作数MEM (Memory)存储器操作数SEG (Segment)段寄存器(CS、DS、ES、SS)OPR (Operand)操作数OPS (Source Operand)源操作数OPD (Destination Operand)存储器操作数⼀、数据传送指令(⼀)通⽤数据传送指令(MOV、XCHG、PUSH、POP、PUSHA、POPA)1、通⽤数据传送指令:MOV指令格式:MOV OPD,OPS作⽤:将源操作数指定的内容传送到⽬的操作数,即 OPD<=(OPS),当指令执⾏完后,⽬的操作数原有的内容被源操作数内容覆盖,即⽬的操作数和源操作数具有相同内容注意事项:MOV指令可以是字节数据传送也可以是字数据传送,但是源操作数和⽬的操作数的长度必须⼀致⽴即数只能作源操作数,且不能传送给段寄存器段寄存器CS只能作源操作数,段寄存器之间不能直接传送存储单元之间不能直接传送数据MOV指令对标志寄存器的各位⽆影响(1)⽴即数传送到通⽤寄存器或存储单元⽴即数只能作为源操作数,⽴即数不能传送给段寄存器例:MOV AH,10HMOV AX, 2345HMOV M-BYTE, 64HMOV M-WORD,2364H(2)寄存器之间的传送段寄存器CS只能作源操作数,不能作⽬的操作数例:MOV AH,CHMOV DS, AXMOV ES, BXMOV AX,CSMOV CS, AX; 错误:段寄存器CS只能作源操作数,不能作⽬的操作数(3)寄存器与存储单元之间传送例:MOV AL,[SI]MOV [DI],AHMOV AX, 10[BX]MOV TABLE[BP], BXMOV DS, [SI][BX]MOV [BX], [BP][SI]; 错误:存储单元之间不能直接传送数据2、交换指令:XCHG指令格式:XCHG OPD,OPS作⽤:源操作数和⽬的操作数两者内容相互交换,即: (DEST)<=>(SRC)注意事项:数据交换可以在寄存器之间或寄存器与存储器单元之间进⾏数据交换不能在存储单元之间直接进⾏数据交换寄存器只能使⽤通⽤寄存器指令对标志寄存器各位⽆影响(1)寄存器之间数据交换例:XCHG AX,BXXCHG AH,CH例:两个存储单元(DA_BYTE1和DA_BYTE2)之间的数据交换可以使⽤以下三条指令来实现MOV AL,DA-BYTE1; AL <= (DA_BYTE1)XCHG AL,DA-BYTE2 ; (AL)<=>(DA-BYTE2)XCHG AL,DA-BYTE1 ; (AL)<=>(DA-BYTE1)或 MOV DA-BYTE1,AL; (DA_BYTE1)<=(AL)3、堆栈指令(1)进栈指令:PUSH指令格式:PUSH OPS作⽤:将寄存器、段寄存器或存储器中的⼀个字数据压⼊堆栈,堆栈指针减2即:(SP)-1 => SP 、(OPS)15⾄8 => ([SP])(SP)-1 => SP 、(OPS)7⾄0 => ([SP])注意事项:源操作数可以是CPU内部的16位通⽤寄存器、段寄存器和存储器操作数(所有寻址⽅式)进栈操作对象必须是16位数(2)出栈指令:POP指令格式:POP OPD作⽤:将栈顶数据弹出传送⾄某⼀寄存器、段寄存器(CS除外)或存储器,堆栈指针加2即:([SP]) => (OPD)7⾄0、(SP)+1 => SP([SP]) => (OPD)15⾄8、(SP)+1 => SP注意事项:CS段寄存器不可以存放⽬标操作数(3)所有寄存器进栈指令:PUSHA指令格式:PUSHA作⽤:16位通⽤寄存器依次进栈,次序为AX、CX、DX、BX,指令执⾏前的SP、BP、SI、DI。
8086/8088指令系统记忆表1.数据寄存器AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.BH&BL=BX(base):基址寄存器,常用于地址索引;CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.DH&DL=DX(data):数据寄存器,常用于数据传递。
他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。
这2组8位寄存器可以分别寻址,并单独使用。
2.指针寄存器和变址寄存器,包括:SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。
指令指针IP(Instruction Pointer)标志寄存器FR(Flag Register)OF(overflow flag)DF(direction flag)CF(carrier flag)PF(parity flag)AF(auxiliary flag)ZF(zero flag)SF(sign flag)IF(interrupt flag)TF(trap flag)3.段寄存器(Segment Register)为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。
第一部分:指令助记符:一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换2.累加器专用传送指令IN(Input)输入OUT(Output)输出XLAT(Translate)换码3.有效地址送寄存器指令LEA(Load effective address) 有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DSLES(Load ES with Pointer)指针送寄存器和ES4.标志寄存器传送指令LAHF(Load AH with flags)标志送AHSAHF(store AH into flags) AH送标志寄存器 PUSHF(push the flags) 标志进栈POPF(pop the flags) 标志出栈二、算术指令1.加法指令ADD(add)加法ADC(add with carry)带进位加法INC(increment)加12.减法指令SUB(subtract) 减法SBB(subtract with borrow)带借位减法DEC(Decrement)减1NEG(Negate)求补CMP(Compare)比较3.乘法指令MUL(Unsigned Multiple)无符号数乘法IMUL(Signed Multiple) 带符号数乘法4.除法指令DIV(Unsigned divide)无符号数除法IDIV(Signed divide)带符号数除法 CBW(Convert byte to word)字节转换为字 CWD(Contert word to double word)字转换为双字三、逻辑指令1.逻辑运算指令AND(and)逻辑与OR(or)逻辑或NOT(not)逻辑非XOR(exclusive or) 异或TEST(test)测试2.移位指令SHL(shift logical left)逻辑左移SAL(shift arithmetic left)算术左移SHR(shift logical right)逻辑右移SAR(shift arithmetic right)算术右移ROL(Rotate left)循环左移ROR(Rotate right)循环右移RCL(Rotate left through carry)带进位循环左移RCR(Rotate right through carry)带进位循环右移四、串处理指令1.重复前端指令REP(Repeat)重复串操作直到(CX)=0为上 REPE(Repeat when empty)若(CX)=0,则退出,否则CX=CX+1;REPZ(Repeat when flag )若ZF=0,则退出,否则CX=CX+1;REPC(Repeat when carry flag)REPNE(Repeat when not empty)REPNZ(Repeat when not zero flag)REPNC(Repeat when not carry flag)2.串操作指令MOVSB (Move string of byte)串传送指令MOVSW(Move string of word)串传送指令CMPSB(Compare string of byte)串比较指令CMPSW(Compare string of word)串比较指令SCASB(Scan string of byte)串搜索指令SCASW(Scan string of word)串搜索指令STOSB(Store string of byte) 存串指令STOSW(Store string of word)存串指令LODSB(Load string of byte) 取串指令LODSW(Load string of word)取串指令 CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量.DAA(Decimal adjust after addition)组合BCD码的加法调整指令DAS(Decimal adjust after substract)组合BCD码的减法调整指令AAA(ASCII adjust after addition)非压缩BCD码加法调成指令AAS(ASCII adjust after substract)非压缩BCD码减法调成指令AAM(ASCII adjust after multiple)非压缩BCD码乘法调成指令AAD(ASCII adjust after divid)非压缩BCD码除法调成指令五、控制转移指令1.无条件转移指令JMP(jmp)跳转指令2.条件转移指令(1)根据单个条件标志的设置情况转移JZ(或JE)(Jump if zero,or equal)结果为零(或相等)则转移JS(Jump if sign)结果为负则转移JNS(Jump if not sign)结果为正则转移JO(Jump if overflow)溢出则转移JNO(Jump if not overflow)不溢出则转移JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移 JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移JB(或JNAE,JC)(Jump if below,or not above or equal,or carry)低于,或者不高于或等于,或进位位为1则转移JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry)不低于,或者高于或者等于,或进位位为0则转移(2)比较两个无符号数,并根据比较的结果转移JB(或JNAE,JC)JNB(或JAE,JNC)JBE(或JNA)(Jump if below or equal,or not above)低于或等于,或不高于则转移JNBE(或JA)(Jump if not below or equal,or above)不低于或等于,或者高于则转移(3)比较两个带符号数,并根据比较的结果转移JL(或LNGE)(Jump if less,or not greater or equal)小于,或者不大于或者等于则转移JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移JLE(或JNG)(Jump if less or equal,or not greater)小于或等于,或者不大于则转移JNLE(或JG)(Jump if not less or equal,or greater)不小于或等于,或者大于则转移(4)测试CX的值为0则转移指令JCXZ(Jump if CX register is zero) CX寄存器3.循环指令LOOP(loop) 循环指令4.子程序CALL(call)调用指令RET(return)返回指令5.中断INT(interrupt)指令IRET(interrupt return)从中断返回指令INTO(interrupt if overflow)若溢出则中断六、处理机控制指令1.标志处理指令CLC(Clear carry)进位位置0指令CF<-0CMC(Complement carry)进位位求反指令CF<-CF STC(Set carry)进位位置1指令CF<-1CLD(Clear direction) 方向标志置0指令DF<-0 STD(Set direction)方向标志置1指令DF<-1 CLI(Clear interrupt)中断标志置0指令IF<-0 STI(Set interrupt)中断标志置1指令IF<-02.其他处理机控制指令NOP(No Opreation)无操作HLT(Halt)停机WAIT(Wait)等待ESC(Escape)换码LOCK(Lock)封锁第二部分:伪指令1.符号定义伪指令:EQU2.数据定义伪指令:DB(Define Byte):定义字节DW(Define Word):定义字DD(Define Double):定义双字DUP(duplication) :重复;复制,复写3.过程定义伪指令:PROC(Process):4.定位伪指令:ORG(Origin ):5.常数、变量及标号OFFSET(Offset):偏移量6.表达式和运算符:①算术运算符:SHL(shift logical left):逻辑左移SHR(shift logical right):逻辑右移②关系运算符:EQ(Equal):相等NE(Not Equal):不等于LT(Less Than):小于LE(Less Than or Equal):小于等于GT(Greater Than):大于GE(Greater Than or Equal)③取值运算符:SEG(Segment)OFFSET(Offset)④属性运算符:PTR(Pointer):指针。