我有下面的函数(C++汇编),它可以读取BIOS信号:
static clock_t clock(void);
#pragma aux clock = \
"pushf" \
"push ds" \
"cli" \
"mov ax, 0x0040" \
"mov ds, ax" \
"mov bx, 0x006C" \
"mov ax, [bx]" \
"sti" \
"pop ds" \
"popf" \
parm [ ax ] \
modify [ ax bx ];
字符串
这工作,但有多少是必要的?有人能帮我编码高尔夫这一点?我和8086一起工作(微型内存模型),我不确定在阅读值之前是否需要pushf
和popf
或cli
和sti
。如果有可能减少数字操作,我也会很感激。我对远指针一无所知,并捏造了这一点第一次(First Time)
1条答案
按热度按时间ruyhziif1#
你只需要从地址
0000:046c
中读取一个字,就可以得到滴答计数器的低16位。一个简单的方法是使用一个远位volatile指针:字符串
也可以使用其他等效地址,如
0040:006c
。然后,您可以像这样访问滴答计数器:
型
注意,这将只给你给予低2字节。如果你想要所有的字节,你必须禁用中断来做整个计数器的原子读取(或循环直到收敛)。
您也可以使用本手册中指定的预定义函数
clock
或_bios_timeofday
。