汇编;8086/8088;其他指令

时间:2022-10-31 00:43:36

一、串操作



1)MOVSB/MOVSW ;    (ES:[DI]<-DS:[SI])
2)STOSB/STOSW ;    (ES:[DI]<-AL/AX)
3)LODSB/LODSW ;    (AL/AX<-DS:[SI])
    REP + 1)/2)/3) ;    (DF控制方向,CX控制次数)
注:1、2、3一次执行一个操作,与rep联用实现多个操作;


4)CMPSB/CMPSW ;    (DS:[SI] - ES:[DI])
5)SCASB/SCASW ;    (AL - ES:[DI])
    REPE/REPZ + 4)/5) ;    (ZF/CF = 0, 停止执行)
    REPNE/REPNZ + 4)/5) ;    (ZF=1/CF=0,停止执行)


二、中断指令

1)INTO ;    (OF=0,产生4号中断)
2)IRET ;    (中断返回)
3)INT n ;    (中断调用)
常用中断指令:
    1.MOV    AH,9 ;    (显示以'$'结尾字符串,入口DS:DX)
       INT       21H
    2.MOV    AH,1 ;    (单个键入字符-->AL)
       INT       21H
    *3. MOV    AH,10 ;    (输入字符串)
       INT       21H
    4. MOV    AH,2 ;    (输出单个字符,入口地址DL)
       INT       21H
注:3.例:DATA    DB 64 ;    (定义缓冲区长度)
                                DB ? ;    (系统填写字符串实际长度,回车作字符串结束标志)
                                DB 20 DUP(?) ;    (字符串实际储存区域)
                    MOV    DX,OFFSET DATA
                    MOV    AH,0AH ;    (写入第二个字节中)
                    INT       21H


注:中断指令常与LEA、OFFSET指令联用,用于设置中断操作的入口地址;

三、调用和返回



1)CALL + (far ptr )label
    压入IP(段内);
     压入CS、IP(段间);

2)RET (+ num)
    弹出IP(段内)(SP+2(+num));
    弹出CS、IP(段间)(SP+4(+num));
    注:与CALL联用,调用已经定义的子程序,返回为段内还是段间由CALL决定;

四、转移指令


1)JMP    标号 ;    段内转移
     JMP    FAR/NEAR    PTR    标号 ;    (FAR,改变CS、IP;NEAR,改变IP)
     JMP    R16/M16 ;    (IP<-R16/M16)
2)判断标志位
        JZ/JNZ
        JS/JNS
        JO/JNO
        JP/JNP
        JC/JNC
        JCXZ
3)判断数大小

    无符号数: ( G大,L小,E等,N不 )
        JA/JNBE ;    (大于,不'小于等于)
        JNA/JBE ;    (不大于,小于等于)
        JB/JNAE ;    (小于,不'大于等于)
        JNB/JAE ;    (不小于,大于等于)
  有符号数:( G大,L小,E等,N不)
      JG/JNLE ;    (大于,不'小于等于)
      JNG/JLE ;    (不大于,小于等于)
      JL/JNGE ;    (小于,不'大于等于)
      JNL/JGE ;    (不小于,大于等于)
(注:比较的值是CMP的两个操作数)


五、循环指令


1)LOOP    label ;    CX!=0,转移;
2)LOOPZ    label ;    CX != 0 && ZF = 1,转移;
3)LOOPNZ    label ;    CX != 0 && ZF = 0,转移;
4)JCXZ    label ;    CX=0,转移;
(循环指令不影响标志位)
(内层循环应完全包含在外层内)


六、伪指令

1)ASSUNME+段寄存器:段名
2)SEGMENT+段名
    段名+ENDS(成对出现)
3)ENDS(程序结束)
4)宏指令:
    MICRO    NAME    形参
    ……
    代码
    ……
    ENDM
    调用:NAME    实参
    (宏会在调用时自动展开,编译时代码长度和原来一样)