中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [转帖]8088 宏汇编速查手册 上一主题 | 下一主题
Kinglion
铂金会员

痴迷DOS者


积分 5792
发帖 1921
注册 2003-6-20
来自 金獅電腦軟體工作室
状态 离线
『楼 主』:  [转帖]8088 宏汇编速查手册

8088 宏汇编速查手册
                        ━━━━━━━━━━━━


一、数据传输指令
───────────────────────────────────────
    它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
    1. 通用数据传送指令.
        MOV     传送字或字节.
        PUSH    把字压入堆栈.
        POP     把字弹出堆栈.
        XCHG    交换字或字节.
        XLAT    字节查表转换.
                ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即
                0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )
    2. 输入输出端口传送指令.
        IN      I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )
        OUT     I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )
           输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,
           其范围是 0-65535.
    3. 目的地址传送指令.
        LEA     装入有效地址.
           例: LEA DX,string   ;把偏移地址存到DX.
        LDS     传送目标指针,把指针内容装入DS.
           例: LDS SI,string   ;把段地址:偏移地址存到DS:SI.
        LES     传送目标指针,把指针内容装入ES.
           例: LES DI,string   ;把段地址:偏移地址存到ESI.
    4. 标志传送指令.
        LAHF    标志寄存器传送,把标志装入AH.
        SAHF    标志寄存器传送,把AH内容装入标志寄存器.
        PUSHF   标志入栈.
        POPF    标志出栈.

二、算术运算指令
───────────────────────────────────────
        ADD     加法.
        ADC     带进位加法.
        INC     加 1.
        AAA     加法的ASCII码调整.
        DAA     加法的十进制调整.
        SUB     减法.
        SBB     带借位减法.
        DEC     减 1.
        NEC     求反(以 0 减之).
        CMP     比较.(两操作数作减法,仅修改标志位,不回送结果).
        AAS     减法的ASCII码调整.
        DAS     减法的十进制调整.
        MUL     无符号乘法.
        IMUL    整数乘法.
          以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
        AAM     乘法的ASCII码调整.
        DIV     无符号除法.
        IDIV    整数除法.
          以上两条,结果回送:
              商回送AL,余数回送AH, (字节运算);
          或  商回送AX,余数回送DX, (字运算).
        AAD     除法的ASCII码调整.
        CBW     字节转换为字. (把AL中字节的符号扩展到AH中去)
        CWD     字转换为双字. (把AX中的字的符号扩展到DX中去)

三、逻辑运算指令
───────────────────────────────────────
        AND     与运算.
        OR      或运算.
        XOR     异或运算.
        NOT     取反.
        TEST    测试.(两操作数作与运算,仅修改标志位,不回送结果).
        SHL     逻辑左移.
        SAL     算术左移.(=SHL)
        SHR     逻辑右移.
        SAR     算术右移.(=SHR)
        ROL     循环左移.
        ROR     循环右移.
        RCL     通过进位的循环左移.
        RCR     通过进位的循环右移.
          以上八种移位指令,其移位次数可达255次.
              移位一次时, 可直接用操作码.  如 SHL AX,1.
              移位>1次时, 则由寄存器CL给出移位次数.
                如  MOV CL,04
                    SHL AX,CL

四、串指令
───────────────────────────────────────
            DS:SI   源串段寄存器  :源串变址.
            ESI   目标串段寄存器:目标串变址.
            CX      重复次数计数器.
            AL/AX   扫描值.
            D标志   0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
            Z标志   用来控制扫描或比较操作的结束.
        MOVS    串传送.
            ( MOVSB   传送字符.    MOVSW   传送字. )
        CMPS    串比较.
            ( CMPSB   比较字符.    CMPSW   比较字. )
        SCAS    串扫描.
            把AL或AX的内容与目标串作比较,比较结果反映在标志位.
        LODS    装入串.
            把源串中的元素(字或字节)逐一装入AL或AX中.
        STOS    保存串.
            是LODS的逆过程.
        REP/REPE/REPNE/REPZ/REPNZ   重复

五、程序转移指令
───────────────────────────────────────
    1>无条件转移指令 (长转移)
        JMP     无条件转移指令
        CALL    过程调用
        RET/RETF过程返回.
    2>条件转移指令 (短转移,-128到+127的距离内)
        JA/JNBE 不小于或不等于时转移.
        JAE/JNB 大于或等于转移.
        JB/JNAE 小于转移.
        JBE/JNA 小于或等于转移.
          以上四条,测试无符号整数运算的结果(标志C和Z).
        JG/JNLE 大于转移.
        JGE/JNL 大于或等于转移.
        JL/JNGE 小于转移.
        JLE/JNG 小于或等于转移.
          以上四条,测试带符号整数运算的结果(标志S,O和Z).
        JE/JZ   等于转移.
        JNE/JNZ 不等于时转移.
        JC      有进位时转移.
        JNC     无进位时转移.
        JNO     不溢出时转移.
        JNP/JPO 奇偶性为奇数时转移.
        JNS     符号位为 "0" 时转移.
        JO      溢出转移.
        JP/JPE  奇偶性为偶数时转移.
        JS      符号位为 "1" 时转移.
    3>循环控制指令(短转移)
        LOOP            CX不为零时循环.
        LOOPE/LOOPZ     CX不为零且标志Z=1时循环.
        LOOPNE/LOOPNZ   CX不为零且标志Z=0时循环.
        JCXZ            CX为零时转移.
    4>中断指令
        INT     中断指令
        INTO    溢出中断
        IRET    中断返回
    5>处理器控制指令
        HLT     处理器暂停, 直到出现中断或复位信号才继续.
        WAIT    当芯片引线TEST为高电平时使CPU进入等待状态.
        ESC     转换到外处理器.
        LOCK    封锁总线.
        NOP     空操作.
        STC     置进位标志位.
        CLC     清进位标志位.
        CMC     进位标志取反.
        STD     置方向标志位.
        CLD     清方向标志位.
        STI     置中断允许位.
        CLI     清中断允许位.

六、伪指令
───────────────────────────────────────
        DB      定义字节.
        DW      定义字(2字节).
        PROC    定义过程.
        ENDP    过程结束.
        SEGMENT 定义段.
        ASSUME  建立段寄存器寻址.
        ENDS    段结束.
        END     程序结束.

七. 系统和BIOS,DOS占用的中断向量
───────────────────────────────────────
    .中断 0: 除数为0错             .中断 19: 引导装入程序
    .中断 1: 单步中断               .中断 1A: 日时调用
    .中断 2: 不可屏蔽中断 NMI       .中断 1B: 键盘阻断时得到控制权
    .中断 3: 断电中断 (CCH)         .中断 1C: 时钟中断时得到控制权
    .中断 4: 溢出中断               .中断 1D: 指向CRT初始参数表
    .中断 5: 屏幕打印中断           .中断 1E: 指向盒带参数表
    .中断 6-7: 保留                 .中断 1F: 1KB图形模式CRT用第128至256号字符
    .中断 8: 计时器中断(18.2/秒)    .中断 20: 结束DOS程序
    .中断 9: 键盘中断               .中断 21: DOS功能调用
    .中断 A-D: 保留                 .中断 22: 结束地址 (建议用EXEC功能调用)
    .中断 E: 软盘机中断             .中断 23: DOS Ctrl-Break退出地址
    .中断 F: 保留                   .中断 24: DOS 致命错向量
    .中断 10: 屏幕I/O调用           .中断 25: DOS 绝对磁盘读
    .中断 11: 设备检查调用          .中断 26: DOS 绝对磁盘写
    .中断 12: 存贮器检查调用        .中断 27: 结束程序并贮留(建议用31H功能调用)
    .中断 13: 软盘机I/O调用         .中断 28-3F: DOS 保留
    .中断 14: RS-232 I/O 调用       .中断 40-7F: 未用
    .中断 15: 盒带机I/O调用         .中断 80-85: BASIC保留
    .中断 16: 键盘I/O调用           .中断 86-F0: BASIC解释程序用
    .中断 17: 打印机I/O调用         .中断 F1-FF: 未用
    .中断 18: ROM-BASIC入口

八. IBM PC 的中断 INT 10:
───────────────────────────────────────
   .00H 屏幕方式设置.
      入口: AH=0, AL=显示方式代码.(0-6)
          0: 40x25 黑白  1: 40x25 彩色  2: 80x25 黑白  3: 80x25 彩色文本方式
          4: 320x200 彩色  5: 320x200 黑白  6: 640x200 黑白图形方式
          7: 80x25 单色字符 (单色显示器)
   .01H 设光标大小
      入口: AH=1, CH=光标起始行号(00-0C), CL=光标结束行号(00-0C), 且CH<CL.
   .02H 光标定位
      入口: AH=2, BH=页号, DHL=起始行:列.
   .03H 读光标位置
      入口: AH=3, BH=页号. 返回: DHL=起始行:列.
   .06H 窗口上卷
      入口: AH=6, AL=窗口上卷行数(AL=0 卷动整个窗口);
            CH:CL -DHL  窗口坐标
   .07H 窗口下卷
      入口: AH=7, AL=窗口下卷行数
            CH:CL -DHL  窗口坐标
   .08H 读当前光标处字符和属性
      入口: AH=8, BH=页号. 返回: AH:AL=字符的颜色:字符的ASCII码
            显示字符的颜色定义如下:
                 1   2   3   4   5   6   7   8
               ┌─┬─┬─┬─┬─┬─┬─┬─┐
               │BL│R│G│B│I│R│G│B│
               └─┴─┴─┴─┴─┴─┴─┴─┘  B-兰 G-绿 R-红
                 闪  └───┘  加  └───┘
                 烁   字符底色   亮  字符显示色
   .09H 在当前光标处写字符和属性(光标不下移).
      入口: AH=9, BH=页号, BL:AL=字符的颜色:字符的ASCII码, CX=重复次数.
   .0AH 在当前光标处写字符(原有属性)
      入口: AH=0A, BH=页号, AL=字符的ASCII码, CX=重复次数.
   .0BH 色彩设置
      入口: AH=0B, BL=0  设背景色, BH=0-15
                   BL=1  设调色码, BH=0-1
   .0CH 写图形点
      入口: AH=0C, CXX=列号:行号, AL=颜色.
   .0DH 读图形点
      入口: AH=0D, CXX=列号:行号. 返回: AL=颜色,
   .0EH 在当前页、当前光标处写字符
      入口: AH=0E, AL=字符的ASCII码, BL=前景色.
   .0FH 显示器状态
      入口: AH=0F. 返回: AL=当前显示器方式, AH=屏幕列数, BH=当前页号

九. IBM PC 的键盘中断 INT 16:
───────────────────────────────────────
   .00H 读一个键盘键入字符.
      入口: AH=0.  返回: AL=字符的ASCII码, AH=扫描码.
   .01H 确认键盘是否键入字符.
      入口: AH=1.  返回: ZF=1 (Z) 未键入字符;
                         ZF=0 (NZ)键入字符, AL=字符的ASCII码, AH=扫描码.
                   键入字符同时留在键盘缓冲区.
   .02H 读当前移位键状况.
      入口: AH=2.
      返回: AL=状态.
                      7   6   5   4   3   2   1   0
                   ┌─┬─┬─┬─┬─┬─┬─┬─┐
            AL:    │  │  │  │  │  │  │  │  │
                   └─┴─┴─┴─┴─┴─┴─┴─┘
                     │  │  │  │  │  │  │  │
                     │  │  │  │  │  │  │  └─右Shift
                     │  │  │  │  │  │  └─左Shift
                     │  │  │  │  │  └─Ctrl
                     │  │  │  │  └─Alt
                     │  │  │  └─Scroll Lock
                     │  │  └─Num Lock
                     │  └─Capa Lock
                     └─Ins

十. ROM 中断 INT 13:
───────────────────────────────────────
     A.软盘机I/O调用(360K)
       .00H 复位盘系统
          入口: AH =0
          返回: AH =磁盘状态
                 0-坏命令, 1-盘上地址找不到, 3-写保护, 4-扇区找不到, ...
       .01H 读磁盘状态
          入口: AH =1
          返回: AH =磁盘状态
       .02H 磁盘读
          入口: AH =2, DL =驱动器号(0-3), 0=A, 1=B, 2=C
                DH =头号(0或1), CH =道号(0-39H), CL =起始扇区号(1-9)
                AL =欲读扇区数(1-9), ES:BX =内存缓冲区首址.
          返回: AL =实际读入扇区数,AH =磁盘状态; 进位标志CF =0,出错; =1,成功.
       .03H 磁盘写
          入口: AH =3, DL =驱动器号(0-3), 0=A, 1=B, 2=C
                DH =头号(0或1), CH =道号(0-39H), CL =起始扇区号(1-9)
                AL =欲写扇区数(1-9), ES:BX =内存缓冲区首址.
          返回: AL =实际写入扇区数,AH =磁盘状态; 进位标志CF =0,出错; =1,成功.
     B.硬盘机I/O调用
          入口: AH =0-3, DL =驱动器号(硬盘80H,81H), 80=C, 81=D
                DH =头号(硬盘0-15), CH =道号(0-1023), CL =起始扇区号(1-17)
                AL =欲读写扇区数, ES:BX =内存缓冲区首址.
          返回: AL =实际读入扇区数,AH =磁盘状态; 进位标志CF =0,出错; =1,成功.

十一. 绝对磁盘读写 (中断25,中断26)
───────────────────────────────────────
     A. INT 25 绝对磁盘读
     B. INT 26 绝对磁盘写
        入口: AL =驱动器号(0-2), 0=A, 1=B, 2=C
              DX =起始扇区的逻辑扇区号
              CX =欲读写扇区数(1-80H),
              DS:BX =内存缓冲区首址.

十二. IBM PC 功能调用 (中断 INT 21)
───────────────────────────────────────
   .00H 程序结束.
   .01H 键盘输入一个字符.(回显)
        入口: AH=01.      返回: DL=输入字符.
        对扩展键, 要求两次功能调用.
   .02H 显示一个字符.
        入口: AH=02, DL=字符.(07响铃,08退格,0D回车,0A换行)
   .05H 打印一个字符.
        入口: AH=05, DL=字符.(0D回车,0A换行)
   .08H 键盘输入一个字符.(不回显)
        入口: AH=08.      返回: DL=输入字符.
        对扩展键, 要求两次功能调用.
   .09H 显示一串字符.
        入口: AH=09, DSX=字符串首址.(字符串必须以字符'$'结尾.)
   .0AH 键盘输入一串字符.
        入口: AH=0A, DSX=字符串首址. 字节DS:[DX]=缓冲区长(最多容纳字符数)
              (输入字符串必须以回车结尾.)
        返回: 字符串首址在DSX+2,字符数=DS:[DX+1].
   .0CH 清键盘缓冲区,并调用键盘功能(.01H,06H,07H,08H或0AH).
        入口: AH=0C, AL=调用键盘功能号(.01H,06H,07H,08H或0AH).
   .30H 取得DOS版本号.
        返回: AL-主版本号, AH-次版本号
   .42H 移动文件读写指针
            AL=0    指针从文件开始移动CXX个字节
            AL=1    指针从当前位置开始移动CXX个字节
            AL=2    指针从文件尾向前移动CXX个字节
   .43H 改变文件属性
   .4CH 结束DOS程序,并保留代码可用于批处理中.



熟能生巧,巧能生精,一艺不精,终生无成,精亦求精,始有所成,臻于完美,永无止境!
金狮電腦軟體工作室愿竭诚为您服务!
QQ群:8393170(定期清理不发言者)
个人网站:http://www.520269.cn
电子邮件:doujiehui@vip.qq.com
微信公众号: doujiehui
2004-1-17 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (79207959)  编辑帖子  回复  引用回复
冷石_jasv
初级用户




积分 182
发帖 27
注册 2003-11-12
状态 离线
『第 2 楼』:  

好东西,顶一顶,收了

2004-1-19 00:00
查看资料  发送邮件  发短消息 网志  OICQ (21873670)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: