DOS系统功能调用与BIOS中断调用
一、DOS系统功能调用
1、什么是DOS系统功能调用
系统功能调用是DOS为用户提供的常用子程序(80多个),可在汇编语言程序中直接调用。这些子程序的主要功能包括:
(1)设备管理(如键盘、显示器、打印机、磁盘等的管理)
(2)文件管理和目录操作
(3)其他管理(如内存、时间、日期等管理)
这些子程序给用户编程带来很大方便,用户不必了解有关的设备、电路、接口等方面的问题,只需直接调用即可。
2、调用方法
DOS功能调用的子程序已按顺序编号——功能号(00H~68H),其调用方法是:
(1) 功能号→AH
(2) 入口参数→指...



- [fpamc] 不做伸手党 02/28 14:20
- [kyolxs] windows 下的汇编。 不知道什么时候我才有能力看? 继续前行! 共勉! 07/19 21:10
- [1035802659] 谢了 05/05 14:14
- [游客] 收藏了 04/21 16:09
- [游客] 这就是你丫的人机交互 06/11 20:19
- [maxm] 研究研究你这个dtoc 05/22 20:45
- [游客] 强,得赶紧学习追赶了。 04/29 10:30
- [findufo] 收藏了 04/25 15:39
- [lanchong317] 我粘贴了 04/25 13:25
- [loswer] 建议不要看谭浩强的《C语言程序设计》的书,太垃圾了。语言结构不严谨,代码格式乱七八糟 还是看由C语 04/11 18:34
- [wangping198611] 收到了,呵呵,谢谢。 04/01 09:22
- [mouse] [ wangping198611 发表于 2009-03-23 11:43 ] 03/31 10:28
[2009-04-01 16:55] DOS系统功能调用与BIOS中断调用 (转载)
阅读全文 |
评论次数(1) |
浏览次数(2043) |
所属类型(转载和记录的汇编知识)
[2009-03-27 14:07]
汇编指令的英文全称(转载)
汇编指令的英文全称
如果你想写系统软件,两本入门书籍--谭浩强的《C语言程序设计》和王爽的《汇编语言》是必看的。谭老的C语言已相当成熟,王老师的汇编倒有个小缺陷—指令没有英文全称,或许他认为现在学编程的朋友都不记单词,如同新生代作家看不懂英文原著一般。不过我觉得记住指令的英文全称,就不容易搞混,印象会更深刻,所以我把王爽书中出现的英文缩写的全称罗列出来,以便入门的朋友更好地记住它们。
8086CPU提供以下几大类指令。
一、数据传送指令
比如,mov(move)、push、pop、pushf(push flags)、popf(pop flags)、xc...
如果你想写系统软件,两本入门书籍--谭浩强的《C语言程序设计》和王爽的《汇编语言》是必看的。谭老的C语言已相当成熟,王老师的汇编倒有个小缺陷—指令没有英文全称,或许他认为现在学编程的朋友都不记单词,如同新生代作家看不懂英文原著一般。不过我觉得记住指令的英文全称,就不容易搞混,印象会更深刻,所以我把王爽书中出现的英文缩写的全称罗列出来,以便入门的朋友更好地记住它们。
8086CPU提供以下几大类指令。
一、数据传送指令
比如,mov(move)、push、pop、pushf(push flags)、popf(pop flags)、xc...
阅读全文 |
评论次数(9) |
浏览次数(3380) |
所属类型(转载和记录的汇编知识)
[2009-03-27 14:06] 各种寄存器的英文全称
下面是我从网上收集的一些我们常用的寄存器的英文全称和汉语,希望对大家的理解和记忆使用有好处
AH&AL=AX(accumulator):累加寄存器
BH&BL=BX(base):基址寄存器
CH&CL=CX(count):计数寄存器
DH&DL=DX(data):数据寄存器
SP(Stack Pointer):堆栈指针寄存器
BP(Base Pointer):基址指针寄存器
SI(Source Index):源变址寄存器
DI(Destination Index):目的变址寄存器
IP(Instruction Pointer):指令指针寄存器
CS(Cod...
AH&AL=AX(accumulator):累加寄存器
BH&BL=BX(base):基址寄存器
CH&CL=CX(count):计数寄存器
DH&DL=DX(data):数据寄存器
SP(Stack Pointer):堆栈指针寄存器
BP(Base Pointer):基址指针寄存器
SI(Source Index):源变址寄存器
DI(Destination Index):目的变址寄存器
IP(Instruction Pointer):指令指针寄存器
CS(Cod...
阅读全文 |
评论次数(0) |
浏览次数(964) |
所属类型(转载和记录的汇编知识)
[2009-03-24 23:34] 汇编错误集锦
0
Block nesting error
嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无内层的结束语局
1
Extra characters on line
一语句行有多余字符,可能是语句中给出的参数太多
2
Internal error-Register already defined
这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request 表与Microsoft公司联系
3
Unkown type specifer
未知的类型说明符.例如类型字符拼错,把BY...
Block nesting error
嵌套出错.嵌套的过程,段,结构,宏指令或重复块等非正常结束.例如在嵌套语句中有外层的结束语句,而无内层的结束语局
1
Extra characters on line
一语句行有多余字符,可能是语句中给出的参数太多
2
Internal error-Register already defined
这是一个内部错误.如出现该错误,请记下发生错误的条件,并使用Product Assistance Request 表与Microsoft公司联系
3
Unkown type specifer
未知的类型说明符.例如类型字符拼错,把BY...
阅读全文 |
评论次数(1) |
浏览次数(1134) |
所属类型(转载和记录的汇编知识)
[2009-03-23 10:07] 一点点简单的了解
突然对汇编里面的进制开始有点怀疑,于是编制了一个小程序看看,那个在汇编程序中如果我不加上,例如12h,10B的话,是不是编译器按照10进制计算?那么直接在dos窗口下是不是就是直接按照16进制计算的?
程序如下:
assume cs:code
code segment
mov ax,0
mov cx,3
s:
add ax,100
loop s
mov ax,4c00h
int 21h
code ends
end
通过运行发现就是在汇编程序下如果不加以说明H、B,编译器是按照1...
程序如下:
assume cs:code
code segment
mov ax,0
mov cx,3
s:
add ax,100
loop s
mov ax,4c00h
int 21h
code ends
end
通过运行发现就是在汇编程序下如果不加以说明H、B,编译器是按照1...
阅读全文 |
评论次数(2) |
浏览次数(300) |
所属类型(转载和记录的汇编知识)
[2009-03-21 00:42] 关于assume的用法再讨论升级
dos下连编生成的汇编程序有两种,扩展名分别为com和exe。com程序是纯cpu指令和数据,在磁盘上放着的com文件和被加载到内存后内容是一样的,cpu按照IP指示的第一条指令开始执行。com程序只能在一个64K的段中执行,它的代码啊数据啊什么东西全都在这一个64K以内的段中。但是想想,程序功能多了,或需要的处理的数据多了,那这一个段怎么够用啊,于是有了exe文件。exe程序分成好多段,有放代码的,有放数据的,那好这么一个exe程序连编完成了,把它放到内存里运行,你想想这exe程序分了几个段,该用到哪个段时,程序是怎么找它们的地址呢?com文件好说,用哪谁就jmp过去了,反正就在一个64K的...
阅读全文 |
评论次数(0) |
浏览次数(291) |
所属类型(转载和记录的汇编知识)
[2009-03-21 00:42] assume的含义和用法
(1)定义:在数据段中定义的每一个变量标志符其实都代表了一个偏移量(也称为有效地址),这个偏移量与
数据段段值相结合就指向某个内存地址。在程序中使用ASSUME伪指令是用来指明一个默认的段地址。一旦你把某个数据段的段名指定给某个段寄存器(比如ASSUME DS,DATA1),这之后当你使用这个数据段(DATA1)内定义的变量,编译程序就自动把它与这个段寄存器(DS)里的段值(表示一个段地址)结合起来使用。"
(2)例子
比如有
data segment
hxn db 1
data ends
...
数据段段值相结合就指向某个内存地址。在程序中使用ASSUME伪指令是用来指明一个默认的段地址。一旦你把某个数据段的段名指定给某个段寄存器(比如ASSUME DS,DATA1),这之后当你使用这个数据段(DATA1)内定义的变量,编译程序就自动把它与这个段寄存器(DS)里的段值(表示一个段地址)结合起来使用。"
(2)例子
比如有
data segment
hxn db 1
data ends
...
阅读全文 |
评论次数(0) |
浏览次数(313) |
所属类型(转载和记录的汇编知识)
[2009-03-21 00:14] 关于 mov ax,4c00h int 21 h 的解释
mov ax,4c00h
int 21h
21h中断调用是dos操作系统提供的服务功能调用,其中ah中放置功能号,al中放置参数,在上面这个问题中,ah = 4ch是功能号,表示程序运行结束,将控制权归还给操作系统,al = 00h在这里是返回给操作系统的错误代码,00h表示应用程序是正常结束,即没有发生错误。
中断21h调用提供了绝大部分需要使用的功能,例如论坛上“书痕”发的【一个很简单的字符串输入输出方法,可我就是搞不懂,望指教..】的帖中,使用ah = 0ah号功能来输入字符串,使用ah = 09h号功能来输出字符串。不同的功能号,需要的参数是不同的,有些功能号需要若干个参数。...
int 21h
21h中断调用是dos操作系统提供的服务功能调用,其中ah中放置功能号,al中放置参数,在上面这个问题中,ah = 4ch是功能号,表示程序运行结束,将控制权归还给操作系统,al = 00h在这里是返回给操作系统的错误代码,00h表示应用程序是正常结束,即没有发生错误。
中断21h调用提供了绝大部分需要使用的功能,例如论坛上“书痕”发的【一个很简单的字符串输入输出方法,可我就是搞不懂,望指教..】的帖中,使用ah = 0ah号功能来输入字符串,使用ah = 09h号功能来输出字符串。不同的功能号,需要的参数是不同的,有些功能号需要若干个参数。...
阅读全文 |
评论次数(0) |
浏览次数(322) |
所属类型(转载和记录的汇编知识)
[2009-03-20 17:54] 经常成对出现的寄存器(简化)
段寄存器cs-ip,ds-bx,ss-sp
ax为累加寄存器 常常用于运算
bx为基址寄存器 常常和ds成对使用起偏移位移指针作用
cx为计数寄存器 常常用于循环计数
在求地址的时候要注意:段寄存器*16+偏移位移;用16进制简易表示就是段寄存器的位置向左移一个单位与偏移位移相加。
注意栈中的一个元素如果使用dw声明则占有2个字节
32位CPU所含有的寄存器有:
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指...
ax为累加寄存器 常常用于运算
bx为基址寄存器 常常和ds成对使用起偏移位移指针作用
cx为计数寄存器 常常用于循环计数
在求地址的时候要注意:段寄存器*16+偏移位移;用16进制简易表示就是段寄存器的位置向左移一个单位与偏移位移相加。
注意栈中的一个元素如果使用dw声明则占有2个字节
32位CPU所含有的寄存器有:
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指...
阅读全文 |
评论次数(0) |
浏览次数(285) |
所属类型(转载和记录的汇编知识)
[2009-03-19 20:37] 汇编中得到程序的入口地址
比如我有这么个段定义
code segment
code ends
那么在编译阶段是不是code的值是确定的呢?
code的值是加载的时候才确定的,exe程序有所谓的重定位表,该表中记录程序中使用code的地方,在加载时修正。...
code segment
code ends
那么在编译阶段是不是code的值是确定的呢?
code的值是加载的时候才确定的,exe程序有所谓的重定位表,该表中记录程序中使用code的地方,在加载时修正。...
阅读全文 |
评论次数(1) |
浏览次数(290) |
所属类型(转载和记录的汇编知识)