⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8086.txt

📁 8086的一些基本指令
💻 TXT
📖 第 1 页 / 共 2 页
字号:
2)字节操作:
   (SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1
   当方向标志DF=0时用+,当方向标志DF=1时用-
3)字操作:
   (SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2
   当方向标志DF=0时用+,当方向标志DF=1时用-
该指令不影响条件码.
.CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;
.STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量.
.STOS  存入串指令
格式:   STOS  DST
        STOSB(字节)
        STOSW(字)
执行的操作:
   字节操作:((DI))<-(AL),(DI)<-(DI)+-1 
   字操作:  ((DI))<-(AX),(DI)<-(DI)+-2
该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中.
.LODS  从串取指令
格式:    LODS  SRC
         LODSB
         LODSW
执行的操作:
   字节操作:(AL)<-((SI)),(SI)<-(SI)+-1
    字操作: (AX)<-((SI)),(SI)<-(SI)+-2
该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.
    一般说来,该指令不和REP联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.
   
2.与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令
.REPE/REPZ  当相等/为零时重复串操作
格式:     REPE(或REPZ)    String Primitive
其中String Primitive可为CMPS或SCAS指令.
执行的操作:
1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行
2)(CX)<-(CX)-1
3)执行其后的串指令
4)重复1)~3)
.REPNE/REPNZ  当不相等/不为零时重复串操作
格式:     REPNE(或REPNZ)   String Primitive
其中String Primitive可为CMPS或SCAS指令
执行的操作:
    除退出条件(CX=0)或ZF=1外,其他操作与REPE完全相同.
.CMPS  串比较指令
格式:     CMP   SRC,DST
          CMPSB
          CMPSW
执行的操作:
1)((SI))-((DI))
2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1
  字操作:  (SI)<-(SI)+-2,(DI)<-(DI)+-2 
指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同.
.SCAS  串扫描指令
格式:   SCAS   DST
        SCASB
        SCASW
执行的操作:
    字节操作:(AL)-((DI)),(DI)<-(DI)+-1
    字操作:  (AL)-((DI)),(DI)<-(DI)+-2
该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS的规定相同. 

五、控制转移指令
  1.无条件转移指令
.JMP(jmp)  跳转指令
1)段内直接短转移
格式:JMP  SHORT OPR
执行的操作:(IP)<-(IP)+8位位移量
2)段内直接近转移
格式:JMP  NEAR PTR OPR
执行的操作:(IP)<-(IP)+16位位移量
3)段内间接转移
格式:JMP  WORD PTR OPR
执行的操作:(IP)<-(EA)
4)段间直接(远)转移
格式:JMP  FAR PTR OPR
执行的操作:(IP)<-OPR的段内偏移地址
           (CS)<-OPR所在段的段地址
5)段间间接转移
格式:JMP  DWORD PTR OPR
执行的操作:(IP)<-(EA)
           (CS)<-(EA+2)
2.条件转移指令
1)根据单个条件标志的设置情况转移
.JZ(或JE)(Jump if zero,or equal)  结果为零(或相等)则转移
格式:JE(或JZ)  OPR
测试条件:ZF=1
.JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移
格式:JNZ(或JNE)  OPR
测试条件:ZF=0
.JS(Jump if sign)  结果为负则转移
格式:  JS  OPR
测试条件:SF=1
.JNS(Jump if not sign)  结果为正则转移
格式:JNS  OPR
测试条件:SF=0
.JO(Jump if overflow)  溢出则转移
格式:   JO  OPR
测试条件:OF=1
.JNO(Jump if not overflow)  不溢出则转移
格式:   JNO OPR
测试条件:OF=0
.JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移
格式:   JP  OPR
测试条件:PF=1
.JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移
格式:   JNP(或JPO)  OPR
测试条件:PF=0
.JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移
格式:JB(或JNAE,JC)  OPR
测试条件:CF=1
.JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移
格式:JNB(或JAE,JNC)  OPR
测试条件:CF=0
2)比较两个无符号数,并根据比较的结果转移
.JB(或JNAE,JC)
格式:同上
.JNB(或JAE,JNC)
格式:同上
.JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移
格式:JBE(或JNA)  OPR
测试条件:CFVZF=1
.JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移
格式:JNBE(或JA)  OPR
测试条件:CFVZF=0
3)比较两个带符号数,并根据比较的结果转移
.JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移
格式:JL(或JNGE)  OPR
测试条件:SFVOF=1
.JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移
格式:JNL(或JGE)  OPR
测试条件:SFVOF=0
.JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移
格式:JLE(或JNG)  OPR
测试条件:(SFVOF)VZF=1
.JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移
格式:JNLE(或JG)  OPR
测试条件:(SFVOF)VZF=0
4)测试CX的值为0则转移指令
.JCXZ(Jump if CX register is zero)  CX寄存器的内容为零则转移
格式:JCXZ  OPR
测试条件:(CX)=0
注:条件转移全为8位短跳!
3.循环指令
.LOOP 循环指令
格式: LOOP  OPR
测试条件:(CX)<>0
.LOOPZ/LOOPE 当为零或相等时循环指令
格式: LOOPZ(或LOOPE)  OPR
测试条件:(CX)<>0且ZF=1
.LOOPNZ/LOOPNE 当不为零或不相等时循环指令
格式: LOOPNZ(或LOOPNE)  OPR
测试条件:(CX)<>0且ZF=0
这三条指令的步骤是:
1)(CX)<-(CX)-1
2)检查是否满足测试条件,如满足则(IP)<-(IP)+D8的符号扩充.

4.子程序
.CALL调用指令
.RET返回指令
5.中断
.INT指令
格式:    INT  TYPE
或       INT
执行的操作:(SP)<-(SP)-2
           ((SP)+1,(SP))<-(PSW)
           (SP)<-(SP)-2
           ((SP)+1,(SP))<-(CS)
           (SP)<-(SP)-2
           ((SP)+1,(SP))<-(IP)
           (IP)<-(TYPE*4)
           (CS)<-(TYPE*4+2)
.INTO  若溢出则中断
执行的操作:若OF=1则:
           (SP)<-(SP)-2
           ((SP)+1,(SP))<-(PSW)
           (SP)<-(SP)-2
           ((SP)+1,(SP))<-(CS)
           (SP)<-(SP)-2
           ((SP)+1,(SP))<-(IP)
           (IP)<-(10H)
           (CS)<-(12H)
.IRET    从中断返回指令
格式:     IRET
执行的操作:(IP)<-((SP)+1,(SP))
           (SP)<-(SP)+2
           (CS)<-((SP)+1,(SP))
           (SP)<-(SP)+2
           (PSW)<-((SP)+1,(SP))
           (SP)<-(SP)+2

六、处理机控制指令
1.标志处理指令
.CLC进位位置0指令(Clear carry)CF<-0
.CMC进位位求反指令(Complement carry)CF<-CF
.STC进位位置1指令(Set carry)CF<-1
.CLD方向标志置0指令(Clear direction)DF<-0
.STD方向标志置1指令(Set direction)DF<-1
.CLI中断标志置0指令(Clear interrupt)IF<-0
.STI中断标志置1指令(Set interrupt)IF<-0
2.其他处理机控制指令
NOP(No Opreation)   无操作
HLT(Halt)           停机
WAIT(Wait)          等待
ESC(Escape)         换码
LOCK(Lock)          封锁
这些指令可以控制处理机状态.这们都不影响条件码.
.NOP 无操作指令
    该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代.
.HLT停机指令
    该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序.
.WAIT等待指令
    该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT指令继续德行.
.ESC换码指令
   格式ESC  mem
其中mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去.当然ESC指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件.
.LOCK封锁指令
    该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU与其他处理机协同工作时,该指令可避免破坏有用信息.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -