#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <string.h>
int check_for_ems(void)
{
union REGS inregs, outregs;
struct SREGS segs;
int major, minor; // DOS version
struct DeviceHeader {
struct DeviceHeader far *link;
unsigned attributes;
unsigned strategy_offset;
unsigned interrupt_offset;
char name_or_number_of_units[8];
} far *dev;
int i;
char driver_name[9];
// Get the DOS version
inregs.x.ax = 0x3001;
intdos (&inregs, &outregs);
major = outregs.h.al;
minor = outregs.h.ah;
if (major < 2)
return(0); // Requires DOS 2.0
else
{
// Get the list of lists
inregs.h.ah = 0x52;
intdosx (&inregs, &outregs, &segs);
if (major == 2)
dev = (struct DeviceHeader far *)
MK_FP(segs.es + 1, outregs.x.bx + 7);
else if ((major == 3) && (minor == 0))
dev = (struct DeviceHeader far *)
MK_FP(segs.es + 2, outregs.x.bx + 8);
else
dev = (struct DeviceHeader far *)
MK_FP(segs.es + 2, outregs.x.bx + 2);
while (FP_OFF(dev) != 0xFFFF)
{
if (dev->attributes & 0x8000)
{ // Character device
for (i = 0; i < 8; i++)
driver_name[i] = dev->name_or_number_of_units[i];
driver_name[8] = NULL;
}
if (! strcmp(driver_name, "EMMXXXX0"))
return(1); // Found driver
dev = dev->link;
}
}
return(0);
}
void main (void)
{
union REGS inregs, outregs;
struct SREGS segs;
unsigned handle;
unsigned page;
unsigned index, page_number;
unsigned page_frame_address;
char far *data;
if (check_for_ems())
{
inregs.h.ah = 0x40;
int86 (0x67, &inregs, &outregs);
// Make sure EMS is functional
if (outregs.h.ah == 0)
{
// Allocate a handle for 5 pages
inregs.h.ah = 0x43;
inregs.x.bx = 5;
int86 (0x67, &inregs, &outregs);
if (outregs.h.ah == 0)
{
handle = outregs.x.dx;
// Get the page frame address
inregs.h.ah = 0x41;
int86 (0x67, &inregs, &outregs);
if (outregs.h.ah == 0)
{
page_frame_address = outregs.x.bx;
// map the first 4 pages
for (page_number = 0; page_number < 4; page_number++)
{
inregs.h.ah = 0x44;
inregs.h.al = page_number; // Physical page
inregs.x.bx = page_number; // Logical page
inregs.x.dx = handle;
int86 (0x67, &inregs, &outregs);
if (outregs.h.ah != 0)
{
printf ("Error mapping pages %xH\n",
outregs.h.ah);
// Release the handle
inregs.h.ah = 0x45;
inregs.x.dx = handle;
int86 (0x67, &inregs, &outregs);
exit(0);
}
}
// Fill the first four pages
data = (char far *) MK_FP(page_frame_address, 0);
for (index = 0; index < 16384; index++)
data[index] = 'A';
for (index = 16384; index < 32768; index++)
data[index] = 'B';
for (index = 32768; index < 49152; index++)
data[index] = 'C';
for (index = 49152; index != 0; index++)
data[index] = 'D';
// Map logical page 4 into physical page 1
inregs.h.ah = 0x44;
inregs.h.al = 1; // Physical page
inregs.x.bx = 4; // Logical page
inregs.x.dx = handle;
int86 (0x67, &inregs, &outregs);
if (outregs.h.ah != 0)
{
printf ("Error mapping page %xH\n",
outregs.h.ah);
// Release the handle
inregs.h.ah = 0x45;
inregs.x.dx = handle;
int86 (0x67, &inregs, &outregs);
exit(0);
}
// Fill page 4 which resides in page 1
for (index = 16384; index < 32768; index++)
data[index] = 'E';
// Display the first 20 bytes of each page
printf ("Physical Page Zero\n");
for (index = 0; index < 20; index++)
printf ("%c ", data[index]);
printf ("\nPhysical Page One\n");
for (index = 16384; index < 16404; index++)
printf ("%c ", data[index]);
printf ("\nPhysical Page Two\n");
for (index = 32768; index < 32788; index++)
printf ("%c ", data[index]);
printf ("\nPhysical Page Three\n");
for (index = 49152; index < 49172; index++)
printf ("%c ", data[index]);
// Map logical page 1 into physical page 3
inregs.h.ah = 0x44;
inregs.h.al = 3; // Physical page
inregs.x.bx = 1; // Logical page
inregs.x.dx = handle;
int86 (0x67, &inregs, &outregs);
if (outregs.h.ah != 0)
{
printf ("Error mapping page %xH\n",
outregs.h.ah);
// Release the handle
inregs.h.ah = 0x45;
inregs.x.dx = handle;
int86 (0x67, &inregs, &outregs);
exit(0);
}
printf ("\nMapping logical page 1 to physical page 3");
printf ("\nPhysical Page Three\n");
for (index = 49152; index < 49162; index++)
printf ("%c ", data[index]);
}
else
printf ("Error getting base address %xH\n",
outregs.h.ah);
// Release the handle
inregs.h.ah = 0x45;
inregs.x.dx = handle;
int86 (0x67, &inregs, &outregs);
}
else
printf ("Error allocating 5 pages %xH\n",
outregs.h.ah);
}
else
printf ("EMM not functional\n");
}
else
printf ("EMS driver not present\n");
}
c语言经典900列 无注解
需积分: 0 139 浏览量
更新于2008-10-25
收藏 120KB RAR 举报
《C语言经典900例》是一份涵盖了C语言编程中的各类基础到高级知识点的实践教程,旨在通过大量的实例帮助学习者深入理解和掌握C语言。这个压缩包包含了一个名为“c900”的文件,很可能是一个包含900个C语言编程示例的源代码集合。这些例子可能是按照难度和主题分类的,覆盖了C语言的核心概念、控制结构、数据类型、函数、指针、内存管理、文件操作等多个方面。
1. **基础语法与数据类型**:C语言的基础包括变量声明、常量定义、基本数据类型(如int、char、float、double)以及类型转换。例子可能包括简单的算术运算、逻辑运算和比较运算。
2. **控制结构**:C语言的控制结构包括条件语句(if...else,switch...case)和循环(for、while、do...while)。这些例子会展示如何根据条件执行不同代码块或重复执行某段代码。
3. **数组与字符串**:C语言中的数组是存储同类型元素的集合,而字符串是字符数组的一种特殊形式。例子可能涉及单、二维数组的使用以及字符串的操作,如字符串拼接、查找、替换等。
4. **函数**:函数是C语言中代码组织的基本单元,可以封装特定任务。例子可能包括函数的定义、调用、参数传递,以及递归函数的实现。
5. **指针**:C语言的精髓之一就是指针,它允许我们直接操作内存。例子可能涵盖指针的声明、指针变量的使用、指针运算以及通过指针进行数组和函数操作。
6. **结构体与联合体**:结构体允许我们将多个不同类型的数据组合成一个复合类型,而联合体则是在同一内存空间内切换不同类型的变量。例子可能展示了如何定义、声明和使用这些复合类型。
7. **预处理器**:预处理器在编译阶段执行指令,如#include引入头文件,宏定义等。例子可能包含自定义宏的使用和条件编译。
8. **内存管理**:C语言提供了malloc和free函数进行动态内存分配和释放。例子将展示如何有效地管理内存,防止内存泄漏。
9. **文件操作**:C语言提供了stdio库进行文件的读写操作,例如打开、关闭、读取、写入等。例子可能会涉及文本文件和二进制文件的处理。
10. **错误处理**:在C语言编程中,错误处理是必不可少的部分,例如使用errno和perror来处理运行时错误。
通过深入研究这些示例,学习者不仅可以熟悉C语言的语法,还能掌握实际编程中的问题解决技巧,培养良好的编程习惯。每个例子都是一次实践经验,对于巩固理论知识和提高编程技能大有裨益。因此,《C语言经典900例》是初学者和进阶者都非常值得参考的学习资料。
zhanjianwei
- 粉丝: 0
- 资源: 2
最新资源
- 储能变流器(双向) 包含dcdc?dcac两部分 功率双向流动 可并网,也可改为离网状态下带三相负载 模型很灵活,可拓展使用
- Django-4.2.17最新正式版
- Mysql 5.7.10 osx 10.10 x86-64
- 该模型是内置式的MTPA控制,速度环的输出为给定转矩,然后方式1通过求解MTPA方程得到dq给定电流,方式2进行工程近似得到dq给定电流,并外和id=0控制进行比较
- win32汇编环境,怎么进行除法运算的
- 软件工程;软件工程导论第六版 第一章思维导图
- MySQL基础之MeCab 全文解析插件.pdf
- 太行山南部平顺党参GIES案例数据集
- STM32F系列兼容西门子S7 200PLC源码 CPU:STM32F103RCT6(或其他STM32F103系列大容量芯片) 开发平台:keilMDK5 PLC型号:CPU224XP或226
- 东方通应用服务器TongWeb V7.0的安装指南和技术特点
- 高通调试工具使用手册,仅供参考!
- 模拟ic设计,smic0.18um的锁相环电路,较简单的结构,适合入门学习,可以直接仿真,输出结果较为理想,锁定频率在400M附近,内置环形的VCO 相对简单的电路,入门学习用
- 毕业设计报告《基于深度学习的手势识别系统》.docx
- 机器学习大作业基于线性回归的PM2.5预测python源码+文档说明(高分项目)
- 中国江西省九江气象站月/年平均气温数据集(1924-2023)
- IEEE69节点配电网simulink模型,可以加入风机光伏等新能源设备,SVC等无功补偿设备