1、ASSUME CS:CODE,DS:DATA,SS:STACK1 ASSUME 是伪指令,本身不产生代码,所以必要的初始化还是要的,比如DATADS,CODECS,STACK SS2 ASSUME 的作用是告诉编译器到哪个 seg 去找哪个变量(传说中可以节约时间)3 ASSUME 后面的各种预定传说是可以省略的,只有 CS:CODE 不可省略,否则会报错4 CODE、DATA 、STACK 是自己定义的段名,而 CS、DS、SS 是实际的寄存器地址MOV SP,OFFSET TOP = LEA SP,TOP (OFFSET 是偏移地址的意思)$是 INT 21H 指令中显示字符串指令的结束符
2、INT 是中断调用指令, INT 21H;21H 是中断入口,根据芯片不同含义不同,功能是调用 DOS 函数(根据 AH 值判断调用 DOS 执行何种操作)START END STARTEND 是关键词,START 是标示符,所以可修改, END xxx 表示 xxx 程序结束DOS 系统功能调用表(INT 21H)AH 功能 调用参数 返回参数00 程序终止(同 INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符02 显示输出 DL=输出字符 03 异步通迅输入 AL=输入数据04 异步通迅输出 DL=输出数据 05 打印机输出 DL=输出字符 06 直接控制台 I/O
3、 DL=FF(输入)DL=字符(输出) AL=输入字符07 键盘输入(无回显) AL=输入字符08 键盘输入(无回显)检测 Ctrl-Break AL=输入字符09 显示字符串 DS:DX=串地址$结束字符串 0A 键盘输入到缓冲区DS:DX=缓冲区首地址(DS:DX)=缓冲区最大字符数(DS:DX+1)=实际输入的字符数0B 检验键盘状态 AL=00有输入AL=FF 无输入0C 清除输入缓冲区并请求指定的输入功能 AL=输入功能号(1,6,7,8,A) 0D 磁盘复位 清除文件缓冲区0E 指定当前缺省的磁盘 驱动器 DL=驱动器号 0=A,1=B,. AL=驱动器数0F 打开文件 DS:DX
4、=FCB 首地址 AL=00文件找到AL=FF 文件未找到10 关闭文件 DS:DX=FCB 首地址 AL=00目录修改成功AL=FF 目录中未找到文件11 查找第一个目录项 DS:DX=FCB 首地址 AL=00找到AL=FF 未找到12 查找下一个目录项 DS:DX=FCB 首地址(文件中带有*或?) AL=00找到AL=FF 未找到13 删除文件 DS:DX=FCB 首地址 AL=00删除成功AL=FF 未找到14 顺序读 DS:DX=FCB 首地址AL=00读成功=01文件结束,记录中无数据=02 DTA 空间不够=03文件结束,记录不完整15 顺序写 DS:DX=FCB 首地址 AL
5、=00写成功=01盘满=02 DTA 空间不够16 建文件 DS:DX=FCB 首地址 AL=00建立成功 =FF 无磁盘空间17 文件改名 DS:DX=FCB 首地址(DS:DX+1)=旧文件名(DS:DX+17)=新文件名AL=00成功AL=FF 未成功19 取当前缺省磁盘驱动 器 AL=缺省的驱动器号 0=A,1=B,2=C,.1A 置 DTA 地址 DS:DX=DTA 地址 1B 取缺省驱动器 FAT 信息AL=每簇的扇区数DS:BX=FAT 标识字节CX=物理扇区大小DX=缺省驱动器的簇数1C 取任一驱动器 FAT 信息 DL=驱动器号 同上21 随机读 DS:DX=FCB 首地址
6、AL=00读成功=01文件结束=02缓冲区溢出=03缓冲区不满22 随机写 DS:DX=FCB 首地址 AL=00写成功 =01盘满=02缓冲区溢出23 测定文件大小 DS:DX=FCB 首地址AL=00成功( 文件长度填入FCB)AL=FF 未找到24 设置随机记录号 DS:DX=FCB 首地址 25 设置中断向量 DS:DX=中断向量AL=中断类型号 26 建立程序段前缀 DX=新的程序段前缀 27 随机分块读 DS:DX=FCB 首地址CX=记录数AL=00读成功=01文件结束=02缓冲区太小,传输结束=03缓冲区不满28 随机分块写 DS:DX=FCB 首地址CX=记录数AL=00写成
7、功=01盘满=02缓冲区溢出29 分析文件名 ES:DI=FCB 首地址DS:SI=ASCIIZ 串AL=控制分析标志AL=00标准文件=01多义文件=02非法盘符2A 取日期 CX=年DH:DL=月:日(二进制)2B 设置日期 CX:DH:DL=年:月:日 AL=00成功=FF 无效2C 取时间 CH:CL=时:分DH:DL=秒:1/100 秒2D 设置时间 CH:CL=时:分DH:DL=秒:1/100 秒 AL=00成功 =FF 无效2E 置磁盘自动读写标志 AL=00关闭标志AL=01打开标志 2F 取磁盘缓冲区的首址 ES:BX=缓冲区首址30 取 DOS 版本号 AH=发行号,AL=
8、版本31 结束并驻留 AL=返回码DX=驻留区大小 33 Ctrl-Break 检测 AL=00取状态=01置状态(DL)DL=00关闭检测=01打开检测DL=00关闭 Ctrl-Break 检测=01打开 Ctrl-Break 检测35 取中断向量 AL=中断类型 ES:BX=中断向量36 取空闲磁盘空间 DL=驱动器号 0=缺省,1=A,2=B,.成功:AX=每簇扇区数BX=有效簇数CX=每扇区字节数DX=总簇数失败 :AX=FFFF38 置/取国家信息 DS:DX=信息区首地址BX=国家码(国际电话前缀码)AX=错误码39 建立子目录(MKDIR) DS:DX=ASCIIZ 串地址 AX
9、=错误码3A 删除子目录(RMDIR) DS:DX=ASCIIZ 串地址 AX=错误码3B 改变当前目录(CHDIR) DS:DX=ASCIIZ 串地址 AX=错误码3C 建立文件 DS:DX=ASCIIZ 串地址CX=文件属性 成功:AX=文件代号错误:AX=错误码3D 打开文件 DS:DX=ASCIIZ 串地址AL=0读=1写=3读 /写成功:AX=文件代号错误:AX=错误码3E 关闭文件 BX=文件代号 失败:AX=错误码3F 读文件或设备 DS:DX=数据缓冲区地址BX=文件代号CX=读取的字节数读成功:AX=实际读入的字节数AX=0已到文件尾读出错:AX=错误码 40 写文件或设备D
10、S:DX=数据缓冲区地址BX=文件代号CX=写入的字节数写成功:AX=实际写入的字节数写出错:AX=错误码41 删除文件 DS:DX=ASCIIZ 串地址 成功:AX=00出错:AX=错误码(2,5)42 移动文件指针 BX=文件代号CX:DX=位移量AL=移动方式 (0:从文件头绝对位移,1:从当前位置相对移动,2:从文件尾绝对位移)成功:DX:AX=新文件指针位置出错:AX=错误码43 置/取文件属性 DS:DX=ASCIIZ 串地址AL=0取文件属性AL=1置文件属性CX=文件属性成功:CX= 文件属性失败:CX= 错误码44 设备文件 I/O 控制 BX=文件代号AL=0取状态=1置状
11、态 DX=2读数据=3写数据=6取输入状态=7取输出状态 DX=设备信息45 复制文件代号 BX=文件代号1 成功:AX=文件代号2失败:AX=错误码46 人工复制文件代号 BX=文件代号1CX=文件代号2 失败:AX=错误码47 取当前目录路径名 DL=驱动器号DS:SI=ASCIIZ 串地址 (DS:SI)=ASCIIZ 串失败:AX=出错码48 分配内存空间 BX=申请内存容量 成功:AX= 分配内存首地失败:BX= 最大可用内存49 释放内容空间 ES=内存起始段地址 失败:AX=错误码4A 调整已分配的存储块 ES=原内存起始地址BX=再申请的容量 失败:BX= 最大可用空间 AX=
12、错误码4B 装配/执行程序 DS:DX=ASCIIZ 串地址ES:BX=参数区首地址AL=0装入执行AL=3装入不执行失败:AX=错误码4C 带返回码结束 AL=返回码 4D 取返回代码 AX=返回代码4E 查找第一个匹配文件 DS:DX=ASCIIZ 串地址CX=属性 AX=出错代码(02,18)4F 查找下一个匹配文件 DS:DX=ASCIIZ 串地址(文件名中带有? 或*) AX=出错代码(18)54 取盘自动读写标志 AL=当前标志值56 文件改名 DS:DX=ASCIIZ 串(旧)ES:DI=ASCIIZ 串(新) AX=出错码(03,05,17)57 置/取文件日期和时间BX=文件
13、代号AL=0读取AL=1设置(DX:CX)DX:CX=日期和时间失败:AX=错误码58 取/置分配策略码 AL=0取码AL=1置码 (BX) 成功:AX=策略码失败:AX=错误码59 取扩充错误码AX=扩充错误码BH=错误类型BL=建议的操作CH=错误场所5A 建立临时文件 CX=文件属性DS:DX=ASCIIZ 串地址 成功:AX=文件代号失败:AX=错误码5B 建立新文件 CX=文件属性DS:DX=ASCIIZ 串地址 成功:AX=文件代号失败:AX=错误码5C 控制文件存取 AL=00封锁=01开启BX=文件代号CX:DX=文件位移SI:DI=文件长度失败:AX=错误码62 取程序段前缀 BX=PSP 地址