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

📄 nasm.sl

📁 开源的nasm编译器源码,研究编译器原理很有帮且
💻 SL
字号:
% This file defines a NASM editor mode for the JED editor.% JED's home page is http://space.mit.edu/~davis/jed.html.%% To install, copy this file into your JED_LIBRARY directory% (/usr/local/jed/lib or C:\JED\LIB or whatever), then add the% following lines to your .jedrc or jed.rc file:%   autoload("nasm_mode", "nasm");%   add_mode_for_extension("nasm", "asm");% (you can of course replace "asm" with whatever file extension% you like to use for your NASM source files).variable Nasm_Instruction_Indent = 10;variable Nasm_Comment_Column = 33;variable Nasm_Comment_Space = 1;variable nasm_kw_2 = strcat("ahalaxbhblbpbtbxchclcscxdbdddhdidldqdsdtdwdxes",			    "fsgsinjajbjcjejgjljojpjsjzorsispssto");variable nasm_kw_3 = strncat("a16a32aaaaadaamaasadcaddandbsfbsrbtcbtrbtscbw",			     "cdqclccldclicmccmpcr0cr2cr3cr4cwddaadasdecdiv",			     "dr0dr1dr2dr3dr6dr7eaxebpebxecxediedxequesiesp",			     "farfldfsthltincintjaejbejgejlejmpjnajnbjncjne",			     "jngjnljnojnpjnsjnzjpejpolarldslealeslfslgslsl",			     "lssltrmm0mm1mm2mm3mm4mm5mm6mm7movmulnegnopnot",			     "o16o32outpopporrclrcrrepretrolrorrsmsalsarsbb",			     "segshlshrsmist0st1st2st3st4st5st6st7stcstdsti",			     "strsubtr3tr4tr5tr6tr7wrtxor", 9);variable nasm_kw_4 = strncat("arplbytecallcltscwdeemmsfabsfaddfbldfchsfcom",			     "fcosfdivfenifildfistfld1fldzfmulfnopfsinfstp",			     "fsubftstfxamfxchibtsidivimulinsbinsdinswint1",			     "int3intoinvdiretjcxzjnaejnbejngejnlelahflgdt",			     "lidtlldtlmswlocklongloopmovdmovqnearpandpopa",			     "popfpushpxorreperepzresbresdresqrestreswretf",			     "retnsahfsalcsetasetbsetcsetesetgsetlsetosetp",			     "setssetzsgdtshldshrdsidtsldtsmswtestumovverr",			     "verwwaitwordxaddxbtsxchg", 9);variable nasm_kw_5 = strncat("boundbswapcmovacmovbcmovccmovecmovgcmovlcmovo",			     "cmovpcmovscmovzcmpsbcmpsdcmpswcpuiddwordenter",			     "f2xm1faddpfbstpfclexfcomifcompfdisifdivpfdivr",			     "ffreefiaddficomfidivfimulfinitfistpfisubfldcw",			     "fldpifmulpfpremfptanfsavefsqrtfstcwfstswfsubp",			     "fsubrfucomfyl2xicebpint01iretdiretwjecxzleave",			     "lodsblodsdlodswloopeloopzmovsbmovsdmovswmovsx",			     "movzxoutsboutsdoutswpaddbpadddpaddwpandnpopad",			     "popawpopfdpopfwpslldpsllqpsllwpsradpsrawpsrld",			     "psrlqpsrlwpsubbpsubdpsubwpushapushfqwordrdmsr",			     "rdpmcrdtscrepnerepnzscasbscasdscaswsetaesetbe",			     "setgesetlesetnasetnbsetncsetnesetngsetnlsetno",			     "setnpsetnssetnzsetpesetposhortstosbstosdstosw",			     "timestwordwrmsrxlatb", 14);variable nasm_kw_6 = strncat("cmovaecmovbecmovgecmovlecmovnacmovnbcmovnc",			     "cmovnecmovngcmovnlcmovnocmovnpcmovnscmovnz",			     "cmovpecmovpofcmovbfcmovefcmovufcomipfcompp",			     "fdivrpficompfidivrfisubrfldenvfldl2efldl2t",			     "fldlg2fldln2fpatanfprem1frstorfscalefsetpm",			     "fstenvfsubrpfucomifucompincbininvlpgloopne",			     "loopnzpaddsbpaddswpmulhwpmullwpsubsbpsubsw",			     "pushadpushawpushfdpushfwsetnaesetnbesetnge",			     "setnlewbinvd", 9);variable nasm_kw_7 = strncat("cmovnaecmovnbecmovngecmovnlecmpxchgfcmovbe",			     "fcmovnbfcmovnefcmovnufdecstpfincstpfrndint",			     "fsincosfucomipfucomppfxtractfyl2xp1loadall",			     "paddusbpadduswpcmpeqbpcmpeqdpcmpeqwpcmpgtb",			     "pcmpgtdpcmpgtwpmaddwdpsubusbpsubusw", 5);variable nasm_kw_8 = "fcmovnbepackssdwpacksswbpackuswb";variable nasm_kw_9 = strcat("cmpxchg8bpunpckhbwpunpckhdqpunpckhwdpunpcklbw",			    "punpckldqpunpcklwd");variable nasm_kw_10 = "cmpxchg486loadall286";define nasm_indent_line() {    variable word, len, e, c;    e = eolp();    push_spot();    EXIT_BLOCK {	pop_spot();	if (what_column() <= Nasm_Instruction_Indent)	    skip_white();    }    bol_skip_white();    c = what_column();    if (orelse       {looking_at_char(';')}       {looking_at_char('#')}       {looking_at_char('[')}) {	bol_trim();	pop_spot();	EXIT_BLOCK {	}	return;    }    if (looking_at_char('%')) {	go_right_1();	!if (orelse	    {looking_at_char('$')}	    {looking_at_char('%')}	    {looking_at_char('+')}	    {looking_at_char('-')}	    {looking_at_char('0')}	    {looking_at_char('1')}	    {looking_at_char('2')}	    {looking_at_char('3')}	    {looking_at_char('4')}	    {looking_at_char('5')}	    {looking_at_char('6')}	    {looking_at_char('7')}	    {looking_at_char('8')}	    {looking_at_char('9')}) {	    bol_trim();	    pop_spot();	    EXIT_BLOCK {	    }	    return;	}	go_left_1();    }    push_mark();    skip_chars("%$+-");    skip_chars("0-9a-zA-Z_.");    word = bufsubstr();    if (orelse       {c == 1}       {looking_at_char(':')}) {	push_spot();	bol_trim();	pop_spot();	len = strlen(word);	if (looking_at_char(':')) {	    go_right_1();	    len++;	}	trim();	if (e or not(eolp())) {	    if (len >= Nasm_Instruction_Indent) {		pop();		whitespace(1);	    } else		whitespace(Nasm_Instruction_Indent - len);	    if (e) {		pop_spot();		eol();		push_spot();	    }	}    } else {	bol_trim();	whitespace(Nasm_Instruction_Indent);    }}define nasm_newline_indent {    push_spot();    bol_skip_white();    if (eolp())	trim();    pop_spot();    newline();    nasm_indent_line();}define nasm_bol_self_ins {    push_spot();    bskip_white();    bolp();    pop_spot();    call("self_insert_cmd");    % Grotty: force immediate update of the syntax highlighting.    insert_char('.');    deln(left(1));    if (())	nasm_indent_line();}define nasm_self_ins_ind {    call("self_insert_cmd");    % Grotty: force immediate update of the syntax highlighting.    insert_char('.');    deln(left(1));    nasm_indent_line();}define nasm_insert_comment {    variable spc;    bol_skip_white();    if (looking_at_char(';')) {	bol_trim();	go_right(1);	skip_white();	return;    } else if (eolp()) {	bol_trim();	insert("; ");	return;    }    forever {	skip_chars("^;\n'\"");	if (looking_at_char('\'')) {	    go_right_1();	    skip_chars("^'\n");	    !if (eolp())		go_right_1();	} else if (looking_at_char('\"')) {	    go_right_1();	    skip_chars("^\"\n");	    !if (eolp())		go_right_1();	} else if (looking_at_char(';')) {	    !if (bolp()) {		go_left_1();		trim();		!if (looking_at_char(';'))		    go_right_1();	    }	    break;	} else {	    break;	}    }    spc = Nasm_Comment_Column - what_column();    if (spc < Nasm_Comment_Space)	spc = Nasm_Comment_Space;    whitespace(spc);    if (eolp()) {	insert("; ");    } else {	go_right_1();	skip_white();    }}$1 = "NASM";create_syntax_table($1);define_syntax (";", "", '%', $1);define_syntax ("([", ")]", '(', $1);define_syntax ('"', '"', $1);define_syntax ('\'', '\'', $1);define_syntax ("0-9a-zA-Z_.@#", 'w', $1);define_syntax ("-+0-9a-fA-F.xXL", '0', $1);define_syntax (",:", ',', $1);define_syntax ('%', '#', $1);define_syntax ("|^&<>+-*/%~", '+', $1);set_syntax_flags($1,1);#ifdef HAS_DFA_SYNTAXenable_highlight_cache("nasm.dfa", $1);define_highlight_rule(";.*$", "comment", $1);define_highlight_rule("[A-Za-z_\\.\\?][A-Za-z0-9_\\.\\?\\$#@~]*",		      "Knormal", $1);define_highlight_rule("$([A-Za-z_\\.\\?][A-Za-z0-9_\\.\\?\\$#@~]*)?",		      "normal", $1);define_highlight_rule("[0-9]+(\\.[0-9]*)?([Ee][\\+\\-]?[0-9]*)?",		      "number", $1);define_highlight_rule("[0-9]+[QqBb]", "number", $1);define_highlight_rule("(0x|\\$[0-9A-Fa-f])[0-9A-Fa-f]*", "number", $1);define_highlight_rule("[0-9A-Fa-f]+[Hh]", "number", $1);define_highlight_rule("\"[^\"]*\"", "string", $1);define_highlight_rule("\"[^\"]*$", "string", $1);define_highlight_rule("'[^']*'", "string", $1);define_highlight_rule("'[^']*$", "string", $1);define_highlight_rule("[\\(\\)\\[\\],:]*", "delimiter", $1);define_highlight_rule("^[ \t]*#", "PQpreprocess", $1);define_highlight_rule("^[ \t]*\\%{?[^%\\$\\+\\-0-9]", "PQpreprocess", $1);define_highlight_rule("^%$", "preprocess", $1);define_highlight_rule("[\\|\\^&<>\\+\\-\\*/%~]*", "operator", $1);define_highlight_rule("%([%\\$]?-?[0-9A-Za-z_\\.\\?\\$~@]+|{[^}]*}?)",		      "preprocess", $1);define_highlight_rule("[ \t]*", "normal", $1);define_highlight_rule(".", "normal", $1);build_highlight_table($1);#endifdefine_keywords_n($1, nasm_kw_2, 2, 0);define_keywords_n($1, nasm_kw_3, 3, 0);define_keywords_n($1, nasm_kw_4, 4, 0);define_keywords_n($1, nasm_kw_5, 5, 0);define_keywords_n($1, nasm_kw_6, 6, 0);define_keywords_n($1, nasm_kw_7, 7, 0);define_keywords_n($1, nasm_kw_8, 8, 0);define_keywords_n($1, nasm_kw_9, 9, 0);define_keywords_n($1, nasm_kw_10, 10, 0);define_keywords_n($1, "org", 3, 1);define_keywords_n($1, "bitsiend", 4, 1);define_keywords_n($1, "aligngroupstruc", 5, 1);define_keywords_n($1, "alignbcommonexternglobalistruc", 6, 1);define_keywords_n($1, "sectionsegmentlibrary", 7, 1);define_keywords_n($1, "absoluteendstruc", 8, 1);define_keywords_n($1, "uppercase", 9, 1);!if (keymap_p ($1)) make_keymap ($1);definekey("nasm_bol_self_ins", ";", $1);definekey("nasm_bol_self_ins", "#", $1);definekey("nasm_bol_self_ins", "%", $1);definekey("nasm_bol_self_ins", "[", $1);definekey("nasm_self_ins_ind", ":", $1);definekey("nasm_insert_comment", "^[;", $1);define nasm_mode {    set_mode("NASM", 4);    use_keymap ("NASM");    use_syntax_table ("NASM");    set_buffer_hook ("indent_hook", "nasm_indent_line");    set_buffer_hook ("newline_indent_hook", "nasm_newline_indent");    runhooks("nasm_mode_hook");}

⌨️ 快捷键说明

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