首页 百科知识 一个寄存器地址占用几个字节

一个寄存器地址占用几个字节

时间:2023-10-17 百科知识 版权反馈
【摘要】:使用BIOS中各种例程的调用,可以大大减轻程序设计的难度。进行DOS系统调用的函数,需要使用头部文件“dos.h”。dos.h文件中定义了一个符合8088/8086CPU寄存器的联合union REGS。在8086CPU中有4个16位的数据寄存器:AX、BX、CX和DX。在进行DOS的软中断调用时,通常要使用union REGS向各个寄存器传送数据,或从各个寄存器取出返回值。正是通过了对CPU中寄存器的各种访问,才使C语言能完成DOS及BIOS接口的各种调用,完成汇编语言所能完成的功能。

*10.2 与系统有关的库函数

Turbo C库函数的一个重要特色是设置有与操作系统密切相关的一些函数。这些函数包括:

img731 时间和日期函数;

img732 BIOS接口调用函数;

img733 DOS系统调用函数。

本节简要介绍与BIOS接口和DOS系统调用有关的一些函数。

ROM_BIOS,即只读存储器基本输入输出系统,是安装在微机内部的一个固化软件。它为机器提供最基本的控制手段,为操作系统提供了各种外部设备的I/O服务。使用BIOS中各种例程的调用,可以大大减轻程序设计的难度。一些直接进行BIOS调用的函数,需要使用头部文件“bios.h”。进行DOS系统调用的函数,需要使用头部文件“dos.h”。dos.h文件中定义了一个符合8088/8086CPU寄存器的联合union REGS。

在8086CPU中有4个16位的数据寄存器:AX、BX、CX和DX。这些寄存器都分成高八位和低八位寄存器AH、AL、BH、BL、CH、CL、DH和DL。还有两个十六位的变址寄存器SI和DI,一个十六位的标志寄存器CFLAG以及其他一些寄存器。

在进行DOS的软中断调用时,通常要使用union REGS向各个寄存器传送数据,或从各个寄存器取出返回值。使用的寄存器有时需要十六位的寄存器,有时需要八位的寄存器。为了方便这些寄存器的应用,union REGS联合中包括了两个结构,一个为字寄存器结构类型struct WORDREGS,一个为字节寄存器结构类型struct BYTEREGS。有了这个联合定义,使每个寄存器允许以字或字节方式进行访问。正是通过了对CPU中寄存器的各种访问,才使C语言能完成DOS及BIOS接口的各种调用,完成汇编语言所能完成的功能。

union REGS的定义如下:

  struct WORDREGS

  {

  unsigned int ax,bx,cx,dx,si,di,cflag;

img734

如图10.2.1所示是union REGS示意图。从图中可以看出,两个结构变量x和h占用同一个存储空间,当结构变量x占用联合变量REGS时,占用整个空间;当结构变量h占用联合变量REGS时,仅占用前8个字节。

img735

图10.2.1 union REGS示意图

在dos.h中还定义了结构类型struct SREGS,它被一些函数用来设置段寄存器。

img736

img737

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈