Я быстро просмотрел Google 'nasm + gcc', посмотрел здесь , здесь и здесь .
В двух словах, ключи, которые будут использоваться для nasm для связи с скомпилированным объектом gcc:
nasm -f elf
Редактировать: Вышесказанное было абсолютно неактуально, так как Натан искал синтаксис GAS, похожий на фрагмент кода в вопросе. Вот моя попытка версии, модифицированной GAS ...
void DateAndTime()
{
int RTCaddress, RTCdata, RTCtimeSecond, RTCtimeHour, RTCtimeMinute, RTCtimeDay, RTCtimeMonth, RTCtimeYear;
// Set RTCaddress and RTCdata respectively first...
RTCaddress = 0x70;
RTCdata = 0x71;
asm
(
.l1:
movb $10, %al ;Get RTC register A
out %al, RTCaddress ; Think RTCaddress needs to be declared...
in RTCdata, %al ; RTCdata needs to be declared
test $80, %al ;Is update in progress?
jne .l1 ; yes, wait
movb $0, %al ;Get seconds (00 to 59)
out %al, RTCaddress
in RTCdata, %al
movb %al, [RTCtimeSecond]
movb $2, %al ;Get minutes (00 to 59)
out %al, RTCaddress
in RTCdata, %al
movb %al, [RTCtimeMinute]
movb $4, %al ;Get hours (see notes)
out %al, RTCaddress
in RTCdata, %al
movb %al, [RTCtimeHour]
movb $7, %al ;Get day of month (01 to 31)
out %al, RTCaddress
in RTCdata, %al
movb %al, [RTCtimeDay]
movb $8, %al ;Get month (01 to 12)
out %al, RTCaddress
in RTCdata, %al
movb %al, [RTCtimeMonth]
movb $9, %al ;Get year (00 to 99)
out %al, RTCaddress
in RTCdata, %al
movb %al, [RTCtimeYear]
ret);
Судя по данным BIOS, где часы RTC, используются порты 0x70, 0x71, которые я использовал здесь ... Я могу ошибаться ...