初学汇编语言的同学用INT 21H

合集下载

int 21h汇编语言

int 21h汇编语言

int 21h汇编语言
int 21h 是8086汇编语言中的一条指令,用于调用DOS的功能服务。

其功能和参数由AH(高8位寄存器)和AL(低8位
寄存器)指定。

int 21h的使用方法如下:
```
mov ah, 功能代码
mov dl, 参数
int 21h
```
其中,功能代码(Function Code)是指要调用的DOS功能服
务的编号,根据不同的功能服务,有不同的功能代码。

参数(Argument)是指传递给DOS功能服务的附加参数。

示例:
```
; 用int 21h调用DOS功能服务来显示一个字符
mov ah, 02h ; 功能代码02h表示显示字符
mov dl, 'A' ; 要显示的字符是'A'
int 21h
```
上述示例中,mov ah, 02h表示要调用DOS的02h号功能服务,即显示字符。

mov dl, 'A'将要显示的字符'A'存放在dl寄存器中。

最后一句int 21h,则代表调用DOS功能服务来显示字符。

总之,int 21h是汇编语言中调用DOS功能服务的常用指令,通过它可以实现一系列与DOS相关的操作,比如读写文件、显示字符和字符串等。

汇编语言程序设计(第四版)第4章【课后答案】

汇编语言程序设计(第四版)第4章【课后答案】

汇编语言程序设计(第四版)第4章【课后答案】汇编语言程序设计第四版【课后习题答案】--囮裑為檤第4章基本汇编语言程序设计〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。

〔解答〕思路:首先由最高位字节向次低位字节传送……次低位字节向最低位字节传送(共7次);再判最高位字节符号位,如为0,送00h到最高位字节;如为1,送ffh到最高位字节。

传送可参考例题4.2,不过应从第一号字节送第零号字节,……最高位字节向次低位字节传送;也可以用循环来完成:.model small.stack 256.dataqvar dq 1234567887654321h.code.startupmov cx,7mov si,1again: mov al, byte ptr qvar[si]mov byte ptr qvar[si-1],alinc siloop againtest al,80hjz ezzmov bl,0ffhjmp doneezz: mov bl,0done: mov byte ptr qvar[7],bl.exit 0end〔习题4.2〕例题4.2如果要求算术左移7位,如何用移位指令实现。

〔解答〕思路:可设计外循环体为8个字节左移一次,方法是:最低位字节算术左移一次,次低位字节至最高位字节依次带CF 位循环左移一次(内循环共8次),外循环体控制执行7次即可。

.model small.stack 256.dataqvar dq 1234567887654321h.code.startupmov dx, 7 ;外循环次数mov ax, byte ptr qvar[0] ;最低位字节送axlpp: shl ax, 1 ;最低位字节左移一次,其d7移入CF位mov si, 1mov cx, 7 ;内循环次数again: rcl byte ptr qvar[si], 1 ;高位字节依次左移P50inc siloop againdec dxjnz lpp.exit 0.end〔习题4.3〕将AX寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL、BL、CL和DL寄存器中。

汇编语言程序设计(第二版) 钱晓捷 课后答案

汇编语言程序设计(第二版) 钱晓捷 课后答案

汇编语言程序设计(第二版)钱晓捷习题答案第二章(01)2.1(1)AX=1200h(2)AX=0100h(3)AX=4C2Ah(4)AX=3412h(5)AX=4C2Ah(6)AX=7856h(7)AX=65B7h2.2(1) 两操作数类型不匹配(2) IP指令指针禁止用户访问(3) 立即数不允许传给段寄存器(4) 段寄存器之间不允许传送(5) 两操作数类型不匹配(6) 目的操作数应为[ BP ](7) 源操作数应为[BX+DI](8) 立即数不能作目的操作数2.3lea bx,table ;获取table的首地址,BX=200Hmov al,8 ;传送欲转换的数字,AL=8xlat ;转换为格雷码,AL=12H2.4mov ax,8057hpush axmov ax,0f79hpush axpop bx ;bx=0f79hpop [bx] ;DS:[0f79h]=8057h2.6AL=89h CF ZF SF OF PFAL=12h 1 0 0 1 1AL=0afh 0 0 1 0 1AL=0afh 1 0 1 0 1AL=00h 0 1 0 0 1AL=0ffh 0 0 1 0 1AL=00h 0 1 0 0 12.5堆栈是一种按“先进后出”原则存取数据的存储区域。

堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。

2.7W=X+Y+24-Z2.8(1)ADD DX,BX(2)ADD AL,[BX+SI](3)ADD [BX+0B2H],CX(4)ADD WORD PTR [0520H],3412H(5)ADD AL,0A0H2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,Dmov ax,X ;ax=Aimul Y ;dx,ax = A*B (将操作数看作符号数,以下同)mov cx,axmov bx,dx ;bx,ax <-- dx,ax =A*Bmov ax,Z ;ax = Ccwd ;dx,ax =C (扩展符号后为双字)add cx,axadc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+Csub cx,540sbb bx,0 ;bx,cx<-- A*B+C-540mov ax, V ;ax= Dcwd ;dx,ax= D (扩展符号后为双字)sub ax, cxsbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540)idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数2.10;(1)xchg的操作数不能是立即数(2不能对CS直接赋值(3)两个操作数不能都是存储单元(4)堆栈的操作数不能是字节量(5)adc的操作数不能是段寄存器(6)没有确定是字节还是字操作(7)in不支持超过FFH的直接寻址(8)out只能以AL/AX为源操作数第二章(02)2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

INT 指令

INT 指令

很多初学汇编语言的同学可能会对INT 21H这条指令感到困惑,不知道是什么意思,下面就以一段简单的程序为大家讲解:例如:需要键盘输入,并且回显。

AH的值需要查表取得,表在下面指令:MOV AH,01INT 21H通过这样两条指令,输入的字符就会被存储在AL中。

表:DOS系统功能调INT 21HAH 功能调用参数返回参数00 程序终止(同INT 20H) CS=程序段前缀01 键盘输入并回显AL=输入字符02 显示输出DL=输出字符03 异步通迅输入AL=输入数据04 异步通迅输出DL=输出数据05 打印机输出DL=输出字符06 直接控制台I/O DL=FF(输入)DL=字符(输出)AL=输入字符07 键盘输入(无回显) AL=输入字符08 键盘输入(无回显)检测Ctrl-BreakAL=输入字符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=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=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首地址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 写成功=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=版本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=错误码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 写文件或设备DS: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 置状态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=错误码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=文件代号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地址。

汇编语言入门教程

汇编语言入门教程

汇编语言入门教程2007-04—29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃.所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。

某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。

为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……).但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程.大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解)因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提)CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片.一种汇编语言只能用于特定的CPU。

也就是说,不同的CPU 其汇编语言的指令语法亦不相同。

个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。

后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。

为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳.本文所提均为8086汇编语言。

寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。

用途:1。

汇编语言入门教程

汇编语言入门教程

汇编语言入门教程2007-04-29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。

所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK 出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。

某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。

为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。

但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。

大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解)因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提)CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。

一种汇编语言只能用于特定的CPU。

也就是说,不同的CPU其汇编语言的指令语法亦不相同。

个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。

后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。

为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。

本文所提均为8086汇编语言。

寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。

用途:1.可将寄存器内的数据执行算术及逻辑运算。

汇编语言程序设计(第四版)第4章【课后答案】【精选】

汇编语言程序设计(第四版)第4章【课后答案】【精选】

汇编语言程序设计 第四版【课后习题答案】--囮裑為檤第4章 基本汇编语言程序设计〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。

〔解答〕思路: 首先由最高位字节向次低位字节传送……次低位字节向最低位字节传送(共7次);再判最高位字节符号位,如为0,送00h 到最高位字节;如为1,送ffh 到最高位字节。

传送可参考例题4.2,不过应从第一号字节送第零号字节,……最高位字节向次低位字节传送;也可以用循环来完成: .model small .stack 256 .dataqvar dq 1234567887654321h .code .startup mov cx,7 mov si,1again: mov al, byte ptr qvar[si] mov byte ptr qvar[si-1],al inc siloop again test al,80h jz ezzmov bl,0ffh jmp done ezz: mov bl,0done: mov byte ptr qvar[7],bl .exit 0 end〔习题4.2〕例题4.2如果要求算术左移7位,如何用移位指令实现。

〔解答〕思路:可设计外循环体为8个字节左移一次,方法是:最低位字节算术左移一次, 次低位字节至最高位字节依次带 CF 位循环左移一次(内循环共8次),外循环体控制执行7次即可。

.model small .stack 256 .dataqvar dq 1234567887654321h4 11 201628.code.startupmov dx, 7 ;外循环次数mov ax, byte ptr qvar[0] ;最低位字节送axlpp: shl ax, 1 ;最低位字节左移一次,其d7移入CF 位 mov si, 1mov cx, 7 ;内循环次数again: rcl byte ptr qvar[si], 1 ;高位字节依次左移 P50 inc siloop again dec dx jnz lpp .exit 0 .end〔习题4.3〕将AX 寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL 、BL 、CL 和DL 寄存器中。

汇编语言模拟题答案-(3)

汇编语言模拟题答案-(3)

第3章自测练习一、选择题(四选一)1.表示一条处理器指令所在存储单元的符号地址是 C。

A变量 B常量 C标号 D偏移量2.汇编语言中的变量有多种类型属性,但错误的类型是B 。

A字节型byte B字符型charC字型word D双字型dword3.执行mov bx,seg var指令,BX得到变量var的B 。

A物理地址 B段地址 C偏移地址 D内容4.MASM语句中,采用C 分隔标号和指令。

A逗号 B分号 C冒号 D空格5.欲设定从偏移地址100H开始安排程序,可使用A 伪指令。

Aorg 100h Bstart=100hCstart db 100h Dstart equ 100h6.与“mov bx,offset var”指令等效的指令是 D 。

A movbx,varB 1dsbx,varCles bx,var D1ea bx,var.7.下条语句buf db l0 dup(3 dup(?,10),3,10)汇编后,变量buf占有的存储单元字节数是B 。

A 100B 80C 40D 208.数据定义语句“numl dw(12 or 6 and 2) ge 0eh”,定义的num1单元的内容是 B。

A 0B 0FFFFHC 1D 0FFH9.要求将A、B两个字符的ASCII码41H和42H顺序存放在连续两个字节存储单元中,可选用的语句是 A 。

A db`AB'B dw `AB'C db 0ABHD dw 0ABH10.在汇编语言程序中,对END语句叙述正确的是C 。

AEND语句是一可执行语句BEND语句表示程序执行到此结束CEND语句表示源程序到此结束DEND语句在汇编后要产生机器码11.下面的数据传送指令中,错误的操作是D。

Amov ss:[bx+di],byte ptr 10h Bmov dx,l000hCmov word ptr[bx],1000h Dmov ds,2000h12.下面指令执行后,变量dab中的内容是C 。

汇编语言程序设计考试题型说明(老师上课讲的题)

汇编语言程序设计考试题型说明(老师上课讲的题)

汇编语言程序设计考试题型说明一、填空题(20%)二、选择题(15% )三、是非判断题(10%)四、简答题(10%)五、指出语句错误(8%)六、程序分析题(12%)七、程序填空题(10%)八、程序设计题(15%)•汇编语言题型讲解一、填空题例1.任何变量都有段地址、偏移地址、类型三种属性。

例2.“VAR DB 5 DUP(8,2 DUP(5))”语句汇编应分配15个字节单元。

例3. 请用一条指令实现如下操作:(1)将AX中划‘X’的位清0(2)将BL寄存器的低四位取反:X O R B L,0F H。

例 4.假设存储器中各字节单元的内容是:(06925H)=12H,(06926H)=45H,(06927H)=78H,那么字单元(06925H)= 4512H ,字单元(06926H)= 7845H。

例5.语句DA2 DW ‘AB’ 汇编后在DA2字节单元中存放42H,在DA2+1字节单元中存放41H。

例6.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,[SI+COUNT]中,源操作数的有效地址EA为20A8H,其物理地址为11488H。

例7.R E P、R E P Z、R E P N Z。

例8. DB指令以字节为单位分配存贮;DW指令以字为单位分配存贮。

故如下数据定义:V1 DB 4 DUP (2), 2COUNT EQU 10V2 DW COUNT DUP(?)为变量V1分配5个字节存贮区;为变量V2分配20个字节存贮区。

例9.在执行串处理指令时,为了使地址自动增量,应执行指令:C L D,该指令使得方向标志位例10.中断程序的入口地址称为中断向量IBM PC机中,共有256个中断源,每个中断向量占内存中的中断向量表4个字节。

例11.一个字存入堆栈时,堆栈指针SP -2修正;从堆栈中取出一个字时,SP +2修正,SP 总是指向栈顶单元。

例12.下面是对DOS功能调用方法的简单说明:(1)在AH寄存器中存入所要调用功能的功能号;(2)根据所调用功能的规定设置入口参数;(3)用I N T21H(4)相应的子程序运行完后,可按规定取得出口参数。

汇编INT 21H的作用

汇编INT 21H的作用

汇编语言\INT 21H - 以现在的努力程度之低,谈狗屁
的未来,屎的梦想!!! - 博客频道 .html
每一个功能都有一个编号其中在显示器显示输出这个功能的编号是09movah09h这个就表示把09这个编号放入ahint21h表示代码运行到这里需要dos系统工作了做什么工作呢
指令自动转入中断子程序的入口
以8086 CPU的汇编为例,输出一个字符串,就要使用
如下指令: MOV AH,09H INT 21ቤተ መጻሕፍቲ ባይዱ 假如要在显示器显示输入一个字符串,实际上就是要 调用DOS系统的功能来实现。 当然,DOS是包括多种功能,如接受用户输入,显示 输出,输出到打印机打印等...... 每一个功能,都有一个编号,其中,在“显示器显示 输出”这个功能的编号是09
MOV AH,09H
这个就表示把09这个编号放入AH

INT 21H 表示 代码运行到这里,需要DOS系统工作了,
做什么工作呢?DOS系统会查找AH里面是什么,上例 是09, DOS系统就知道要做什么工作了。
所以,可以这样理解,INT 21H是命令系统工作的意思,
至于做什么工作,就看你往AH里面放了什么代码。
ASSUME CS:CODES,DS:DATAS
DATAS SEGMENT STRING DB 'Hello World!','$' DATAS ENDS CODES SEGMENT BEGIN: MOV AX,DATAS MOV DS,AX LEA DX,STRING MOV AH,09H INT 21H MOV AH,4CH ; 4CH编号表示结束DOS的功能,再返回本程序 INT 21H CODES ENDS END BEGIN

第4章 INT10-21及宏指令资料

第4章  INT10-21及宏指令资料

3
第4章 INT 21H和INT 10H的编程及宏指令
应用程序与DOS、BIOS之间的 关系: BIOS 直接建立在硬件的基 础上。
DOS建立在BIOS的基础上, 通过BIOS控制硬件。
2018年10月22日
4
第4章 INT 21H和INT 10H的编程及宏指令
本章内容: 4.1 BIOS中断INT 10H编程 4.2 DOS中断INT 21H编程 4.3 宏指令
参看X86-P112.ASM
2018年10月22日
8
4.1
BIOS中断INT 10H的编程
3.INT 10H的02H功能:设置光标 输入参数: AH=02 ;设置光标 BH=00 ;0页 DH=15 ;行值 DL=25 ;列值
设置光标代码片段:
mov mov mov mov int
ah, 2 bh, 0 dl,25 dh, 15 10h
6
4.1
BIOS中断INT 10H的编程
1.文本模式下的显示器屏幕
文本方式下,x86 PC的显示器屏幕被设置为: 25行*80列 下图分别以十进制和十六进制两种形式示出了屏 幕上每个位置的坐标。
图4.1
2018年10月22日
光标的位置(行,列)
7
4.1
BIOS中断INT 0H的编程
2.使用INT 10H的06H功能 清除屏幕
2.会用DOS中断INT
21H编程
灵活的操作屏幕 操作键盘:单字符输入,字符串输入
3.会用宏指令
学会怎样使用宏,包括:宏指令的定义、调用和展开。
2018年10月22日
2
第4章 INT 21H和INT 10H的编程及宏指令
概述:

汇编语言 基本指令

汇编语言 基本指令

①输入指令
将外设数据传送给 将外设数据传送给CPU内的 内的AL/AX 内的
IN 指令 一般格式 IN AL,n ; , IN AX,n ; , IN AL,DX ; , IN AX,DX ; , I/O端口输入数据至 端口输入数据至AL或AX. 功 能 从I/O端口输入数据至AL或AX. 输入指令允许把一个字节或一个字由一个输入端口传 送到AL或 中 若端口地址超过255时,则必须用 送到 或AX中.若端口地址超过 时 则必须用DX 保存端口地址,这样用DX作端口寻址最多可寻找 作端口寻址最多可寻找64K 保存端口地址,这样用 作端口寻址最多可寻找 个端口. 个端口.
常用伪指令(补充) 四 常用伪指令(补充)
data segment BUF1 dw 15H,20H,30H,50H,80H BUF2 dw 10 DUP(?) data ends DB和DW也可以定义一组内存空间 相当于一个数组, DB和DW也可以定义一组内存空间,相当于一个数组, 也可以定义一组内存空间, 变量名指向第一个元素的地址. 变量名指向第一个元素的地址. 如 MOV AX,BUF1 MOV BX,BUF1+4 执行后 (AX)=15H,(BX)=30H 因为是字类型所以每后一个元 素+2. .
显示字符串( 号调用 号调用) ⑸显示字符串(9号调用) LEA DX,待显示字符串首偏移地址 , MOV AH,9 , INT 21H; 将当前数据区中以 ' $ ' ; 将当前数据区中以' 结尾的字符串显示 字符串输入( (号调用 ⑹字符串输入SP 10号调用) ( 号调用) SP)- )-2 )- LEA DX,缓冲区首偏移地址 , MOV AH,10 , INT 21H ;从键盘上输入一字符串 到用户定义的输入缓冲区中,并显示. 到用户定义的输入缓冲区中,并显示.

汇编常用的INT21H系统调用

汇编常用的INT21H系统调用

汇编常用的INT21H系统调用系统功能调用——由DOS提供的一组实现特殊功能的子程序供程序员在编写自己的程序时调用,以减轻编程的工作量。

分两种,DOS系统功能调用和BIOS终端调用。

汇编语言中DOS系统功能调用有很多,涉及屏幕显示、文件管理、I/O管理等等,每个子程序都有一个功能号,所有的功能调用的格式都是一致的。

调用的步骤大致如下:(1)系统功能号送到寄存器AH中;(2)入口参数送到指定的寄存器中;(3)用INT 21H指令执行功能调用;(4)根据出口参数分析功能调用执行情况。

下面归纳5个在汇编中常用的INT 21H系统功能调用。

功能:返回DOS入口参数:无调用方法MOV AH,4CHINT 21H通过4CH功能调用能够结束当前正在执行的程序,返回DOS系功能:从键盘输入一个字符到AL中,AL中为该字符的ASCII码。

入口参数:无调用方法MOV AH,1INT 21H执行完上面的系统调用后,出现提示输入光标,从键盘输入一个字符并保存其ASIIC码到AL寄存器中。

<例子>:交互式程序中用户按下数字键1,2,3,程序转入相应的服务子程序,若按下其他键则会继续等待。

代码:[plain] view plain copyprint?1.KEY: MOV AH,12.INT 21H ;系统等待输入一个字符3.CMP AL,'1'4.JE ONE ;如果输入字符为1则跳到标识符ONE处执行5.CMP AL,'2'6.JE TWO ;如上解析7.CMP AL,'3'8.JE THREE9.JMP KEY ;如果不是1、2、3则继续输入字符10.ONE: ......11.TWO: ......12.THREE: ......3、输出显示一个字符(AH=2)功能:输出DL寄存器中的字符到显示器。

入口参数:被输出显示的字符或者字符ASCII码送到DL寄存器中调用方法MOV DL,字符码MOV AH,2INT 21H执行完上面的调用后,显示器显示出DL中的字符。

编译语言int 21h

编译语言int 21h

编译语言int 21hINT 21h是一个非常常见的指令,在基于x86架构的计算机上,它用于进行DOS系统功能调用。

这个指令非常重要,不仅因为它在早期的计算机上被广泛使用,而且因为它仍然在一些特定的环境中使用。

INT 21h的作用是向DOS系统请求一些操作,例如文件读写、键盘输入输出等等。

在这篇文章中,我们将从不同角度来深入探讨INT 21h的使用和工作原理。

首先我们来看一下INT 21h的具体用法。

INT 21h指令的格式如下:```INT 21h```这条指令的作用是将程序控制权交给DOS系统,并执行由寄存器AH中的值来确定的DOS功能。

之后DOS根据开发者的调用,执行相应的操作,并将结果存储在寄存器中,供程序进一步处理。

现在我们来看一下,INT 21h可以完成哪些功能。

DOS系统中提供了许多不同的功能,它们都可以通过INT 21h来访问。

其中一些常见的功能包括:1.文件读写:INT 21h提供了一系列的功能,用于对文件进行读写操作。

通过设置寄存器中的不同的参数,我们可以实现文件的打开、读取、写入、关闭等操作。

这使得开发者可以通过INT 21h来实现对文件的操作,从而简化了编程的过程。

2.键盘输入输出:INT 21h还提供了键盘输入输出的功能。

通过调用相应的函数,我们可以从键盘上读取输入,或者将数据输出到屏幕上。

这使得我们可以轻松地与用户交互,获取输入并显示输出。

3.系统调用:INT 21h还提供了一些系统调用的功能。

例如,我们可以通过INT 21h获取系统的时间和日期,设置DOS的中断向量等等。

这些系统调用提供了一些有用的功能,使得我们能够更好地控制和管理系统。

以上只是INT 21h功能的一部分,实际上,INT 21h提供了很多其他的功能。

通过设置不同的参数和调用不同的函数,我们可以访问到更多的功能。

接下来我们来看一下INT 21h的工作原理。

当我们执行INT 21h 指令时,处理器会将程序的控制权交给DOS系统。

汇编语言程序设计习题-答案

汇编语言程序设计习题-答案

4.1分析执行下列指令序列后的结果:1)MOVAX,1234HMOVBX,00FFHANDAX,BX【答】(AX)=0034H2)MOVAL,0101BANDAL,000111B;(AL)=000101BORAL,11000B;(AL)=110101BXORAL,0011B;(AL)=11010BNOTAL【答】(AL)=00101B3)MOVDL,05HMOVAX,0A00HMOVDS,AXMOVSI,0HMOVCX,0FHAGAIN:INCSICMP[SI],DLLOOPNE AGAINHLT本程序实现了什么功能?【答】在以0A001H开始的15个单元中查找05H。

4)MOVAX,DSEGADDRMOVDS, AXMOVES,AXMOVSI, OFFSET B1ADDRMOVDI,OFFSET B2ADDRMOVCX,NCLDREPMOVSBHLT本程序实现了什么功能?【答】将B1ADDR中N个字节数据传送到B2ADDR开始的15个存储单元。

5)MOVAX, 0HMOVDS,AXMOVES, AXMOVAL,05HMOVDI,0A000HMOVCX,0FHCLDAGAIN:SCASBLOOPNEAGAINHLT本程序实现了什么功能?【答】从地址0A000H开始的15个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数据05H的查找。

4.2阅读程序:1).CLDLEADI,[0100H]MOVCX, 0080HXORAX, AXREPSTOSW本程序实现了什么功能?【答】将DS中起始地址为0100H的128个字节单元清零。

2).MOVAL, 08HSAL,01H;(AL)=000100HMOVBL, ALMOVCL ,02HSAL,CL;(AL)=01000HADDAL,BL;(AL)=0100H本程序实现了什么功能?【答】将AL中的内容乘以10。

4.3试分析下列程序完成什么功能?MOVDX,3F08HMOVAH,0A2HMOVCL,4SHLDX,CL;(DX)=F080HMOVBL,AHSHLBL,CL;(BL)=20HSHRBL,CL;(BL)=02HORDL,BL;(DL)=82H【答】将DX中的低4位数据8H分离出来,将AH中的低4位数据2H分离出来,合并为82H存放在DL。

汇编几个简单指令解释和INT21H调用表

汇编几个简单指令解释和INT21H调用表

ASSUM‎E CS:CODE,DS:DA TA,SS:STACK‎1 ASSUM‎E是伪指令‎,本身不产生‎代码,所以必要的‎初始化还是‎要的,比如DA T ‎A→DS,CODE→CS,STACK‎→SS2 ASSUM‎E的作用是‎告诉编译器‎到哪个se‎g去找哪个‎变量(传说中可以‎节约时间)3 ASSUM‎E后面的各‎种预定传说‎是可以省略‎的,只有CS:CODE不‎可省略,否则会报错‎4 CODE、DATA、STACK‎是自己定义‎的段名,而CS、DS、SS是实际‎的寄存器地‎址MOV SP,OFFSE‎T TOP = LEA SP,TOP (OFFSE‎T是偏移地‎址的意思)'$'是INT 21H指令‎中显示字符‎串指令的结‎束符INT是中‎断调用指令‎,I NT 21H;21H是中‎断入口,根据芯片不‎同含义不同‎,功能是调用‎D OS函数‎(根据AH值‎判断调用D‎OS执行何‎种操作)START‎END START‎END是关‎键词,START‎是标示符,所以可修改‎,E ND xxx表示‎x x x程序‎结束DOS系统‎功能调用表‎(I NT 21H)AH 功能调用参数返回参数00 程序终止(同INT 20H) CS=程序段前缀‎01 键盘输入并‎回显AL=输入字符02 显示输出DL=输出字符03 异步通迅输‎入AL=输入数据04 异步通迅输‎出DL=输出数据05 打印机输出‎DL=输出字符06 直接控制台‎I/ODL=FF(输入)DL=字符(输出)AL=输入字符07 键盘输入(无回显) AL=输入字符08 键盘输入(无回显)检测Ctr‎l-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=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=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首地‎址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写成功‎=01盘满=02缓冲区‎溢出29 分析文件名‎ES:DI=FCB首地‎址DS:SI=ASCII‎Z串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=版本31 结束并驻留‎AL=返回码DX=驻留区大小‎33 Ctrl-Break‎检测AL=00取状态‎=01置状态‎(DL)DL=00关闭检‎测=01打开检‎测DL=00关闭C‎t rl-Break‎检测=01打开C‎t rl-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=ASCII‎Z串地址AX=错误码3A 删除子目录‎(RMDIR‎) DS:DX=ASCII‎Z串地址AX=错误码3B 改变当前目‎录(CHDIR‎) DS:DX=ASCII‎Z串地址AX=错误码3C 建立文件DS:DX=ASCII‎Z串地址CX=文件属性成功:AX=文件代号错误:AX=错误码3D 打开文件DS:DX=ASCII‎Z串地址AL=0读=1写=3读/写成功:AX=文件代号错误:AX=错误码3E 关闭文件BX=文件代号失败:AX=错误码3F 读文件或设‎备DS:DX=数据缓冲区‎地址BX=文件代号CX=读取的字节‎数读成功:AX=实际读入的‎字节数AX=0已到文件‎尾读出错:AX=错误码40 写文件或设‎备DS:DX=数据缓冲区‎地址BX=文件代号CX=写入的字节‎数写成功:AX=实际写入的‎字节数写出错:AX=错误码41 删除文件DS:DX=ASCII‎Z串地址成功:AX=00出错:AX=错误码(2,5)42 移动文件指‎针BX=文件代号CX:DX=位移量AL=移动方式(0:从文件头绝‎对位移,1:从当前位置‎相对移动,2:从文件尾绝‎对位移)成功:DX:AX=新文件指针‎位置出错:AX=错误码43 置/取文件属性‎DS:DX=ASCII‎Z串地址AL=0取文件属‎性AL=1置文件属‎性CX=文件属性成功:CX=文件属性失败:CX=错误码44 设备文件I‎/O控制BX=文件代号AL=0取状态=1置状态D‎X=2读数据=3写数据=6取输入状‎态=7取输出状‎态DX=设备信息45 复制文件代‎号BX=文件代号1‎成功:AX=文件代号2‎失败:AX=错误码46 人工复制文‎件代号BX=文件代号1‎CX=文件代号2‎失败:AX=错误码47 取当前目录‎路径名DL=驱动器号DS:SI=ASCII‎Z串地址(DS:SI)=ASCII‎Z串失败:AX=出错码48 分配内存空‎间BX=申请内存容‎量成功:AX=分配内存首‎地失败:BX=最大可用内‎存49 释放内容空‎间ES=内存起始段‎地址失败:AX=错误码4A 调整已分配‎的存储块ES=原内存起始‎地址BX=再申请的容‎量失败:BX=最大可用空‎间AX=错误码4B 装配/执行程序DS:DX=ASCII‎Z串地址ES:BX=参数区首地‎址AL=0装入执行‎AL=3装入不执‎行失败:AX=错误码4C 带返回码结‎束AL=返回码4D 取返回代码‎AX=返回代码4E 查找第一个‎匹配文件DS:DX=ASCII‎Z串地址CX=属性AX=出错代码(02,18)4F 查找下一个‎匹配文件DS:DX=ASCII‎Z串地址(文件名中带‎有?或*)AX=出错代码(18)54 取盘自动读‎写标志AL=当前标志值‎56 文件改名DS:DX=ASCII‎Z串(旧)ES:DI=ASCII‎Z串(新)AX=出错码(03,05,17)57 置/取文件日期‎和时间BX=文件代号DX:CX=日期和时间‎AL=0读取AL=1设置(DX:CX)失败:AX=错误码58 取/置分配策略‎码AL=0取码AL=1置码(BX)成功:AX=策略码失败:AX=错误码59 取扩充错误‎码AX=扩充错误码‎BH=错误类型BL=建议的操作‎CH=错误场所5A 建立临时文‎件CX=文件属性DS:DX=ASCII‎Z串地址成功:AX=文件代号失败:AX=错误码5B 建立新文件‎CX=文件属性DS:DX=ASCII‎Z串地址成功:AX=文件代号失败:AX=错误码5C 控制文件存‎取AL=00封锁=01开启BX=文件代号CX:DX=文件位移SI:DI=文件长度失败:AX=错误码62 取程序段前‎缀BX=PSP地址‎。

微机原理int_21h和int_16h调用

微机原理int_21h和int_16h调用

INT 10H 是由BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在INT 10H 内。

使用INT 10H 中断服务程序时,先指定AH 寄存器为下表编号其中之一,该编号表示欲调用的功用,而其他寄存器的详细说明,参考表后文字,当一切设定好之后再调用INT 10H。

底下是它们的说明:BIOS中断:1、显示服务(Video Service——INT 10H)00H —设置显示器模式01H —设置光标形状02H —设置光标位置03H —读取光标信息04H —读取光笔位置05H —设置显示页06H、07H —初始化或滚屏08H —读光标处的字符及其属性09H —在光标处按指定属性显示字符0AH —在当前光标处显示字符0BH —设置调色板、背景色或边框0CH —写图形象素0DH —读图形象素0EH —在Teletype模式下显示字符0FH —读取显示器模式10H —颜色11H —字体12H —显示器的配置13H —在Teletype模式下显示字符串1AH —读取/设置显示组合编码1BH —读取功能/状态信息1CH —保存/恢复显示器状态(1)、功能00H功能描述:设置显示器模式入口参数:AH=00HAL=显示器模式,见下表所示出口参数:无可用的显示模式如下所列:00H:40×25 16色文本01H:40×25 16色文本02H:80×25 16色文本03H: 80×25 16色文本04H:320×200 4色05H:320×200 4色06H:640×200 2色07H:80×25 2色文本08H:160×200 16色09H:320×200 16色0AH:640×200 4色0BH:保留0CH:保留0DH:320×200 16色0EH:640×200 16色0FH:640×350 2(单色)10H:640×350 4色10H:640×350 16色11H:640×480 2色12H:640×480 16色13H:640×480 256色对于超级VGA显示卡,我们可用AX=4F02H和下列BX的值来设置其显示模式。

微机原理关于21H中断解释

微机原理关于21H中断解释

中断INT 21H :1、字符功能调用类(Character-Oriented Function)01H、07H和08H —从标准输入设备输入字符02H —字符输出03H —辅助设备的输入04H —辅助设备的输出05H —打印输出06H —控制台输入/输出09H —显示字符串0AH —键盘缓冲输入0BH —检测输入状态0CH —清输入缓冲区的输入功能(1)、功能01H、07H和08H功能描述:从标准输入设备(如:键盘)读入一个字符。

该中断在处理过程中将一直处于等待状态直到有字符可读为止。

该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾入口参数:AH=01H,过滤掉控制字符,并回显=07H,不过滤掉控制字符,不回显=08H,过滤掉控制字符,不回显出口参数:AL=输入字符的ASCII码(2)、功能02H功能描述:向标准输出设备(如:屏幕)输出一个字符。

该输出还可被重定向,如果这样做,则将无法判断磁盘是否满入口参数:AH=02HDL=待输出字符的ASCII码出口参数:无(3)、功能03H功能描述:从辅助设备读入一个字符,该辅助设备的缺省值为COM1入口参数:AH=03H出口参数:AL=读入字符的ASCII码(4)、功能04H功能描述:向辅助设备输出一个字符,该辅助设备的缺省值为COM1入口参数:AH=04HDL=待输出字符的ASCII码出口参数:无(5)、功能05H功能描述:向标准的输出设备输出一个字符。

该缺省的输出设备为LPT1端口的打印机,除非用MODE命令来改变入口参数:AH=05HDL=待输出字符的ASCII码出口参数:无(6)、功能06H功能描述:控制台(如:键盘、屏幕)输入/输出。

如果输入/输出操作被重定向,那么,将无法判断文件是否已到文件尾,或磁盘已满入口参数:AH=06H,DL=输入/输出功能选择出口参数:若DL=00H-FEH,则此功能为输出,DL为待输出字符的ASCII码;若DL=0FFH,则此功能为输入,此时:若ZF=1,则无字符可读,否则,AL=读入字符的ASCII码(7)、功能09H功能描述:输出一个字符串到标准输出设备上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
45
复制文件代号
BX=文件代号1
成功:AX=文件代号2
失败:AX=错误码
46
人工复制文件代号
BX=文件代号1
CX=文件代号2
失败:AX=错误码
47
取当前目录路径名
DL=驱动器号
DS:SI=ASCIIZ串地址
(DS:SI)=ASCIIZ串
失败:AX=出错码
48
分配内存空间
BX=申请内存容量
成功:AX=分配内存首地
ES:DI=ASCIIZ串(新)
AX=出错码(03,05,17)
57
置/取文件日期和时间
BX=文件代号
AL=0读取
AL=1设置(DX:CX)
DX:CX=日期和时间
失败:AX=错误码
58
取/置分配策略码
AL=0取码
AL=1置码(BX)
成功:AX=策略码
失败:AX=错误码
59
取扩充错误码
AX=扩充错误码
AL=输入字符
08
键盘输入(无回显)
检测Ctrl-Break
AL=输入字符
09
显示字符串
DS:DX=串地址
'$'结束字符串
0A
键盘输入到缓冲区
DS:DX=缓冲区首地址
(DS:DX)=缓冲区最大字符数
(DS:DX+1)=实际输入的字符数
0B
检验键盘状态
AL=00有输入
AL=FF无输入
0C
清除输入缓冲区并
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秒
成功:DX:AX=新文件指针位置
出错:AX=错误码
43
置/取文件属性
DS:DX=ASCIIZ串地址
AL=0取文件属性
AL=1置文件属性
CX=文件属性
成功:CX=文件属性
失败:CX=错误码
44
设备文件I/O控制
BX=文件代号
AL=0取状态
=1置状态DX
=2读数据
=3写数据
=6取输入状态
=7取输出状态
DX=设备信息
BH=错误类型
BL=建议的操作
CH=错误场所
5A
建立临时文件
CX=文件属性
DS:DX=ASCIIZ串地址
成功:AX=文件代号
失败:AX=错误码
5B
建立新文件
CX=文件属性
DS:DX=ASCIIZ串地址
成功:AX=文件代号
失败:AX=错误码
5C
控制文件存取
AL=00封锁
=01开启
BX=文件代号
CX:DX=文件位移
请求指定的输入功能
AL=输入功能号
(1,6,7,8,A)
0D
磁盘复位
清除文件缓冲区
0E
指定当前缺省的磁盘驱动器
DL=驱动器号0=A,1=B,...
AL=驱动器数
0F
打开文件
DS:DX=FCB首地址
AL=00文件找到
AL=FF文件未找到
10
关闭文件
DS:DX=FCB首地址
AL=00目录修改成功
AL=FF目录中未找到文件
DL=00关闭Ctrl-Break检测
=01打开Ctrl-Break检测
35
取中断向量
AL=中断类型
ES:BX=中断向量
36
取空闲磁盘空间
DL=驱动器号
0=缺省,1=A,2=B,...
成功:AX=每簇扇区数
BX=有效簇数
CX=每扇区字节数
DX=总簇数
失败:AX=FFFF
38
置/取国家信息
DS:DX=信息区首地址
BX=国家码(国际电话前缀码)
AX=错误码
39
建立子目录(MKDIR)
DS:DX=ASCIIZ串地址
AX=错误码
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已到文件尾
很多初学汇编语言的同学可能会对INT 21H这条指令感到困惑,不知道是什么意思,下面就以一段简单的程序为大家讲解:
例如:需要键盘输入,并且回显。
AH的值需要查表取得,表在下面
指令:MOV AH,01
INT 21H
通过这样两条指令,输入的字符就会被存储在AL中。
表:DOS系统功能调INT 21H
AH
功能
读出错:AX=错误码
40
写文件或设备
DS:DX=数据缓冲区地址
BX=文件代号
CX=写入的字节数
写成功:
AX=实际写入的字节数
写出错:AX=错误码
41
删除文件
DS:DX=ASCIIZ串地址
成功:AX=00
出错:AX=错误码(2,5)
42
移动文件指针
BX=文件代号
CX:DX=位移量
AL=移动方式(0:从文件头绝对位移,1:从当前位置相对移动,2:从文件尾绝对位移)
AL=中断类型号
26
建立程序段前缀
DX=新的程序段前缀
27
随机分块读
DS:DX=FCB首地址
CX=记录数
AL=00读成功
=01文件结束
=02缓冲区太小,传输结束
=03缓冲区不满
28
随机分块写
DS:DX=FCB首地址
CX=记录数
AL=00写成功
=01盘满
=02缓冲区溢出
29
分析文件名
ES:DI=FCB首地址
SI:DI=文件长度
失败:AX=错误码
62
取程序段前缀
BX=PSP地址
带返回码结束
AL=返回码
4D
取返回代码
AX=返回代码
4E
查找第一个匹配文件
DS:DX=ASCIIZ串地址
CX=属性
AX=出错代码(02,18)
4F
查找下一个匹配文件
DS:DX=ASCIIZ串地址
(文件名中带有?或*)
AX=出错代码(18)
54
取盘自动读写标志
AL=当前标志值
56
文件改名
DS:DX=ASCIIZ串(旧)
=02 DTA空间不够
=03文件结束,记录不完整
15
顺AL=00写成功
=01盘满
=02 DTA空间不够
16
建文件
DS:DX=FCB首地址
AL=00建立成功
=FF无磁盘空间
17
文件改名
DS:DX=FCB首地址
(DS:DX+1)=旧文件名
(DS:DX+17)=新文件名
AL=00成功
失败:BX=最大可用内存
49
释放内容空间
ES=内存起始段地址
失败:AX=错误码
4A
调整已分配的存储块
ES=原内存起始地址
BX=再申请的容量
失败:BX=最大可用空间
AX=错误码
4B
装配/执行程序
DS:DX=ASCIIZ串地址
ES:BX=参数区首地址
AL=0装入执行
AL=3装入不执行
失败:AX=错误码
4C
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=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首地址
调用参数
返回参数
00
程序终止(同INT 20H)
CS=程序段前缀
01
键盘输入并回显
AL=输入字符
02
显示输出
DL=输出字符
03
异步通迅输入
相关文档
最新文档