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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? labels.c

?? 32位匯編編譯器nasm源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* labels.c  label handling for the Netwide Assembler
 *
 * The Netwide Assembler is copyright (C) 1996 Simon Tatham and
 * Julian Hall. All rights reserved. The software is
 * redistributable under the licence given in the file "Licence"
 * distributed in the NASM archive.
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "nasm.h"
#include "nasmlib.h"

/*
 * A local label is one that begins with exactly one period. Things
 * that begin with _two_ periods are NASM-specific things.
 *
 * If TASM compatibility is enabled, a local label can also begin with
 * @@, so @@local is a TASM compatible local label. Note that we only
 * check for the first @ symbol, although TASM requires both.
 */
#define islocal(l)                                              \
	(tasm_compatible_mode ?					\
	(((l)[0] == '.' || (l)[0] == '@') && (l)[1] != '.') :   \
	((l)[0] == '.' && (l)[1] != '.'))
#define islocalchar(c)						\
	(tasm_compatible_mode ?                                  \
	((c) == '.' || (c) == '@') :                            \
	((c) == '.'))

#define LABEL_BLOCK  32         /* no. of labels/block */
#define LBLK_SIZE    (LABEL_BLOCK*sizeof(union label))
#define LABEL_HASHES 37         /* no. of hash table entries */

#define END_LIST -3             /* don't clash with NO_SEG! */
#define END_BLOCK -2
#define BOGUS_VALUE -4

#define PERMTS_SIZE  4096       /* size of text blocks */
#if (PERMTS_SIZE > IDLEN_MAX)
#error "IPERMTS_SIZE must be less than or equal to IDLEN_MAX"
#endif

/* values for label.defn.is_global */
#define DEFINED_BIT 1
#define GLOBAL_BIT 2
#define EXTERN_BIT 4

#define NOT_DEFINED_YET 0
#define TYPE_MASK 3
#define LOCAL_SYMBOL (DEFINED_BIT)
#define GLOBAL_PLACEHOLDER (GLOBAL_BIT)
#define GLOBAL_SYMBOL (DEFINED_BIT|GLOBAL_BIT)

union label {                   /* actual label structures */
    struct {
        long segment, offset;
        char *label, *special;
        int is_global, is_norm;
    } defn;
    struct {
        long movingon, dummy;
        union label *next;
    } admin;
};

struct permts {                 /* permanent text storage */
    struct permts *next;        /* for the linked list */
    int size, usage;            /* size and used space in ... */
    char data[PERMTS_SIZE];     /* ... the data block itself */
};

extern int global_offset_changed;       /* defined in nasm.c */

static union label *ltab[LABEL_HASHES]; /* using a hash table */
static union label *lfree[LABEL_HASHES];        /* pointer into the above */
static struct permts *perm_head;        /* start of perm. text storage */
static struct permts *perm_tail;        /* end of perm. text storage */

static void init_block(union label *blk);
static char *perm_copy(char *string1, char *string2);

static char *prevlabel;

static int initialised = FALSE;

char lprefix[PREFIX_MAX] = { 0 };
char lpostfix[PREFIX_MAX] = { 0 };

/*
 * Internal routine: finds the `union label' corresponding to the
 * given label name. Creates a new one, if it isn't found, and if
 * `create' is TRUE.
 */
static union label *find_label(char *label, int create)
{
    int hash = 0;
    char *p, *prev;
    int prevlen;
    union label *lptr;

    if (islocal(label))
        prev = prevlabel;
    else
        prev = "";
    prevlen = strlen(prev);
    p = prev;
    while (*p)
        hash += *p++;
    p = label;
    while (*p)
        hash += *p++;
    hash %= LABEL_HASHES;
    lptr = ltab[hash];
    while (lptr->admin.movingon != END_LIST) {
        if (lptr->admin.movingon == END_BLOCK) {
            lptr = lptr->admin.next;
            if (!lptr)
                break;
        }
        if (!strncmp(lptr->defn.label, prev, prevlen) &&
            !strcmp(lptr->defn.label + prevlen, label))
            return lptr;
        lptr++;
    }
    if (create) {
        if (lfree[hash]->admin.movingon == END_BLOCK) {
            /*
             * must allocate a new block
             */
            lfree[hash]->admin.next =
                (union label *)nasm_malloc(LBLK_SIZE);
            lfree[hash] = lfree[hash]->admin.next;
            init_block(lfree[hash]);
        }

        lfree[hash]->admin.movingon = BOGUS_VALUE;
        lfree[hash]->defn.label = perm_copy(prev, label);
        lfree[hash]->defn.special = NULL;
        lfree[hash]->defn.is_global = NOT_DEFINED_YET;
        return lfree[hash]++;
    } else
        return NULL;
}

int lookup_label(char *label, long *segment, long *offset)
{
    union label *lptr;

    if (!initialised)
        return 0;

    lptr = find_label(label, 0);
    if (lptr && (lptr->defn.is_global & DEFINED_BIT)) {
        *segment = lptr->defn.segment;
        *offset = lptr->defn.offset;
        return 1;
    } else
        return 0;
}

int is_extern(char *label)
{
    union label *lptr;

    if (!initialised)
        return 0;

    lptr = find_label(label, 0);
    if (lptr && (lptr->defn.is_global & EXTERN_BIT))
        return 1;
    else
        return 0;
}

void redefine_label(char *label, long segment, long offset, char *special,
                    int is_norm, int isextrn, struct ofmt *ofmt,
                    efunc error)
{
    union label *lptr;
    int exi;

    /* This routine possibly ought to check for phase errors.  Most assemblers
     * check for phase errors at this point.  I don't know whether phase errors
     * are even possible, nor whether they are checked somewhere else
     */

    (void)segment;              /* Don't warn that this parameter is unused */
    (void)special;              /* Don't warn that this parameter is unused */
    (void)is_norm;              /* Don't warn that this parameter is unused */
    (void)isextrn;              /* Don't warn that this parameter is unused */
    (void)ofmt;                 /* Don't warn that this parameter is unused */

#ifdef DEBUG
#if DEBUG<3
    if (!strncmp(label, "debugdump", 9))
#endif
        error(ERR_DEBUG, "redefine_label (%s, %ld, %08lx, %s, %d, %d)",
              label, segment, offset, special, is_norm, isextrn);
#endif

    lptr = find_label(label, 1);
    if (!lptr)
        error(ERR_PANIC, "can't find label `%s' on pass two", label);

    if (!islocal(label)) {
        if (!islocalchar(*label) && lptr->defn.is_norm)
            prevlabel = lptr->defn.label;
    }

    global_offset_changed |= (lptr->defn.offset != offset);
    lptr->defn.offset = offset;

    if (pass0 == 1) {
        exi = !!(lptr->defn.is_global & GLOBAL_BIT);
        if (exi) {
            char *xsymbol;
            int slen;
            slen = strlen(lprefix);
            slen += strlen(lptr->defn.label);
            slen += strlen(lpostfix);
            slen++;             /* room for that null char */
            xsymbol = nasm_malloc(slen);
            snprintf(xsymbol, slen, "%s%s%s", lprefix, lptr->defn.label,
                     lpostfix);

            ofmt->symdef(xsymbol, segment, offset, exi,
                         special ? special : lptr->defn.special);
            ofmt->current_dfmt->debug_deflabel(xsymbol, segment, offset,
                                               exi,
                                               special ? special : lptr->
                                               defn.special);
/**	nasm_free(xsymbol);  ! outobj.c stores the pointer; ouch!!! **/
        } else {
            if ((lptr->defn.is_global & (GLOBAL_BIT | EXTERN_BIT)) !=
                EXTERN_BIT) {
                ofmt->symdef(lptr->defn.label, segment, offset, exi,
                             special ? special : lptr->defn.special);
                ofmt->current_dfmt->debug_deflabel(label, segment, offset,
                                                   exi,
                                                   special ? special :
                                                   lptr->defn.special);
            }
        }
    }
    /* if (pass0 == 1) */
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.av亚洲| 婷婷丁香久久五月婷婷| 成人午夜电影小说| 欧美国产一区在线| 91视频一区二区| 一区二区三区四区中文字幕| 欧美最新大片在线看| 日本中文字幕一区二区视频| 欧美成人福利视频| 成人aa视频在线观看| 亚洲女人小视频在线观看| 欧美情侣在线播放| 韩国女主播成人在线| 国产精品久久久久久久久免费樱桃 | 亚洲免费av在线| 欧美日韩黄色影视| 狠狠色丁香久久婷婷综| 国产精品天干天干在观线| 一本久道久久综合中文字幕| 视频一区二区三区入口| 久久综合成人精品亚洲另类欧美 | av在线不卡电影| 亚洲一区二区三区视频在线播放| 欧美一级搡bbbb搡bbbb| 成人一级视频在线观看| 亚洲高清免费观看| 国产日产欧美一区| 欧美三级日韩在线| 顶级嫩模精品视频在线看| 亚洲电影一区二区| 国产日韩欧美a| 欧美日韩在线播| 国产99久久久精品| 奇米色777欧美一区二区| 亚洲欧洲精品天堂一级| 精品国一区二区三区| 91福利国产精品| 国产白丝精品91爽爽久久| 亚洲国产成人av| 中文字幕一区视频| 精品奇米国产一区二区三区| 日本道精品一区二区三区| 国产美女主播视频一区| 亚洲成年人影院| 亚洲天堂久久久久久久| 久久精子c满五个校花| 777欧美精品| 色94色欧美sute亚洲13| 国产a久久麻豆| 精品一区二区三区在线观看| 亚洲一区中文在线| 亚洲人成在线观看一区二区| 久久午夜色播影院免费高清| 欧美一二三区在线| 在线电影一区二区三区| 色乱码一区二区三区88| www.日韩精品| 国产经典欧美精品| 久久成人羞羞网站| 轻轻草成人在线| 午夜亚洲国产au精品一区二区| 国产精品久久久久久福利一牛影视| 精品国产凹凸成av人导航| 91精品国产综合久久久久| 欧美在线综合视频| 在线视频综合导航| 在线亚洲欧美专区二区| 91免费观看在线| 91久久人澡人人添人人爽欧美| 91在线无精精品入口| 成人免费毛片嘿嘿连载视频| 国产麻豆一精品一av一免费| 国产在线不卡一卡二卡三卡四卡| 久久99热国产| 美女被吸乳得到大胸91| 麻豆一区二区在线| 极品美女销魂一区二区三区免费| 另类小说一区二区三区| 久久99国产精品久久99| 黑人巨大精品欧美黑白配亚洲| 国产一区三区三区| 国产经典欧美精品| 成人毛片视频在线观看| 波多野结衣亚洲一区| 色综合久久久久久久久久久| 在线免费观看日韩欧美| 欧美视频在线一区二区三区| 欧美午夜精品久久久| 精品视频在线免费观看| 91精品国产综合久久福利软件| 日韩欧美色综合网站| 欧美精品一区二区高清在线观看| 久久久久久一级片| 中文字幕日韩精品一区| 亚洲综合在线观看视频| 婷婷夜色潮精品综合在线| 久久精品国产成人一区二区三区 | 91在线视频网址| 91同城在线观看| 欧美精品久久一区二区三区| 欧美一级黄色片| 久久久.com| 亚洲欧美日韩小说| 美女高潮久久久| 成人av在线看| 欧美精品久久一区| 欧美激情一区二区三区全黄| 一区二区三区四区视频精品免费 | 综合欧美亚洲日本| 午夜av电影一区| 国产ts人妖一区二区| 91美女在线视频| 精品国产乱码久久久久久浪潮| 一区二区中文视频| 一区二区三区在线影院| 精品一区二区免费看| 日本精品免费观看高清观看| 精品精品国产高清a毛片牛牛| 国产精品对白交换视频| 日本不卡123| 91一区二区在线| 久久综合五月天婷婷伊人| 亚洲影视资源网| 国产激情91久久精品导航| 欧美撒尿777hd撒尿| 国产拍欧美日韩视频二区| 偷窥国产亚洲免费视频| 播五月开心婷婷综合| 日韩欧美在线影院| 亚洲欧美一区二区三区久本道91| 日本视频中文字幕一区二区三区| 北岛玲一区二区三区四区| 日韩一区二区三区视频在线观看| **网站欧美大片在线观看| 国产一区二区调教| 欧美一区二区三区免费| 亚洲日本va午夜在线电影| 久久se这里有精品| 欧美日本在线观看| 亚洲欧美乱综合| 成人av动漫在线| 久久久综合精品| 久久国内精品视频| 欧美日本在线播放| 亚洲午夜激情网页| 91丝袜美女网| 综合色中文字幕| 成人性生交大合| 国产日产欧产精品推荐色| 青青草国产成人av片免费| 欧美日韩精品久久久| 一区二区三区中文字幕精品精品| k8久久久一区二区三区| 国产欧美日韩视频一区二区| 国产美女视频91| 欧美不卡123| 久草这里只有精品视频| 日韩一区二区免费视频| 三级不卡在线观看| 国产自产v一区二区三区c| 日韩欧美在线影院| 精品亚洲成a人| 欧美一级在线观看| 日韩精品一级中文字幕精品视频免费观看 | 蜜桃视频第一区免费观看| 欧美视频完全免费看| 亚洲一区二区视频| 91成人国产精品| 亚洲一区免费视频| 欧美日本免费一区二区三区| 婷婷开心激情综合| 4438x亚洲最大成人网| 青娱乐精品视频| 日韩欧美亚洲国产精品字幕久久久| 日韩成人精品在线观看| 日韩欧美国产一区二区三区| 久久精品国产免费| 久久精品一区二区三区四区| 顶级嫩模精品视频在线看| 国产精品久久久久久久久免费樱桃| 9l国产精品久久久久麻豆| 亚洲欧美日韩国产中文在线| 欧美网站一区二区| 日韩福利视频网| 久久综合一区二区| 不卡的av电影| 亚洲午夜在线电影| 日韩西西人体444www| 国产高清无密码一区二区三区| 日本一区二区综合亚洲| 91黄色在线观看| 日本大胆欧美人术艺术动态| 久久一夜天堂av一区二区三区| 国产成人av一区二区三区在线 | 欧美性猛交xxxxxx富婆| 日本va欧美va精品发布| 国产三级精品三级| 色香色香欲天天天影视综合网| 午夜国产精品影院在线观看| 久久久777精品电影网影网|