![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 10:46 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » [转帖]8088 宏汇编速查手册 |
| 可打印版本 1,046 / 1 |
| 第1楼 Kinglion | 发表于 2004-01-17 00:00 |
| 铂金会员 发帖 1,924 积分 5,800 来自 金獅電腦軟體工作室 | |
|
[转帖]8088 宏汇编速查手册 8088 宏汇编速查手册
━━━━━━━━━━━━ 一、数据传输指令 ─────────────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. PUSH 把字压入堆栈. POP 把字弹出堆栈. XCHG 交换字或字节. XLAT 字节查表转换. ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 0-FFH); 返回 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 ;把段地址:偏移地址存到ES I.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 源串段寄存器 :源串变址. ES I 目标串段寄存器:目标串变址.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=页号, DH L=起始行:列..03H 读光标位置 入口: AH=3, BH=页号. 返回: DH L=起始行:列..06H 窗口上卷 入口: AH=6, AL=窗口上卷行数(AL=0 卷动整个窗口); CH:CL -DH L 窗口坐标.07H 窗口下卷 入口: AH=7, AL=窗口下卷行数 CH:CL -DH L 窗口坐标.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, CX X=列号:行号, AL=颜色..0DH 读图形点 入口: AH=0D, CX X=列号:行号. 返回: 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, DS X=字符串首址.(字符串必须以字符'$'结尾.).0AH 键盘输入一串字符. 入口: AH=0A, DS X=字符串首址. 字节DS:=缓冲区长(最多容纳字符数)(输入字符串必须以回车结尾.) 返回: 字符串首址在DS X+2,字符数=DS:..0CH 清键盘缓冲区,并调用键盘功能(.01H,06H,07H,08H或0AH). 入口: AH=0C, AL=调用键盘功能号(.01H,06H,07H,08H或0AH). .30H 取得DOS版本号. 返回: AL-主版本号, AH-次版本号 .42H 移动文件读写指针 AL=0 指针从文件开始移动CX X个字节AL=1 指针从当前位置开始移动CX X个字节AL=2 指针从文件尾向前移动CX X个字节.43H 改变文件属性 .4CH 结束DOS程序,并保留代码可用于批处理中. |
|
| 第2楼 冷石_jasv | 发表于 2004-01-19 00:00 |
| 初级用户 发帖 27 积分 182 | |
|
好东西,顶一顶,收了
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |