⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 segment.h

📁 linux完全注释的源代码。内核版本为0.11的linux kernel。
💻 H
字号:
//// 读取fs 段中指定地址处的字节。// 参数:addr - 指定的内存地址。// %0 - (返回的字节_v);%1 - (内存地址addr)。// 返回:返回内存fs:[addr]处的字节。extern _inline unsigned charget_fs_byte (const char *addr){//  unsigned register char _v;// __asm__ ("movb %%fs:%1,%0": "=r" (_v):"m" (*addr));
  _asm mov ebx,addr
  _asm mov al,byte ptr fs:[ebx];
//  _asm mov _v,al;//  return _v;}//// 读取fs 段中指定地址处的字。// 参数:addr - 指定的内存地址。// %0 - (返回的字_v);%1 - (内存地址addr)。// 返回:返回内存fs:[addr]处的字。extern _inline unsigned shortget_fs_word (const unsigned short *addr){//  unsigned short _v;//__asm__ ("movw %%fs:%1,%0": "=r" (_v):"m" (*addr));
  _asm mov ebx,addr
  _asm mov ax,word ptr fs:[ebx];
//  _asm mov _v,ax;//  return _v;}//// 读取fs 段中指定地址处的长字(4 字节)。// 参数:addr - 指定的内存地址。// %0 - (返回的长字_v);%1 - (内存地址addr)。// 返回:返回内存fs:[addr]处的长字。extern _inline unsigned longget_fs_long (const unsigned long *addr){//  unsigned long _v;//__asm__ ("movl %%fs:%1,%0": "=r" (_v):"m" (*addr));
  _asm mov ebx,addr
  _asm mov eax,dword ptr fs:[ebx];
//  _asm mov _v,eax;//  return _v;}//// 将一字节存放在fs 段中指定内存地址处。// 参数:val - 字节值;addr - 内存地址。// %0 - 寄存器(字节值val);%1 - (内存地址addr)。extern _inline voidput_fs_byte (char val, char *addr)//passed{//  __asm__ ("movb %0,%%fs:%1"::"r" (val), "m" (*addr));
	_asm mov ebx,addr
	_asm mov al,val;
	_asm mov byte ptr fs:[ebx],al;}//// 将一字存放在fs 段中指定内存地址处。// 参数:val - 字值;addr - 内存地址。// %0 - 寄存器(字值val);%1 - (内存地址addr)。extern _inline voidput_fs_word (short val, short *addr){//  __asm__ ("movw %0,%%fs:%1"::"r" (val), "m" (*addr));
	_asm mov ebx,addr
	_asm mov ax,val;
	_asm mov word ptr fs:[ebx],ax;}//// 将一长字存放在fs 段中指定内存地址处。// 参数:val - 长字值;addr - 内存地址。// %0 - 寄存器(长字值val);%1 - (内存地址addr)。extern _inline voidput_fs_long (long val, unsigned long *addr){//  __asm__ ("movl %0,%%fs:%1"::"r" (val), "m" (*addr));
	_asm mov ebx,addr
	_asm mov eax,val;
	_asm mov dword ptr fs:[ebx],eax;}/** 比我更懂GNU 汇编的人应该仔细检查下面的代码。这些代码能使用,但我不知道是否* 含有一些小错误。* --- TYT,1991 年11 月24 日* [ 这些代码没有错误,Linus ]*///// 取fs 段寄存器值(选择符)。// 返回:fs 段寄存器值。extern _inline unsigned shortget_fs (){//  unsigned short _v;//__asm__ ("mov %%fs,%%ax": "=a" (_v):);
  _asm mov ax,fs;
//  _asm mov _v,ax;//  return _v;}//// 取ds 段寄存器值。// 返回:ds 段寄存器值。extern _inline unsigned shortget_ds (){//  unsigned short _v;//__asm__ ("mov %%ds,%%ax": "=a" (_v):);  _asm mov ax,fs;
//  _asm mov _v,ax;
//  return _v;}//// 设置fs 段寄存器。// 参数:val - 段值(选择符)。extern _inline voidset_fs (unsigned long val){//  __asm__ ("mov %0,%%fs"::"a" ((unsigned short) val));
	_asm mov eax,val;
	_asm mov fs,ax;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -