一.英文环境下使用中文输入法
步骤1. cp -a /usr/share/locale/zh_CN/LC_MESSAGES/*scim* /usr/share/locale/en_US/LC_MESSAGES/
将中文环境下输入法的配置文件复制到英文环境的配置目录下
步骤2. 默认英文环境下是不启动scim,需修改 /etc/X11/xinit/xinitrc.d/xinput.sh
找到_language_list="as bn gu ...", 在其中加入en, 即修改为_language_list="as bn en gu ..." 这样在英文环境下也会自动开启scim输入法
配置完后,注销一下就可以了(Fedora 8 x86_64下配置成功!)
二.开启VI的语法高亮,添加汇编语言高亮关键字
步骤一:在Fedora下使用vi无法高亮显示,而使用vim则可以,输惯了vi还真不习惯输vim了,不过这在Linux里是再简单不过的事情了,修改一下~/.bashrc 添加一行 alias vi='vim',以后凡是在shell中输入vi,都会被当作vim来解析了!
步骤二:给vim写个配置文件,我的.vimrc如下,详细的参数可以自己参考vim手册
1 set cindent
2 set autoindent
3 set smartindent
4 set modeline
5 set ruler
6 set showcmd
7 set showfulltag
8 set showmode
9 set smartcase
10 set imcmdline
11 set previewwindow
12 set hlsearch
13 set number
14 set tabstop=4
15 set shiftwidth=4
16 set history=50
17 set background=dark
18 filetype on
19 syntax on
步骤三:修改/usr/share/vim/vim71/syntax/asm.vim 添加asm关键字(寄存器和汇编指令), 语法检查和高亮颜色,修改后的asm.vim如下:
" Vim syntax file
" Language: GNU Assembler
" Maintainer: Kevin Dahlhausen <kdahlhaus@yahoo.com>
" Last Change: 2002 Sep 19
" Modify By LuYunFei 2007 Dec 23
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
syn case ignore
" storage types
syn match asmType "\.long"
syn match asmType "\.ascii"
syn match asmType "\.asciz"
syn match asmType "\.byte"
syn match asmType "\.double"
syn match asmType "\.float"
syn match asmType "\.hword"
syn match asmType "\.int"
syn match asmType "\.octa"
syn match asmType "\.quad"
syn match asmType "\.short"
syn match asmType "\.single"
syn match asmType "\.space"
syn match asmType "\.string"
syn match asmType "\.word"
syn match asmLabel "[a-z_][a-z0-9_]*:"he=e-1
syn match asmIdentifier "[a-z_][a-z0-9_]*"
" x86_64 asm generl register keywords
syn keyword asmRegister AL BL CL DL AH BH CH DH SIL DIL BPL SPL
syn keyword asmRegister R8B R9B R10B R11B R12B R13B R14B R15B
syn keyword asmRegister AX BX CX DX SI DI BP SP
syn keyword asmRegister R8W R9W R10W R11W R12W R13W R14W R15W
syn keyword asmRegister EAX EBX ECX EDX ESI EDI EBP ESP
syn keyword asmRegister R8D R9D R10D R11D R12D R13D R14D R15D
syn keyword asmRegister RAX RBX RCX RDX RSI RDI RBP RSP
syn keyword asmRegister R8 R9 R10 R11 R12 R13 R14 R15
syn keyword asmRegister CS DS ES FS GS SS
" x86_64 control register keywords
syn keyword asmRegister CR0 CR2 CR3 CR4 CR8
" x86_64 system-flags register keywords
syn keyword asmRegister FLAGS RFLAGS
" x86_64 debug register keywords
syn keyword asmRegister DR0 DR1 DR2 DR3 DR6 DR7
" x86_64 Descriptor-table register keywords
syn keyword asmRegister GDTR IDTR LDTR
" x84_64 xmm data register keywords
syn keyword asmRegister xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7
syn keyword asmRegister xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15
" x84_64 mmx data register keywords
syn keyword asmRegister mmx0 mmx1 mmx2 mmx3 mmx4 mmx5 mmx6 mmx7
" x86_64 float-point register keywords
syn keyword asmRegister fpr0 fpr1 fpr2 fpr3 fpr4 fpr5 fpr6 fpr7
" x86_64 asm instruction keywords
syn keyword asmInstruction AAA AAD AAM AAS
syn keyword asmInstruction ADC[L] ADD[L] SBB[L] SUB[L]
syn keyword asmInstruction ADC[Q] ADD[Q] SBB[Q] SUB[Q]
syn keyword asmInstruction AND[L] NOT[L] XOR[L] NEG[L] OR[L] TEST[L]
syn keyword asmInstruction AND[Q] NOT[Q] XOR[Q] NEG[Q] OR[Q] TEST[Q]
syn keyword asmInstruction BT BTC[L] BTS[L] BTR[L]
syn keyword asmInstruction CALL LEAVE[L] RET LRET
syn keyword asmInstruction CBW CWDE CDQE CWD CDQ CQO
syn keyword asmInstruction CLC STC CMC
syn keyword asmInstruction CLD STD CLFLUSH
syn keyword asmInstruction CMP CMPS CMPSB CMPSW CMPSD CMPSQ
syn keyword asmInstruction CMPXCHG CMPXCHG8B CMPXCHG16B
syn keyword asmInstruction CPUID
syn keyword asmInstruction DAA DAS DEC[L] INC[L]
syn keyword asmInstruction INS INSB INSW INSD INT INTO
syn keyword asmInstruction LAHF LDS LES LFS LGS LSS
syn keyword asmInstruction LEA[L] LEA[Q] LFENCE
syn keyword asmInstruction LODS LODSB LODSW LODSD LODSQ
syn keyword asmInstruction LOOP LOOPE LOOPNE LOOPZ LOOPNZ
syn keyword asmInstruction MFENCE MOV[D] MOVL MOVQ
" x86_64 asm CMOVcc Instruction
syn keyword asmInstruction CMOVO CMOVNO CMOVB CMOVNB
syn keyword asmInstruction CMOVC CMOVNC CMOVAE CMOVNAE
syn keyword asmInstruction CMOVZ CMOVNZ CMOVE CMOVNE
syn keyword asmInstruction CMOVBE CMOVNBE CMOVA CMOVNA
syn keyword asmInstruction CMOVS CMOVNS CMOVP CMOVNP
syn keyword asmInstruction CMOVPE CMOVPO CMOVL CMOVNL
syn keyword asmInstruction CMOVGE CMOVNGE CMOVLE CMOVNLE CMOVG CMOVNG
syn keyword asmInstruction MOVMSKPD MOVMSKPS MOVNTI
syn keyword asmInstruction MOVS MOVSB MOVSW MOVSD MOVSQ
syn keyword asmInstruction MOVSX MOVSXD MOVZX
syn keyword asmInstruction DIV MUL IMUL IDIV
syn keyword asmInstruction NOP IN OUT
syn keyword asmInstruction OUTS OUTSB OUTSW OUTSD
syn keyword asmInstruction PAUSE
syn keyword asmInstruction POP[L] POP[Q] POPA POPAD POPF[L] POPFD POPFQ
syn keyword asmInstruction PREFETCH PREFETCHW PREFETCHLEVEL
syn keyword asmInstruction PUSH[L] PUSH[Q] PUSHA PUSHAD PUSHF PUSHFD PUSHFQ
syn keyword asmInstruction RCL RCR ROL ROR
syn keyword asmInstruction SAHF SHL[L] SHR[L] SHL[Q] SHR[Q] SHLD SHRD
syn keyword asmInstruction SAL[L] SAL[Q] SAR[L] SAR[Q]
syn keyword asmInstruction SCAS SCASB SCASW SCASD SCASD SCASQ
syn keyword asmInstruction SETO SETNO SETB SETNB SETC SETNC SETAE SETNAE
syn keyword asmInstruction SETZ SETE SETNZ SETNE SETBE SETNBE SETA SETNA
syn keyword asmInstruction SETS SETNS SETP SETNP SETPO SETPE SETL SETNL
syn keyword asmInstruction SETGE SETNGE SETLE SETNLE SETG SETNG
syn keyword asmInstruction SFENCE REP STOS[L] STOSB STOSW STOSD STOSQ
syn keyword asmInstruction XADD XCHG XLAT XLATB
" x86_64 asm instruction -- jcc keywords
syn keyword asmInstruction JO JNO JB JNB JC JNC JAE JNAE JZ JNZ JE JNE
syn keyword asmInstruction JA JNA JS JNS JBE JNBE JP JNP JPE JPO JL JNL
syn keyword asmInstruction JGE JNGE JLE JNLE JG JNG JMP JCXZ JECXZ JRCXZ
" x86_64 asm instruction -- system instruction
syn keyword asmInstruction ARPL CLGI CLI CLTS
syn keyword asmInstruction HLT INT INVD INVLPG INVLPGA IRET IRETD IRETQ
syn keyword asmInstruction LAR LGDT LIDT LLDT LMSW LSL LTR
syn keyword asmInstruction RDMSR RDPMC RDTSC RDTSCP RSM
syn keyword asmInstruction SGDT SIDT SLDT STI STGI STR SMSW SWAPGS SKINIT
syn keyword asmInstruction SYSCALL SYSENTER SYSEXIT SYSRET
syn keyword asmInstruction UD2 VERR VERW VMLOAD VMMCALL VMRUN VMSAVE
syn keyword asmInstruction WBINVD WRMSR
" Various #'s as defined by GAS ref manual sec 3.6.2.1
" Technically, the first decNumber def is actually octal,
" since the value of 0-7 octal is the same as 0-7 decimal,
" I prefer to map it as decimal:
syn match decNumber "0\+[1-7]\=[\t\n$,; ]"
syn match decNumber "[1-9]\d*"
syn match octNumber "0[0-7][0-7]\+"
syn match hexNumber "0[xX][0-9a-fA-F]\+"
syn match binNumber "0[bB][0-1]*"
syn match asmSpecialComment ";\*\*\*.*"
syn match asmComment ";.*"hs=s+1
syn match asmInclude "\.include"
syn match asmInclude "#include"
syn match asmCond "\.if"
syn match asmCond "\.else"
syn match asmCond "\.endif"
syn match asmPreCond "#if"
syn match asmPreCond "#ifdef"
syn match asnPreCond "#ifndef"
syn match asmPreCond "#else"
syn match asmPreCond "#endif"
syn match asmMacro "\.macro"
syn match asmMacro "\.endm"
syn match asmDirective "\.[a-z][a-z]\+"
syn region cComment start="//" skip="\\$" end="$"
syn region cComment start="/\*" end="\*/"
syn case match
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_asm_syntax_inits")
if version < 508
let did_asm_syntax_inits = 1
command -nargs=+ HiLink hi link
else
command -nargs=+ HiLink hi def link
endif
" The default methods for highlighting. Can be overridden later
HiLink asmSection Special
HiLink asmLabel Label
HiLink asmComment Comment
HiLink asmDirective Statement
HiLink asmInclude Number
HiLink asmPreCond Number
HiLink asmCond Macro
HiLink asmMacro Macro
HiLink hexNumber Number
HiLink decNumber Number
HiLink octNumber Number
HiLink binNumber Number
HiLink asmSpecialComment Comment
HiLink asmIdentifier Identifier
HiLink asmType Type
" My default color overrides:
" hi asmSpecialComment ctermfg=red
" hi asmIdentifier ctermfg=lightcyan
" hi asmType ctermbg=black ctermfg=brown
hi asmRegister ctermfg=red
hi asmInstruction ctermfg=blue
hi asmComment ctermfg=lightgreen
hi cComment ctermfg=lightgreen
delcommand HiLink
endif
let b:current_syntax = "asm"
" vim: ts=8
所有汇编指令根据AMD处理器手册添加,在AMD处理器手册是没有MOVL MOVQ这样的指令的,是gnu as的语法为了区别32位和64位的指令操作而采用的语法规则,同时现在汇编语言中一般都已经支持C语言的注释方式以及预编译指令,所以在语法文件中也相应的添加,当然这个语法规则文件还不完善,大家可以参考一下vi手册的语法规测配置,有在学习汇编语言的可以直接复制使用,现在我也可以好好地用vi来写汇编程序了,哈哈!