📄 新建 文本文档 (2).txt
字号:
│ │ │ │
│ │ cflag │ │
│ │ │ │
│ ├───────┤ │
│ │ │ │
│ │ flags │ │
│ │ │ │
└ └───────┴──────┘
│ x 两个结构变量 h │
└── 共享同一存储域 ──┘
其中字段flags对应于标志寄存器。字段cflag仅对应于进位标志位,函数在调用时不用该字段,只在返回时设置这个字段,因为许多BIOS服务都是通过进位标置为0还是1来表示成功还是失败。
注2:需先定义 struct SREGS 段寄存器指针名;
结构SREGS定义如下
struct SREGS {unsigned int es,cs,ss,ds}
函数只用了该结构中的段寄存器DS和ES。调用时根据它们的值设置DS和ES,同时把DS和ES原来的值保存在这个结构中,返回时再恢复DS和ES为原来的值,这就允许程序使用远指针或大数据编译模式。
该函数置全局变量_doserrno等于寄存器AX中的值,其返回值也等于AX中的值。
注3:向寄存器传递入口信息
输入指针名.x.寄存器名=要赋的值(入口信息);
注4:调用int86x后得接受出口信息
变量名=输出指针名.x.寄存器名
intdos()通用dos中断接口函数
原形:int intdos(inregs,outregs)
union REGS *inregs;//调用时的各寄存器的值
union REGS *outregs;//返回寄存器的值
功能:产生DOS软中断
注意:如果需要功能号,则装入AH;如果需要子功能号,则装入AL。
头文件:dos.h
intdosx()通用dos中断接口函数
原形:int intdosx(inregs,outregs,segregs)
union REGS *inregs;调用时的各寄存器的值
union REGS *outregs;返回寄存器的值
struct SREGS *seregs;调用时的段寄存器的值(还设置返回时的值)
功能:产生DOS软中断
头文件:dos.h
intr()执行8086软中断函数(改变软中断接口函数)
原形:void intr(int intno,struct REGPACK *preg)
调用方式:intr(中断号,&结构变量名)
注1:结构REGPACK定义如下
struct REGPACK
{
unsigned r_ax,r_bx,r_cx,r_dx;
unsigned r_bp,r_si,r_di,r_ds,r_es,r_flag;}
注2:使用时先定义一个结构变量
struct REGPACK 结构变量名;
注3:入口和出口用同一个结构变量来传递寄存器的值。
结构变量名.r_ax=要赋的值;
......
intr(中断号,&结构变量名);
某变量=结构变量名.r_ax;
头文件:dos.h
itoa()把整形数转换为字符串的函数
原形:char *itoa(int value,char *string,int radix)
功能:把value的值转换为以NULL结束的字符串,并把结果存在string中。radix是转换的基数值,在2到36之间。分配给string的空间必须可容纳返回的所有字节(最多17字节)。
返回值:指向string的指针
头文件:stdlib.h
kbhit()检查当前按下的键的函数
原形:int kbhit(void)
功能:检查按下的键是否有效,若有效则可用getch()或getche()读取。
返回值:如果按键有效,返回一非零值,否则返回0。
头文件:conio.h
keep()驻留并退出函数
原形:void keep(unsigned char status,unsigned size)
功能:用于安装一个TSR程序(使用DOS功能调用0x31)。出口状态设置为在status中的值,程序占用存储空间为size,并释放内存的其余部分。
头文件:dos.h
log()
原形∶double log(double num)
功能∶求num的自然对数值
头文件∶math.h
log10()
原形∶double log10(double num)
功能∶求num以10为底的对数值
头文件∶math.h
_lrotl()将一个无符号长整形数左循环移位的函数
原形:unsigned long _lrotl(unsigned long value,int count)
功能:将value向左循环移动count位。
返回值:将value向左循环移动count位后的值。
头文件:stdlib.h
_lrotr()将一个无符号长整形数右循环移位的函数
原形:unsigned long _lrotr(unsigned long value,int count)
功能:将value向右循环移动count位。
返回值:将value向右循环移动count位后的值。
头文件:stdlib.h
lseek()移动文件指针函数
原形:long lseek(int handle,long offset,int fromwhere)
handle=open()函数的返回值(文件句柄);
fromwhere=文件位置
(SEEK_SET(0)从文件头位置;SEEK_CUR(1)从当前文件指针位置;SEEK_END(2)从文件结尾位置)
功能:把文件指针移动到fromwhere所指的地址加上offset新位置的偏移上。
头文件:io.h
返回值:指针新位置的偏移量(相对于文件开始处),出错时返回-1L。
ltoa()把长整形数转换为字符串的函数
原形:char *ltoa(long value,char *string,int radix)
功能:把value的值转换为以NULL结束的字符串,并把结果存在string中。radix是转换的基数值,在2到36之间。分配给string的空间必须可容纳返回的所有字节(最多33字节)。
返回值:指向string的指针
头文件:stdlib.h
malloc()分配内存函数
原形:void *malloc(size_t size)
功能:从堆中分配大小为size字节的块。win32也适用。
返回值:返回新分配内存的地址,若无足够内存,返回NULL。
头文件:alloc.h、stdlib.h
mkdir()创建目录函数
原形:int mkdir(const char *path)
功能:按给定的路径建立一个新的目录
头文件:dir.h
返回值:0(成功);-1(失败)
mktemp()建立一个唯一的文件名的函数
原形:char *mktemp(char *template)
功能:使用一个唯一的文件名来替换字符串template,并返回template。
头文件:dir.h
MK_FP()设置一个远指针的宏
原形:void far *MK_FP(unsigned seg,unsigned ofs)
功能:通过段值(seg)和偏移量(ofs)建立一个远指针
返回值:远指针
头文件:dos.h
movedata()拷贝数据函数
原形:void movedata(unsigned srcseg,unsigned srcoff,unsigned dstseg,unsigned dstoff,size_t n)
功能:从原地址(srcseg:srcoff)拷贝n个字节的数据到目标地址(dstseg:dstoff)。
头文件:mem.h、string.h
_open()打开一个文件进行读写的函数
原形:int _open(path,oflags)
char *path;//已建立文件的路径名
int oflags;//方式
功能:打开由path指定的文件,返回文件的句柄
返回值:0(正常结束);-1(错误)
头文件:fcntl.h、io.h
open()打开文件进行读写的函数
原形:int open(const char *path,int access[,unsigned mode])
使用方法:文件句柄=open("文件名",打开模式|打开模式);
功能:打开path指定的文件,根据access指定的模式值读写。
access模式:
O_RDONLY 以只读方式打开
O_WRONLY 以只写方式打开
O_RDOWR 以读写方式打开
以上标志只能使用一个,以下可以用|组合使用
O_NDELAY
O_APPEND 若置位,每次写操作前都使文件指针指到文件末尾
O_CREAT 若文件不存在则创建
O_TRUNC 若文件已存在,则将文件长度截为0
O_EXCL 只和O_CREAT一起使用,若文件已经存在,返回错误代码
O_BINARY 以二进制方式打开
O_TEXT 以文本方式打开
如果使用了O_CREAT方式,则需要提供参数mode
(S_IWRITE可写;S_IREAD可读;S_IREAD|S_IWRITE可读写)
返回值:文件句柄(成功时);-1(失败时)。
成功时,文件指针指向文件头。
头文件:fcntl.h、io.h
outport()输出一个字到端口中的函数
原形:void outport(int portid,int value)
调用方式:outport(0x端口号,要输出的字);
功能:往指定端口地址输出一个字。
头文件:dos.h
outportb()输出一个字节到端口中的函数
原形:void outportb(int portid,unsigned char value)
调用方式:outportb(0x端口号,要输出的字节);
功能:往指定端口地址输出一个字节。
附:PC I/O地址分配
PC只用了10位地址线(A0-A9)进行译码,其寻址的范围为0H-3FFH,共有1024个I/O地址。这1024个地址中前半段(A9=0,范围为0H-1FFH)是属于主机板I/O译码,后半段(A9=1,范围为200H-3FFH)则是用来扩展插槽上的I/O译码用。
I/O端口功能表
———————————————————————————
I/O地址 功能、用途
———————————————————————————
0 DMA通道0,内存地址寄存器(DMA控制器1(8237))
1 DMA通道0, 传输计数寄存器
2 DMA通道1,内存地址寄存器
3 DMA通道1, 传输计数寄存器
4 DMA通道2,内存地址寄存器
5 DMA通道2, 传输计数寄存器
6 DMA通道3,内存地址寄存器
7 DMA通道3, 传输计数寄存器
8 DMA通道0-3的状态寄存器
AH DMA通道0-3的屏蔽寄存器
BH DMA通道0-3的方式寄存器
CH DMA清除字节指针
DH DMA主清除字节
EH DMA通道0-3的清屏蔽寄存器
FH DMA通道0-3的写屏蔽寄存器
19H DMA起始寄存器
20H-3FH 可编程中断控制器1(8259)使用
40H 可编程中断计时器(8253)使用,读/写计数器0
41H 可编程中断计时器寄存器
42H 可编程中断计时器杂项寄存器
43H 可编程中断计时器,控制字寄存器
44H 可编程中断计时器,杂项寄存器(AT)
47H 可编程中断计时器,计数器0的控制字寄存器
48H-5FH 可编程中断计时器使用
60H-61H 键盘输入数据缓冲区
61H AT:8042键盘控制寄存器/XT:8255输出寄存器
62H 8255输入寄存器
63H 8255命令方式寄存器
64H 8042键盘输入缓冲区/8042状态
65H-6FH 8255/8042专用
70H CMOS RAM地址寄存器
71H CMOS RAM数据寄存器
80H 生产测试端口
81H DMA通道2,页表地址寄存器
82H DMA通道3,页表地址寄存器
83H DMA通道1,页表地址寄存器
87H DMA通道0,页表地址寄存器
89H DMA通道6,页表地址寄存器
8AH DMA通道7,页表地址寄存器
8BH DMA通道5,页表地址寄存器
8FH DMA通道4,页表地址寄存器
93H-9FH DMA控制器专用
A0H NM1屏蔽寄存器/可编程中断控制器2
A1H 可编程中断控制器2屏蔽
C0H DMA通道0,内存地址寄存器(DMA控制器2(8237))
C2H DMA通道0, 传输计数寄存器
C4H DMA通道1,内存地址寄存器
C6H DMA通道1, 传输计数寄存器
C8H DMA通道2,内存地址寄存器
CAH DMA通道2, 传输计数寄存器
CCH DMA通道3,内存地址寄存器
CEH DMA通道3, 传输计数寄存器
D0H DMA状态寄存器
D2H DMA写请求寄存器
D4H DMA屏蔽寄存器
D6H DMA方式寄存器
D8H DMA清除字节指针
DAH DMA主清
DCH DMA清屏蔽寄存器
DEH DMA写屏蔽寄存器
DFH-EFH 保留
F0H-FFH 协处理器使用
100H-16FH保留
170H 1号硬盘数据寄存器
171H 1号硬盘错误寄存器
172H 1号硬盘数据扇区计数
173H 1号硬盘扇区数
174H 1号硬盘柱面(低字节)
175H 1号硬盘柱面(高字节)
176H 1号硬盘驱动器/磁头寄存器
177H 1号硬盘状态寄存器
1F0H 0号硬盘数据寄存器
1F1H 0号硬盘错误寄存器
1F2H 0号硬盘数据扇区计数
1F3H 0号硬盘扇区数
1F4H 0号硬盘柱面(低字节)
1F5H 0号硬盘柱面(高字节)
1F6H 0号硬盘驱动器/磁头寄存器
1F7H 0号硬盘状态寄存器
1F9H-1FFH保留
200H-20FH游戏控制端口
210H-21FH扩展单元
278H 3号并行口,数据端口
279H 3号并行口,状态端口
27AH 3号并行口,控制端口
2B0H-2DFH保留
2E0H EGA/VGA使用
2E1H GPIP(0号适配器)
2E2H 数据获取(0号适配器)
2E3H 数据获取(1号适配器)
2E4H-2F7H保留
2F8H 2号串行口,发送/保持寄存器(RS232接口卡2)
2F9H 2号串行口,中断有效寄存器
2FAH 2号串行口,中断ID寄存器
2FBH 2号串行口,线控制寄存器
2FCH 2号串行口,调制解调控制寄存器
2FDH 2号串行口,线状态寄存器
2FEH 2号串行口,调制解调状态寄存器
2FFH 保留
300H-31FH原形卡
320H 硬盘适配器寄存器
322H 硬盘适配器控制/状态寄存器
324H 硬盘适配器提示/中断状态寄存器
325H-347H保留
348H-357H DCA3278
366H-36FH PC网络
372H 软盘适配器数据输出/状态寄存器
375H-376H 软盘适配器数据寄存器
377H 软盘适配器数据输入寄存器
378H 2号并行口,数据端口
379H 2号并行口,状态端口
37AH 2号并行口,控制端口
380H-38FH SDLC及BSC通讯
390H-393H Cluster适配器0
3A0H-3AFH BSC通讯
3B0H-3B H MDA视频寄存器
3BCH 1号并行口,数据端口
3BDH 1号并行口,状态端口
3BEH 1号并行口,控制端口
3C0H-3CFH EGA/VGA视频寄存器
3D0H-3D7H CGA视频寄存器
3F0H-3F7H 软盘控制器寄存器
3F8H 1号串行口,发送/保持寄存器(RS232接口卡1)
3F9H 1号串行口,中断有效寄存器
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -