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位 | 常見用途 |
|---|---|---|---|
| AX | AH | AL | 功能號/返回碼 |
| BX | BH | BL | 基址/參數 |
| CX | CH | CL | 計數器/長度 |
| DX | DH | DL | 端口/驅動器號 |
| SI | - | - | 源索引 |
| DI | - | - | 目標索引 |
| FLAGS | - | - | 進位標志 CF 在 cflag |
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);
GetLocalTime, DeviceIoControl)。ioctl, syscall, /dev/port (需 root)。參考資料:CSDN 詳細講解。