C语言 百文网手机站

C语言中的几个重要概念(4)

时间:2021-04-14 15:29:26 C语言

C语言中的几个重要概念

  六、C语言使用内存和寄存器的方法

  1.段和段寄存器

  CS用来存放代码段的段地址;DS用来存放全局变量和静态变量所在段(数据段)的段地址;SS用来存放局部变量,参数所在段(堆栈)的段地址。 此外,还有堆段,是动态分配的内存。

  2.微模式编译时段的使用情况

  只有一个段,从底往高依此装入代码,静态变量和全局变量,堆。从高往低装入堆栈。

  3.小模式编译时段的使用情况

  数据、堆栈和近堆共用一个段,代码用一个段,还有一个远堆(用far指针存取)。

  4.中模式编译时段的使用情况

  中模式有多个代码段,其余与小模式一样。函数指针用far指针。

  5.紧凑模式编译时段的使用情况

  代码,静态数据,堆栈,堆(只有远堆)各有自己的段。静态数据的总量不得超过64K。

  6.大模式编译时段的使用情况

  静态数据,堆,堆栈的分配与紧凑模式一样;代码段的分配与中模式一样。数据指针和函数指针都是远指针。静态数据的总量不得超过64K。

  7.巨模式编译时段的使用情况

  来自不同源文件的代码放在不同的段内,来自不同源文件的静态数据也放在不同的段内,只有堆栈是合在一起的。

  8.运行库函数分配的内存:

  常规内存区

  远堆(数据段之外) 用_fmalloc()分配,得到32位指针

  ├─────────┤

  64│堆(未使用的内存)│用malloc()分配,得到16位的位移地址

  KB├─────────┤

  数│ 栈(局部变量) │

  据├─────────┤

  段│ 全局和静态变量 │

  ├─────────┤

  七、用C语言写中断服务程序(如果中断服务程序不牵涉到中断链以及 DOS和其本身的重入问题。) ---Turbo C

  1.函数类型为interrupt 的中断服务程序定义如下:

  #include

  void interrupt 函数名(bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flags);

  unsigned int bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flags;

  2.得先保留原中断函数地址

  void interrupt (*保留函数名)( );

  保留函数名=getvect(0x中断号);

  3.在main函数中用自定义的中断服务程序替换原来的程序

  setvect(0x中断号,函数名);

  4.在main函数中激活自定义的中断服务程序

  (1)先设置要用到的寄存器的值(用伪变量),

  (2)geninterrupt(0x中断号);

  若替换的是计时中断程序,因PC机内的计时器每秒产生18.2次中断,则每秒自动执行18.2次新的中断程序。

  5.事后得将原中断函数地址装回向量表中

  setvect(0x中断号,保留函数名);

 

【C语言中的几个重要概念】相关文章:

C语言中指针的概念09-27

C语言中各种类型的指针的概念总结09-26

PHP语言中Session的概念11-12

C语言中的运算规则03-17

C语言中的字符(char)03-11

C语言中的链接编写10-07

C语言中的assert用法10-07

c语言中default的用法10-05

c语言中free的用法10-04

C语言中的指针解读10-04