Я написал небольшую программу, которая была фактически извлечена из исходного кода Linux. Пожалуйста, найдите мой пример кода.
#include <stdio.h>
#define CMOS_READ(addr) ({ \
outb_p(0x80|addr,0x70); \
inb_p(0x71); \
})
#define outb_p(value,port) \
__asm__ ("outb %%al,%%dx\n" \
"\tjmp 1f\n" \
"1:\tjmp 1f\n" \
"1:"::"a" (value),"d" (port))
#define inb_p(port) ({ \
unsigned char _v; \
__asm__ volatile ("inb %%dx,%%al\n" \
"\tjmp 1f\n" \
"1:\tjmp 1f\n" \
"1:":"=a" (_v):"d" (port)); \
_v; \
})
#define outb(value,port) \
__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port))
#define inb(port) ({ \
unsigned char _v; \
__asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \
_v; \
})
int main(void)
{
int val = 0;
val = CMOS_READ(0);
printf("val = %d", val);
return 0;
}
Он компилируется нормально, но при выполнении выдает ошибку сегмента.
Может ли кто-нибудь наставить меня на это?