亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? get_address.c

?? LINUX1.0源代碼,代碼條理清晰
?? C
字號:
/*---------------------------------------------------------------------------+
 |  get_address.c                                                            |
 |                                                                           |
 | Get the effective address from an FPU instruction.                        |
 |                                                                           |
 | Copyright (C) 1992,1993,1994                                              |
 |                       W. Metzenthen, 22 Parker St, Ormond, Vic 3163,      |
 |                       Australia.  E-mail   billm@vaxc.cc.monash.edu.au    |
 |                                                                           |
 |                                                                           |
 +---------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------+
 | Note:                                                                     |
 |    The file contains code which accesses user memory.                     |
 |    Emulator static data may change when user memory is accessed, due to   |
 |    other processes using the emulator while swapping is in progress.      |
 +---------------------------------------------------------------------------*/


#include <linux/stddef.h>

#include <asm/segment.h>

#include "fpu_system.h"
#include "exception.h"
#include "fpu_emu.h"

static int reg_offset[] = {
	offsetof(struct info,___eax),
	offsetof(struct info,___ecx),
	offsetof(struct info,___edx),
	offsetof(struct info,___ebx),
	offsetof(struct info,___esp),
	offsetof(struct info,___ebp),
	offsetof(struct info,___esi),
	offsetof(struct info,___edi)
};

#define REG_(x) (*(long *)(reg_offset[(x)]+(char *) FPU_info))

static int reg_offset_vm86[] = {
	offsetof(struct info,___cs),
	offsetof(struct info,___vm86_ds),
	offsetof(struct info,___vm86_es),
	offsetof(struct info,___vm86_fs),
	offsetof(struct info,___vm86_gs),
	offsetof(struct info,___ss)
      };

#define VM86_REG_(x) (*(unsigned short *) \
		      (reg_offset_vm86[((unsigned)x)]+(char *) FPU_info))


/* Decode the SIB byte. This function assumes mod != 0 */
static void *sib(int mod, unsigned long *fpu_eip)
{
  unsigned char ss,index,base;
  long offset;

  RE_ENTRANT_CHECK_OFF;
  FPU_code_verify_area(1);
  base = get_fs_byte((char *) (*fpu_eip));   /* The SIB byte */
  RE_ENTRANT_CHECK_ON;
  (*fpu_eip)++;
  ss = base >> 6;
  index = (base >> 3) & 7;
  base &= 7;

  if ((mod == 0) && (base == 5))
    offset = 0;              /* No base register */
  else
    offset = REG_(base);

  if (index == 4)
    {
      /* No index register */
      /* A non-zero ss is illegal */
      if ( ss )
	EXCEPTION(EX_Invalid);
    }
  else
    {
      offset += (REG_(index)) << ss;
    }

  if (mod == 1)
    {
      /* 8 bit signed displacement */
      RE_ENTRANT_CHECK_OFF;
      FPU_code_verify_area(1);
      offset += (signed char) get_fs_byte((char *) (*fpu_eip));
      RE_ENTRANT_CHECK_ON;
      (*fpu_eip)++;
    }
  else if (mod == 2 || base == 5) /* The second condition also has mod==0 */
    {
      /* 32 bit displacment */
      RE_ENTRANT_CHECK_OFF;
      FPU_code_verify_area(4);
      offset += (signed) get_fs_long((unsigned long *) (*fpu_eip));
      RE_ENTRANT_CHECK_ON;
      (*fpu_eip) += 4;
    }

  return (void *) offset;
}


static unsigned long vm86_segment(unsigned char segment)
{ 
  segment--;
#ifdef PARANOID
  if ( segment > PREFIX_SS_ )
    {
      EXCEPTION(EX_INTERNAL|0x130);
      math_abort(FPU_info,SIGSEGV);
    }
#endif PARANOID
  return (unsigned long)VM86_REG_(segment) << 4;
}


/*
       MOD R/M byte:  MOD == 3 has a special use for the FPU
                      SIB byte used iff R/M = 100b

       7   6   5   4   3   2   1   0
       .....   .........   .........
        MOD    OPCODE(2)     R/M


       SIB byte

       7   6   5   4   3   2   1   0
       .....   .........   .........
        SS      INDEX        BASE

*/

void get_address(unsigned char FPU_modrm, unsigned long *fpu_eip,
		 fpu_addr_modes addr_modes)
{
  unsigned char mod;
  long *cpu_reg_ptr;
  int offset = 0;     /* Initialized just to stop compiler warnings. */

#ifndef PECULIAR_486
  /* This is a reasonable place to do this */
  FPU_data_selector = FPU_DS;
#endif PECULIAR_486

  /* Memory accessed via the cs selector is write protected
     in 32 bit protected mode. */
#define FPU_WRITE_BIT 0x10
  if ( !addr_modes.vm86 && (FPU_modrm & FPU_WRITE_BIT)
      && (addr_modes.override.segment == PREFIX_CS_) )
    {
      math_abort(FPU_info,SIGSEGV);
    }

  mod = (FPU_modrm >> 6) & 3;

  if (FPU_rm == 4 && mod != 3)
    {
      FPU_data_address = sib(mod, fpu_eip);
      return;
    }

  cpu_reg_ptr = & REG_(FPU_rm);
  switch (mod)
    {
    case 0:
      if (FPU_rm == 5)
	{
	  /* Special case: disp32 */
	  RE_ENTRANT_CHECK_OFF;
	  FPU_code_verify_area(4);
	  offset = get_fs_long((unsigned long *) (*fpu_eip));
	  (*fpu_eip) += 4;
	  RE_ENTRANT_CHECK_ON;
	  FPU_data_address = (void *) offset;
	  return;
	}
      else
	{
	  FPU_data_address = (void *)*cpu_reg_ptr;  /* Just return the contents
						   of the cpu register */
	  return;
	}
    case 1:
      /* 8 bit signed displacement */
      RE_ENTRANT_CHECK_OFF;
      FPU_code_verify_area(1);
      offset = (signed char) get_fs_byte((char *) (*fpu_eip));
      RE_ENTRANT_CHECK_ON;
      (*fpu_eip)++;
      break;
    case 2:
      /* 32 bit displacement */
      RE_ENTRANT_CHECK_OFF;
      FPU_code_verify_area(4);
      offset = (signed) get_fs_long((unsigned long *) (*fpu_eip));
      (*fpu_eip) += 4;
      RE_ENTRANT_CHECK_ON;
      break;
    case 3:
      /* Not legal for the FPU */
      EXCEPTION(EX_Invalid);
    }

  if ( addr_modes.vm86 )
    {
      offset += vm86_segment(addr_modes.override.segment);
    }

  FPU_data_address = offset + (char *)*cpu_reg_ptr;
}


void get_address_16(unsigned char FPU_modrm, unsigned long *fpu_eip,
		      fpu_addr_modes addr_modes)
{
  unsigned char mod;
  int offset = 0;     /* Default used for mod == 0 */

#ifndef PECULIAR_486
  /* This is a reasonable place to do this */
  FPU_data_selector = FPU_DS;
#endif PECULIAR_486

  /* Memory accessed via the cs selector is write protected
     in 32 bit protected mode. */
#define FPU_WRITE_BIT 0x10
  if ( !addr_modes.vm86 && (FPU_modrm & FPU_WRITE_BIT)
      && (addr_modes.override.segment == PREFIX_CS_) )
    {
      math_abort(FPU_info,SIGSEGV);
    }

  mod = (FPU_modrm >> 6) & 3;

  switch (mod)
    {
    case 0:
      if (FPU_rm == 6)
	{
	  /* Special case: disp16 */
	  RE_ENTRANT_CHECK_OFF;
	  FPU_code_verify_area(2);
	  offset = (unsigned short)get_fs_word((unsigned short *) (*fpu_eip));
	  (*fpu_eip) += 2;
	  RE_ENTRANT_CHECK_ON;
	  goto add_segment;
	}
      break;
    case 1:
      /* 8 bit signed displacement */
      RE_ENTRANT_CHECK_OFF;
      FPU_code_verify_area(1);
      offset = (signed char) get_fs_byte((signed char *) (*fpu_eip));
      RE_ENTRANT_CHECK_ON;
      (*fpu_eip)++;
      break;
    case 2:
      /* 16 bit displacement */
      RE_ENTRANT_CHECK_OFF;
      FPU_code_verify_area(2);
      offset = (unsigned) get_fs_word((unsigned short *) (*fpu_eip));
      (*fpu_eip) += 2;
      RE_ENTRANT_CHECK_ON;
      break;
    case 3:
      /* Not legal for the FPU */
      EXCEPTION(EX_Invalid);
      break;
    }
  switch ( FPU_rm )
    {
    case 0:
      offset += FPU_info->___ebx + FPU_info->___esi;
      break;
    case 1:
      offset += FPU_info->___ebx + FPU_info->___edi;
      break;
    case 2:
      offset += FPU_info->___ebp + FPU_info->___esi;
      break;
    case 3:
      offset += FPU_info->___ebp + FPU_info->___edi;
      break;
    case 4:
      offset += FPU_info->___esi;
      break;
    case 5:
      offset += FPU_info->___edi;
      break;
    case 6:
      offset += FPU_info->___ebp;
      break;
    case 7:
      offset += FPU_info->___ebx;
      break;
    }

 add_segment:
  offset &= 0xffff;

  if ( addr_modes.vm86 )
    {
      offset += vm86_segment(addr_modes.override.segment);
    }

  FPU_data_address = (void *)offset ;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产农村妇女精品| 国产传媒日韩欧美成人| 在线精品视频免费播放| ...av二区三区久久精品| 成人av在线资源网| 白白色 亚洲乱淫| 国产精品国产自产拍高清av| 成人手机电影网| 亚洲另类在线视频| 91国偷自产一区二区三区观看| 亚洲欧美激情插| 欧美亚洲尤物久久| 蜜臀久久99精品久久久久宅男| 欧美电影免费观看高清完整版在线| 日本成人中文字幕| 久久婷婷色综合| 99视频有精品| 日韩精品一区第一页| 久久综合九色欧美综合狠狠| 成人免费不卡视频| 亚洲无人区一区| 337p日本欧洲亚洲大胆色噜噜| 99视频在线精品| 久久66热re国产| 一区二区三区在线播放| 日韩欧美成人午夜| 色久优优欧美色久优优| 开心九九激情九九欧美日韩精美视频电影 | 久久精品日韩一区二区三区| 欧美在线一区二区三区| 紧缚奴在线一区二区三区| 亚洲精品久久久久久国产精华液| 欧美成人a∨高清免费观看| 99久久99久久精品免费看蜜桃| 日韩电影在线一区| 一区二区三区四区高清精品免费观看| 欧美一区二区免费观在线| 色8久久精品久久久久久蜜| 激情五月激情综合网| 亚洲6080在线| 亚洲成在线观看| 午夜精品在线看| 亚洲一区二区三区在线播放| 亚洲狼人国产精品| 亚洲欧美日韩国产综合| 综合激情成人伊人| 亚洲欧洲综合另类| 一区二区在线看| 亚洲综合丁香婷婷六月香| 亚洲一线二线三线久久久| 亚洲午夜精品17c| 午夜不卡av在线| 九九久久精品视频| 国产精品一区二区三区乱码| 国产精品白丝jk白祙喷水网站| 国产九色精品成人porny| 国产99一区视频免费| 91麻豆高清视频| 欧美一区二区三区免费观看视频| 欧美精品丝袜中出| 亚洲精品在线一区二区| 国产婷婷色一区二区三区| 亚洲三级久久久| 日韩电影一区二区三区四区| 久久成人免费电影| 成人性生交大片免费看中文 | 成人国产免费视频| 欧美一级午夜免费电影| 欧美不卡一二三| 国产农村妇女毛片精品久久麻豆 | 亚洲一区二区欧美日韩| 国产成人av网站| 欧美亚洲自拍偷拍| 久久久蜜桃精品| 五月婷婷综合在线| 成人h版在线观看| 日韩精品一区二区三区视频在线观看| 国产视频一区在线观看| 日韩av网站在线观看| 99久久99久久精品国产片果冻| 精品电影一区二区| 亚洲综合图片区| 国产主播一区二区| 久久亚洲二区三区| 91香蕉视频在线| 国产精品久久久久四虎| 成人一级黄色片| 亚洲视频小说图片| 成熟亚洲日本毛茸茸凸凹| 精品毛片乱码1区2区3区| 亚洲精品国产一区二区精华液| 波多野结衣精品在线| 国产精品理论在线观看| 懂色av一区二区三区免费观看| 91精品久久久久久久99蜜桃| 日韩电影网1区2区| 精品国产麻豆免费人成网站| 国产美女精品人人做人人爽| 精品国产亚洲在线| 狠狠色综合日日| 国产午夜一区二区三区| 国产成人av电影在线观看| 亚洲欧洲日韩女同| 欧美性大战久久| 蜜桃视频第一区免费观看| 国产日韩欧美综合在线| 7777女厕盗摄久久久| 国产99久久久精品| 日本中文字幕一区二区视频| 欧美一区二区三区免费观看视频| 91美女在线观看| 日本vs亚洲vs韩国一区三区二区| 精品1区2区在线观看| 91在线精品一区二区三区| 亚洲h精品动漫在线观看| 日韩三级伦理片妻子的秘密按摩| 国产真实精品久久二三区| 中文字幕亚洲精品在线观看| 在线中文字幕不卡| 久草精品在线观看| 一区二区三区在线观看网站| 精品国一区二区三区| 色诱亚洲精品久久久久久| 精品午夜久久福利影院| 一区二区三区欧美激情| 久久女同互慰一区二区三区| 91免费国产在线| 国产精品综合二区| 午夜免费久久看| 亚洲欧洲99久久| 中文字幕欧美国产| 精品国产一区久久| 欧美日韩一级大片网址| a级高清视频欧美日韩| 国产精品影视在线| 蜜臀av一区二区在线观看| 亚洲精品成人在线| 亚洲你懂的在线视频| 国产精品成人网| 欧美激情一区在线| 国产欧美视频在线观看| 久久综合给合久久狠狠狠97色69| 欧美日韩1区2区| 欧美日韩国产大片| 欧美日韩国产另类一区| 欧美视频在线不卡| 欧美日韩激情在线| 欧美一区二区三区在线| 欧美日本在线看| 日韩一区二区影院| 精品国产一区二区三区四区四| 欧美大片免费久久精品三p| 91精品欧美福利在线观看| 5月丁香婷婷综合| 亚洲精品在线一区二区| 日本一区二区三级电影在线观看 | 91丨九色丨黑人外教| 9l国产精品久久久久麻豆| 91在线云播放| 日韩一区二区三区视频在线观看| 欧美一区二区三区四区高清| 91精品国产欧美一区二区成人| 日韩三级在线免费观看| 国产精品久久久久久久久久免费看| 亚洲欧美日韩国产综合| 麻豆精品视频在线观看免费 | 蜜桃一区二区三区在线| 国产不卡视频在线观看| 欧美日韩一本到| 中文字幕av不卡| 亚洲18色成人| 91首页免费视频| 欧美xxxxx裸体时装秀| 亚洲精品午夜久久久| 国产99久久久国产精品潘金| 欧美色偷偷大香| 1区2区3区精品视频| 国产资源在线一区| 欧美三片在线视频观看| 亚洲三级小视频| 成人一区二区在线观看| 91精品国产一区二区| 亚洲欧美偷拍卡通变态| 国产成人综合自拍| 精品少妇一区二区三区免费观看| 亚洲色欲色欲www在线观看| 韩国精品在线观看| 亚洲精品在线一区二区| 裸体歌舞表演一区二区| 91麻豆精品国产91久久久久| 亚洲成人午夜电影| 欧美精品视频www在线观看| 亚洲一二三四在线| 欧美性受xxxx黑人xyx| 婷婷综合另类小说色区| 在线亚洲免费视频| 日韩电影一区二区三区四区| 这里只有精品免费| 国产一区欧美日韩| 国产欧美一区二区三区在线看蜜臀|