📄 x86.h
字号:
// Routines to let C code use special x86 instructions.static inline ucharinb(ushort port){ uchar data; asm volatile("in %1,%0" : "=a" (data) : "d" (port)); return data;}static inline voidinsl(int port, void *addr, int cnt){ asm volatile("cld\n\trepne\n\tinsl" : "=D" (addr), "=c" (cnt) : "d" (port), "0" (addr), "1" (cnt) : "memory", "cc");}static inline voidoutb(ushort port, uchar data){ asm volatile("out %0,%1" : : "a" (data), "d" (port));}static inline voidoutw(ushort port, ushort data){ asm volatile("out %0,%1" : : "a" (data), "d" (port));}static inline voidoutsl(int port, const void *addr, int cnt){ asm volatile("cld\n\trepne\n\toutsl" : "=S" (addr), "=c" (cnt) : "d" (port), "0" (addr), "1" (cnt) : "cc");}static inline uintread_ebp(void){ uint ebp; asm volatile("movl %%ebp, %0" : "=a" (ebp)); return ebp;}struct segdesc;static inline voidlgdt(struct segdesc *p, int size){ volatile ushort pd[3]; pd[0] = size-1; pd[1] = (uint)p; pd[2] = (uint)p >> 16; asm volatile("lgdt (%0)" : : "r" (pd));}struct gatedesc;static inline voidlidt(struct gatedesc *p, int size){ volatile ushort pd[3]; pd[0] = size-1; pd[1] = (uint)p; pd[2] = (uint)p >> 16; asm volatile("lidt (%0)" : : "r" (pd));}static inline voidltr(ushort sel){ asm volatile("ltr %0" : : "r" (sel));}static inline uintread_eflags(void){ uint eflags; asm volatile("pushfl; popl %0" : "=r" (eflags)); return eflags;}static inline voidwrite_eflags(uint eflags){ asm volatile("pushl %0; popfl" : : "r" (eflags));}static inline uintxchg(volatile uint *addr, uint newval){ uint result; // The + in "+m" denotes a read-modify-write operand. asm volatile("lock; xchgl %0, %1" : "+m" (*addr), "=a" (result) : "1" (newval) : "cc"); return result;}static inline voidcli(void){ asm volatile("cli");}static inline voidsti(void){ asm volatile("sti");}// Layout of the trap frame built on the stack by the// hardware and by trapasm.S, and passed to trap().struct trapframe { // registers as pushed by pusha uint edi; uint esi; uint ebp; uint oesp; // useless & ignored uint ebx; uint edx; uint ecx; uint eax; // rest of trap frame ushort es; ushort padding1; ushort ds; ushort padding2; uint trapno; // below here defined by x86 hardware uint err; uint eip; ushort cs; ushort padding3; uint eflags; // below here only when crossing rings, such as from user to kernel uint esp; ushort ss; ushort padding4;};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -