📄 dos.part2.h
字号:
@函数名称: inport
函数原型: int inport(int port)
函数功能: 返回从指定的I/O端口读入一个字(16位数)
函数返回: 读入的字数值
参数说明: port-I/O端口地址
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
int main()
{
int result;
int port=0;
result=inport(port);
printf("Word read from port %d=0x%X",port,result);
return 0;
}
@函数名称: inportb
函数原型: int inportb(int port)
函数功能: 返回从指定的I/O端口读入一个字节(8位数))
函数返回: 读入的字数值
参数说明: port-I/O端口地址
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
int main()
{
int result;
int port=0;
result=inportb(port);
printf("Word read from port %d=0x%X",port,result);
return 0;
}
@函数名称: outport
函数原型: void outport(int port, int value)
函数功能: 向port地址的接口输出value
函数返回:
参数说明: port-端口地址,value-要输出的16位数
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
int main()
{
int value=64;
int port=0;
outportb(port,value);
printf("Value %d sent to port number %d",value,port);
return 0;
}
@函数名称: outportb
函数原型: void outportb(unsigned char port, unsigned char value)
函数功能: 向port地址的接口输出value
函数返回:
参数说明: port-端口地址,value-要输出的8位数
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
int main()
{
int value=64;
int port=0;
outportb(port,value);
printf("Value %d sent to port number %d",value,port);
return 0;
}
@函数名称: intdos
函数原型: int intdos(union REGS *inregs, union REGS *outregs)
函数功能: 调用DOS的INT21中断
函数返回: AX
参数说明:
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
int delete_file(char near *filename)
{
union REGS regs;
int ret;
regs.h.ah=0x41;
regs.x.dx=(unsigned) filename;
ret=intdos(®s,®s);
return(regs.x.cflag ? ret : 0);
}
int main()
{
int err;
err=delete_file("NOTEXIST.$$$");
if (!err)
printf("Able to delete NOTEXIST.$$$");
else
printf("Not Able to delete NOTEXIST.$$$");
return 0;
}
@函数名称: intdosx
函数原型: int intdosx(union REGS *inregs, union REGS *outregs, struct SREGS *segregs)
函数功能: 调用DOS的INT21中断,主要用于大编译模式
函数返回: AX
参数说明:
所属文件: <dos.h>
#include <stdio.h>
#include <dos.h>
int delete_file(char far *filename)
{
union REGS regs;struct SREGS sregs;
int ret;
regs.h.ah=0x41;
regs.x.dx=FP_OFF(filename);
sregs.ds=FP_SEG(filename);
ret=intdosx(®s,®s,&sregs);
return(regs.x.cflag ? ret : 0);
}
int main()
{
int err;
err=delete_file("NOTEXIST.$$$");
if (!err)
printf("Able to delete NOTEXIST.$$$");
else
printf("Not Able to delete NOTEXIST.$$$");
return 0;
}
@函数名称: int86
函数原型: int int86(int intno, union REGS *inregs, union REGS *outregs)
函数功能: 调用中断号为intno的DOS软中断
函数返回: AX
参数说明:
所属文件: <dos.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define VIDEO 0x10
void movetoxy(int x,int y)
{
union REGS regs;
regs.h.ah=2;
regs.h.dh=y;
regs.h.dl=x;
regs.h.bh=0;
int86(VIDEO,®s,®s);
}
int main()
{
clrscr();
movetoxy(35,10);
printf("Hello");
return 0;
}
@函数名称: int86x
函数原型: int int86x(int intno, union REGS *inregs, union, REGS *outregs, struct SREGS *segregs)
函数功能: 调用中断号为intno的DOS软中断,主要用于大编译模式
函数返回: AX
参数说明:
所属文件: <dos.h>
#include <dos.h>
#include <process.h>
#include <stdio.h>
int main()
{
char filename[80];
union REGS inregs,outregs;
struct SREGS segregs;
printf("Enter filename: ");
gets(filename);
inregs.h.ah=0x43;
inregs.h.al=0x21;
inregs.x.dx=FP_OFF(filename);
segregs.ds=FP_SEG(filename);
int86x(0x21,&inregs,&outregs,&segregs);
printf("File attribute: %X",outregs.x.cx);
return 0;
}
@函数名称: intr
函数原型: void intr(int intno, struct REGPACK *preg)
函数功能: 调用中断号为intno的DOS软中断,是int86函数的一个替代函数
函数返回:
参数说明:
所属文件: <dos.h>
#include <stdio.h>
#include <string.h>
#include <dir.h>
#include <dos.h>
#define CF 1
int main()
{
char directory[80];
struct REGPACK reg;
printf("Enter directory to change to: ");
gets(directory);
reg.r_ax=0x3B<<8;
reg.r_dx=FP_OFF(directory);
reg.r_ds=FP_SEG(directory);
intr(0x21,®);
if (reg.r_flags&CF)
printf("Directory change failed");
getcwd(directory,80);
printf("The current directory is: %s",directory);
return 0;
}
@函数名称: keep
函数原型: void keep(unsigned char status, unsigned size)
函数功能: 执行INT31中断来中止程序,但程序仍然驻留在内存中
函数返回:
参数说明: size-要驻留程序的大小,srarus-返回该DOS的状态数值
所属文件: <dos.h>
#include <dos.h>
#define INTR 0x1C
#define ATTR 0x7900
extern unsigned _heaplen=1024;
extern unsigned _stklen =512;
void interrupt (*oldhandler)();
void interrupt handler(void)
{
unsigned int(far *screen)[80];
static int count;
screen=MK_FP(0xB800,0);
count++;
count%=10;
screen[0][79]=count+'0'+ATTR;
oldhandler();
}
int main()
{
oldhandler=getvect(INTR);
setvect(INTR,handler);
keep(0,(_SS+(_SP/16)-_psp));
return 0;
}
@函数名称: parsfnm
函数原型: char *parsfnm(const char *cmdline, struct fcb *fcb, int opt)
函数功能: 该函数使用DOS中断调用0x29来将命令行字符转换为FCB格式
函数返回: 多项式的计算结果
参数说明: cmdline-命令行参数.opt-用于设置AL寄存器的数值
所属文件: <dos.h>
#include <process.h>
#include <string.h>
#include <stdio.h>
#include <dos.h>
int main()
{
char line[80];
struct fcb blk;
printf("Enter drive and file name");
gets(line);
if (parsfnm(line,&blk,1)==NULL)
printf("Error in parsfm call");
else
printf("Drive #%d Name: %11s",blk.fcb_drive,blk.fcb_name);
return 0;
}
@函数名称: peek
函数原型: int peek(unsigned segment, unsigned offset)
函数功能: 内存中读出一个字(16位)
函数返回: 读出的字内容
参数说明: segmemt-段地址,offset-段内偏移地址
所属文件: <dos.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main()
{
int value=0;
printf("The current status of your keyboard is:");
value=peek(0x0040,0x0017);
if (value&1)
printf("Right shift on");
else
printf("Right shift off");
if (value&2)
printf("Left shift on");
else
printf("Left shift off");
if (value&4)
printf("Control key on");
else
printf("Control key off");
if (value&8)
printf("Alt key on");
else
printf("Alt key off");
if (value&16)
printf("Scroll lock on");
else
printf("Scroll lock off");
if (value&32)
printf("Num lock on");
else
printf("Num lock off");
if (value&64)
printf("Caps lock on");
else
printf("Caps lock off");
return 0;
}
@函数名称: peekb
函数原型: int peekb(unsigned segment, unsigned offset)
函数功能: 内存中读出一个字(8位)
函数返回: 读出的字内容
参数说明: segmemt-段地址,offset-段内偏移地址
所属文件: <dos.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main()
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -