首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言 union REGS 結構體詳解:DOS/BIOS 中斷調用參數映射

     編輯:程式設計疑難解答

背景

union REGS 是 Turbo C / DOS 時代用於 int86()、int86x() 系統中斷調用的寄存器參數結構,現代編程極少直接使用,但在維護舊代碼或嵌入式 BIOS 開發時仍會遇到。

結構定義 (典型)

struct WORDREGS {
    unsigned int ax, bx, cx, dx, si, di, cflag, flags;
};

struct BYTEREGS {
    unsigned char al, ah, bl, bh, cl, ch, dl, dh;
};

union REGS {
    struct WORDREGS x;
    struct BYTEREGS h;
};

字段對應關係

16位寄存器高8位低8位常見用途
AXAHAL功能號/返回碼
BXBHBL基址/參數
CXCHCL計數器/長度
DXDHDL端口/驅動器號
SI--源索引
DI--目標索引
FLAGS--進位標志 CF 在 cflag

經典調用示例:獲取系統時間 (INT 1AH, AH=02H)

union REGS regs;
regs.h.ah = 0x02; // 功能號
int86(0x1A, ®s, ®s); // 調用中斷
// 返回:CH=小時, CL=分鐘, DH=秒, DL=日光節約標志
printf("Time: %02d:%02d:%02d\n", regs.h.ch, regs.h.cl, regs.h.dh);

現代替代方案

  • Windows: Win32 API (GetLocalTime, DeviceIoControl)。
  • Linux: ioctl, syscall, /dev/port (需 root)。
  • 嵌入式: 直接操作硬件寄存器或 HAL 庫。

參考資料:CSDN 詳細講解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved