[March , 15, 2008] Watcom C 的笔记10 Watcom C (10)

		局部变量在内存的位置

    在编写一个com文件的时候,遇到奇怪的问题:编译正常,运行后显示

“Stack Overflow!”。程序片段如下:

#include <stdio.h>

int main(int argc,char *argv[])
{
 int i,n;
 FILE *f;
 long int sum=0;
 char buffer[2048]=; //1K 就在这里指定一个做buffer的变量

 if (argc!=2) {printf("usage: checksum file

     试验表明,如果在102[......]

阅读全文

[March , 10, 2008] 风俗问题

            		风俗问题

    有一段时间,我认为只有有钱人家风俗多,规矩多,后来发现根本不是

那么回事。比如,我在家吃饭的时候,俺爹总是教育我吃米饭不要趴着吃,

要端起碗吃。又说,这要是在老家你奶奶肯定一筷子打过来。等到我上学了,

工作了,用不锈钢盘子吃饭觉得很别扭,总想端起来吃,而端起来之后又过于

与众不同,大多数人都会认为你要舔盘子。另外,在老家,吃咸鸭蛋的时候,

也有要求必须从什么大头打开,而我总是敲到实心的那一端。

    现在我家保留着最有特点的风俗就是烧纸。通常是在过年前几天,买好

黄纸。在另外一张纸上,如同信封一般,[......]

阅读全文

[March , 7, 2008] Watcom C 的笔记9 Watcom C (9)

          运算优先级的问题

    C语言中,“+ -”的优先级高于“<< >>”因此,下面这段程序无法得到期望值:

#include <stdio.h>
#include <stdint.h>
void main ()
{
	uint8_t		command_write=1;
	uint8_t		command_read=2;
	uint8_t		command_erase=3;
	uint8_t		command_read_status=4;

	uint64_t rst=0xFFFFFFFF;[......]

阅读全文

[March , 3, 2008] Watcom C 的笔记8 Watcom C (8)

           随机函数

    stdlib.h 中的 int rand(void) 产生随机数。需要注意的是,生成的

范围是 0-32767。 直接使用这个参数生成的是伪随机数。

#include <stdio.h>
#include <stdlib.h>
int main()
{
 int i;

  for (i=0;i<0x200;i++)
   {
   	if ((i % 0x10)==0) {printf("\n");}
    printf("%5d ",rand());
   }
 return 0[......]

阅读全文

[February , 27, 2008] 回乡偶记

		     回乡偶记

(一)回来之后,听亲戚讲述我奶奶家的历史,让我颇感惊讶。第一件事情是,

我爷爷是48年县城的第一批秘密党员。那时候还没有解放,秘密入的;第二件

事情是,我奶奶家是地主。汗,我一直以为我是“根正苗红”的“三代贫农”

----不过要从我爷爷出身算,是。

(二)飞回来上班的。印象深刻的是坐火车次次都有人广播找医生;坐飞机似乎

次次都有带小孩子的,哭声不断。

(三)飞机上打起来了。一个男人,带着一个女的,女的怀抱很小的孩子,还有

个大约11岁的男孩,不知道什么关系。飞机上的空间挺小的,前面的一个人将

座椅放下来了,大约是阻挡[......]

阅读全文

[February , 22, 2008] Watcom C 的笔记7 Watcom C (7)

		        判断是否在 Windows 下

    之前使用int 2Fh,ax=1600h 的方法已经失效;现在提出检测CR0 的Bit0 

(V86 enabled位)。在Windows的DOS box是 v86 mode。

#include <stdio.h>
#include <i86.h>

extern short isV86( void );
#pragma aux isV86 =       \
    "smsw  ax           ",      \
    "test  ax, 1        ",[......]

阅读全文

[February , 18, 2008] Watcom C 的笔记6 Watcom C (6)

          命令行参数的获得

    标准C语言定义如下: int main(int argc,char *argv[])。

第一个字符串 argv[0] 是包含全路径的程序名。

#include <stdio.h>
int main(int argc,char *argv[])
{
 int i;
 printf("You have input %d arguments. Argv[0]=[%s]\n",argc-1,argv[0]);
 //argv[0] is file name
 for (i=1;i<argc;i++)[......]

阅读全文

[January , 26, 2008] Watcom C 的笔记5 Watcom C (5)

          DOS/4GW PCI 配置空间的读取

   参考

http://www.openwatcom.org/index.php/PCI_Device_access_under_32-Bit_PM_DOS

很奇怪的是原文是编译不过的,需要将 Example 中的 #include "pci.h" 改为 

#include "pci.c" 才能编译通过。

   第一个程序:getpci.c 使用二维数组保存结果,在后面输出:

#include <stdio.h>
#include "pci.c"
int main()
{
ch[......]

阅读全文