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

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

?? dpmi.c

?? 這是資料最全的有關匯編語言的示例源代碼
?? C
字號:
/*
** DPMI services for GNU_C
**
** (c) Rainer Schnitker 1994
*/

#include <stdio.h>

#define INLINE static inline

typedef unsigned char   BYTE;
typedef unsigned short	WORD;
typedef unsigned long   DWORD;

typedef struct {
    WORD lim_lo;
    WORD base_lo;
    BYTE base_mi,access,lim_hi,base_hi;
} DESCRIPTOR ;
typedef DESCRIPTOR *PDESCRIPTOR;

typedef struct { DWORD LargestFree;
                 DWORD MaxUnlockedPages;
                 DWORD MaxLockedPages;
                 DWORD AddressSpacePages;
                 DWORD UnlockedPages;
                 DWORD UnusedPages;
                 DWORD PhysicalPages;
                 DWORD FreeAddressSpacePages;
                 DWORD PagingFilePages;  /* or partition size */
                 DWORD reserved[3];
               } FREEMEMINFO ;
typedef FREEMEMINFO *PFREEMEMINFO;

/* descriptor makros */
#define DESC_BASE(d)  (((((DWORD)d.base_hi<<8)|(DWORD)d.base_mi)<<16)|(DWORD)d.base_lo)
#define DESC_LIMIT(d) ((((DWORD)(d.lim_hi&15))<<16)|(DWORD)d.lim_lo)
#define GATE_OFFSET(d) (((((DWORD)d.base_hi<<8)|(DWORD)d.lim_hi)<<16)|(DWORD)d.lim_lo)

/* descriptor fields */
#define ACCESS_BIT              1
#define READ_BIT                2
#define WRITE_BIT               2
#define CONFIRMING_BIT          4
#define EXPAND_BIT              4
#define CODE_BIT                8
#define SEGMENT_BIT             16
#define PRESENT_BIT             128
#define AVL_BIT                 16
#define DEFAULT_BIT             64
#define BIG_BIT                 64
#define GRANULAR_BIT            128
#define DPL_MASK                96
#define TYPE_MASK               15
#define LIMIT_HI_MASK           15

#define APP_CODE_SEL            250   /* dpl=3 , read */
#define APP_DATA_SEL            242   /* dpl=3 ,write */

#define TYPE_CODE               10
#define TYPE_CONFIRM_CODE       14
#define TYPE_DATA               2
#define TYPE_EXPAND_DATA        6
#define TYPE_286TSS             1
#define TYPE_LDT                2
#define TYPE_BUSY286TSS         3
#define TYPE_286CALLGATE        4
#define TYPE_TASKGATE           5
#define TYPE_286INTGATE         6
#define TYPE_286TRAPGATE        7
#define TYPE_386TSS             9
#define TYPE_BUSY386TSS         11
#define TYPE_386CALLGATE        12
#define TYPE_386INTGATE         14
#define TYPE_386TRAPGATE        15

/* breakpoints-types */
#define BREAK_CODE              0x0001
#define BREAK_DATA_W1           0x0101
#define BREAK_DATA_RW1          0x0201
#define BREAK_DATA_W2           0x0102
#define BREAK_DATA_RW2          0x0202
#define BREAK_DATA_W4           0x0104
#define BREAK_DATA_RW4          0x0204


#define CHECKERR "jnc    1f\n\tmovl   $-1, %0 \n\tjmp    2f \n\t1: \n\t"
#define CHECK_ERR_DPMI10 "jc    2f\n\t"
#define OKEAX0 "xorl   %0, %0 \n\t2: \n\t"

INLINE int GetDescriptor(int sel, DESCRIPTOR *desc)
{
    register int _v;

    __asm__ __volatile__(
	"int    $0x31 \n\t"
        CHECKERR
	OKEAX0
	: "=r" (_v)
	: "b" (sel) , "D" ((long)desc) , "a" (0x0B)
	);

    return _v ;
}

INLINE int GetFreeMemInfo(FREEMEMINFO *info)
{
    register int _v;

    __asm__ __volatile__(
	"int    $0x31 \n\t"
	CHECKERR
	OKEAX0
	: "=r" (_v)
	: "D" ((long)info), "a" (0x500)
	);

    return _v ;
}

int is_emx_exe(void)
{
    register int ver;

#ifdef __EMX__
    /* os_version() uses ebx */
    __asm__ ("pushl  %ebx \n\t");
    ver = __os_version();
    __asm__ ("popl   %ebx \n\t");
#else
    __asm__ __volatile__(
	"movb   $0x30, %%ah \n\t"
	"int    $0x21 \n\t"
        : "=a" (ver)
        :
        : "ax","bx");
#endif

    /* EMX set high eax to "em" */
    if (ver >> 16 == 0x6d65)
	return 1;
    else
	return 0;
}

void PrintFreeMemInfo()
{
    FREEMEMINFO fmi;
    FREEMEMINFO *fm = &fmi;

    if (is_emx_exe()) {
	puts("emx is running; no DPMI services");
	return;
    }

    if (GetFreeMemInfo(fm))
	return;

    printf("Largest available block           : %lu Bytes = %lu KB\n",
	   fm->LargestFree, fm->LargestFree >> 10);
    printf("Number free pages                 : %4lu = %4lu KB\n"
	   ,fm->MaxUnlockedPages, fm->MaxUnlockedPages * 4);
    printf("Number free pages to lock         : %4lu = %4lu KB\n"
	   ,fm->MaxLockedPages, fm->MaxLockedPages * 4);
    printf("Number pages of linear addr space : %4lu = %4lu KB\n"
	   ,fm->AddressSpacePages, fm->AddressSpacePages * 4);
    printf("Number pages not locked           : %4lu = %4lu KB\n"
	   ,fm->UnlockedPages, fm->UnlockedPages * 4);
    printf("Number pages not used             : %4lu = %4lu KB\n"
	   ,fm->UnusedPages, fm->UnusedPages * 4);
    printf("Number pages managed by the Dpmi  : %4lu = %4lu KB\n"
	   ,fm->PhysicalPages, fm->PhysicalPages * 4);
    printf("Number pages free addr space      : %4lu = %4lu KB\n"
	   ,fm->FreeAddressSpacePages, fm->FreeAddressSpacePages * 4);

    if (fm->PagingFilePages <= 0xFFFFFL)
	printf("Number pages in swapfile          : %4lu = %4lu KB\n"
	       ,fm->PagingFilePages, fm->PagingFilePages * 4);
    else
	printf("DPMI host paging partition        : %lu Bytes = %lu MB\n"
	       ,fm->PagingFilePages, fm->PagingFilePages >> 20);
}

static void PrintDescriptor(DESCRIPTOR *d)
{
    BYTE flag;

    if (!(d->access & PRESENT_BIT)) {
	printf("Not Present\n");
	return;
    }
    if (d->access & SEGMENT_BIT)/* code or data selector */
	printf("Base=%02X%02X%04X Limit=%01X%04X %s DPL=%u %s %s %s %s\n",
	       d->base_hi, d->base_mi, d->base_lo,
	       d->lim_hi & LIMIT_HI_MASK, d->lim_lo,
	       (d->lim_hi & GRANULAR_BIT) ? "Pages" : "Bytes",
	       (d->access & DPL_MASK) >> 5,
	       (d->lim_hi & DEFAULT_BIT) ? "32bit" : "16bit",
	       (d->access & CODE_BIT) ?
	       (d->access & CONFIRMING_BIT) ? "CONF" : "CODE" :
	       (d->access & EXPAND_BIT) ? "EXPD" : "DATA",
	       (d->access & WRITE_BIT) ?
	       (d->access & CODE_BIT) ? "R" : "W" : "-",
	       (d->access & ACCESS_BIT) ? "ACC" : " ");

    else {			/* system selector */
	flag = d->access & (BYTE) 7;
	switch (flag) {
	case 0:
	    break;
	case 1:
	    printf("TSS%s ", (d->access & 8) ? "386" : "286");
	    break;
	case 2:
	    printf("LDT ");
	    break;
	case 3:
	    printf("BUSYTSS%s ", (d->access & 8) ? "386" : "286");
	    break;
	case 4:
	    printf("CALLGATE%s ", (d->access & 8) ? "386" : "286");
	    break;
	case 5:
	    printf("TASKGATE ");
	    break;
	case 6:
	    printf("INT_GATE%s ", (d->access & 8) ? "386" : "286");
	    break;
	case 7:
	    printf("TRAPGATE%s ", (d->access & 8) ? "386" : "286");
	    break;
	}


	if (flag <= 3) {
	    printf("Base=%02X%02X%04X Limit=%01X%04X DPL=%u\n",
		   d->base_hi, d->base_mi, d->base_lo,
		   d->lim_hi & LIMIT_HI_MASK, d->lim_lo,
		   (d->access & DPL_MASK) >> 5);
	} else {
	    printf("Sel=%04X Offset=%02X%02X%04X DPL=%u\n",
		   d->base_lo,
		   d->base_hi, d->lim_hi, d->lim_lo,
		   (d->access & DPL_MASK) >> 5);
	}
    }				/* else system descriptor */
}

void show_descriptor(int sel, int number)
{
    DESCRIPTOR desc;
    int i;

    if (is_emx_exe()) {
	puts("emx is running; no DPMI services");
	return;
    }

    for (i = 1; i <= number; i++) {
	printf("sel %X: ", sel);
	if (GetDescriptor(sel, &desc)) {
	    printf("- invalid -\n");
	    break;
	}
	PrintDescriptor(&desc);
	sel += 8;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩精品久久久久| 欧美国产精品中文字幕| 懂色av中文字幕一区二区三区| 秋霞午夜av一区二区三区| 亚洲成人第一页| 亚洲永久精品大片| 日日欢夜夜爽一区| 美女脱光内衣内裤视频久久网站| 日本中文字幕一区二区视频| 蜜桃视频一区二区三区 | 亚洲美女电影在线| 亚洲欧美偷拍另类a∨色屁股| 综合分类小说区另类春色亚洲小说欧美| 中文字幕一区二区三区不卡在线| 中文字幕一区二区三区av| 亚洲一区精品在线| 久久国产欧美日韩精品| 成人深夜在线观看| 欧美亚洲国产一卡| 欧美精品一区二区三区久久久| 国产女人18水真多18精品一级做| 亚洲人午夜精品天堂一二香蕉| 亚洲一区二区四区蜜桃| 激情文学综合丁香| 一本到不卡精品视频在线观看| 欧美人动与zoxxxx乱| 久久日一线二线三线suv| 亚洲精品视频在线看| 美脚の诱脚舐め脚责91| 成人国产精品免费观看视频| 欧美四级电影网| 国产偷国产偷亚洲高清人白洁| 亚洲六月丁香色婷婷综合久久| 美美哒免费高清在线观看视频一区二区 | 精品国产乱子伦一区| 国产精品污网站| 男女激情视频一区| 91色在线porny| 欧美sm极限捆绑bd| 亚洲精品国产a| 国产不卡在线播放| 欧美mv日韩mv亚洲| 亚洲国产一区在线观看| 国产一区二区三区黄视频 | 看国产成人h片视频| av在线一区二区| 精品99一区二区| 午夜欧美在线一二页| 国产91丝袜在线观看| 91精品国产欧美一区二区| 国产精品久久久久久户外露出| 蜜臀久久久久久久| 欧美三级视频在线| 亚洲免费观看高清完整版在线| 国产乱国产乱300精品| 这里只有精品电影| 亚洲男人的天堂av| av电影在线观看一区| 久久久青草青青国产亚洲免观| 日韩va亚洲va欧美va久久| 91成人免费在线视频| 亚洲视频一二区| 99精品视频在线观看| 中文av一区二区| 国产精品一区二区久久不卡 | 丁香桃色午夜亚洲一区二区三区| 91精品午夜视频| 日韩影院在线观看| 欧美日韩久久一区| 五月天国产精品| 欧美高清视频一二三区 | 色婷婷亚洲婷婷| 中文字幕视频一区| 色香蕉成人二区免费| 一区二区三区在线视频观看58 | 国产一区二区伦理片| 日韩精品一区二区三区蜜臀 | 老司机午夜精品| 日韩精品专区在线| 国产一区二区美女| 国产精品你懂的在线| av电影在线观看不卡| 日韩美女精品在线| 在线观看视频91| 人人狠狠综合久久亚洲| 欧美精品一区二区三区在线播放| 激情都市一区二区| 国产精品国产三级国产普通话蜜臀| 成人黄色av电影| 亚洲福利视频导航| 久久亚洲精华国产精华液| 成人性生交大片免费看中文网站| ㊣最新国产の精品bt伙计久久| 色综合婷婷久久| 日韩精品成人一区二区三区| 精品国产百合女同互慰| jlzzjlzz亚洲日本少妇| 亚洲国产乱码最新视频| 精品国产乱码久久久久久图片 | 久久久www成人免费无遮挡大片| 国产91在线观看| 亚洲第一搞黄网站| 久久蜜桃一区二区| 欧美性色aⅴ视频一区日韩精品| 捆绑调教一区二区三区| 亚洲欧洲精品一区二区精品久久久 | 18成人在线视频| 欧美日韩亚洲另类| 国产iv一区二区三区| 亚洲高清在线视频| 日本一区二区综合亚洲| 777久久久精品| av在线一区二区三区| 日本中文字幕一区二区有限公司| 欧美国产激情一区二区三区蜜月| 欧美日韩国产在线观看| 成人黄色小视频| 日本不卡不码高清免费观看| 国产精品国产三级国产普通话蜜臀 | 成人网页在线观看| 免费成人在线视频观看| 亚洲精品va在线观看| 国产欧美日韩久久| 91精品国产入口| 欧美在线观看你懂的| 成人美女视频在线观看18| 久久99精品久久久| 亚洲h动漫在线| 中文字幕一区二区三区蜜月| 久久久久久9999| 91精品国产麻豆| 欧美日韩高清影院| 欧美视频日韩视频| 色综合久久中文综合久久97| 国产精品资源在线看| 精品一区二区三区视频| 日韩高清在线观看| 日韩精品亚洲一区二区三区免费| 亚洲美女一区二区三区| 国产精品麻豆久久久| 日本一区二区成人| 欧美国产成人精品| 国产清纯美女被跳蛋高潮一区二区久久w| 91麻豆精品国产91| 欧美久久婷婷综合色| 欧美夫妻性生活| 日韩欧美综合在线| 欧美不卡一区二区| 日韩欧美中文字幕公布| 精品久久一二三区| 2020国产精品自拍| 中文字幕av一区 二区| 国产嫩草影院久久久久| 中文字幕av免费专区久久| 国产精品第五页| 一区二区欧美在线观看| 午夜精品久久久久久久久久| 午夜免费久久看| 麻豆精品一区二区三区| 国产一区 二区 三区一级| 国产精品一区免费视频| 不卡区在线中文字幕| 在线一区二区三区四区五区| 欧美午夜电影一区| 91麻豆精品国产91久久久久久 | 日产国产高清一区二区三区| 日本人妖一区二区| 久久精品国产成人一区二区三区 | 91碰在线视频| 欧美日韩美少妇| 精品国内片67194| 中文字幕av一区二区三区高| 亚洲精品免费电影| 日本三级韩国三级欧美三级| 国产精品影视在线| 在线视频一区二区三| 日韩欧美的一区| 中文字幕一区二区三区色视频| 亚洲福利一二三区| 国产精品一区二区久久精品爱涩 | 7777精品久久久大香线蕉| 欧美草草影院在线视频| **欧美大码日韩| 全部av―极品视觉盛宴亚洲| 成人免费高清视频在线观看| 欧美色图第一页| 久久蜜臀精品av| 丝袜a∨在线一区二区三区不卡| 国产精品12区| 在线播放欧美女士性生活| 国产女人水真多18毛片18精品视频| 亚洲一区二区三区自拍| 国产综合色在线视频区| 欧美亚洲禁片免费| 亚洲国产精品ⅴa在线观看| 三级在线观看一区二区| av亚洲精华国产精华精华| 日韩欧美成人激情| 亚洲亚洲人成综合网络| 成人av网站免费|