2012年4月19日 星期四

Terminal中看不清的藍色字

常為terminal的藍色字看不清楚而煩惱,好在找到了一些方法來改善.
  1. URXVT 使用以下的設定來變更顏色.
  2. 改變/etc/DIR_COLORS中的DIR設定,或".dir_colors"
Tango 風格的 terminal 
URxvt.color0: #000000
URxvt.color1: #CC0000
URxvt.color2: #4E9A06
URxvt.color3: #C4A000
URxvt.color4: #3465A4
URxvt.color5: #75507B
URxvt.color6: #06989A
URxvt.color7: #D3D7CF
URxvt.color8: #555753
URxvt.color9: #EF2929
URxvt.color10: #8AE234
URxvt.color11: #FCE94F
URxvt.color12: #729FCF
URxvt.color13: #AD7FA8
URxvt.color14: #34E2E2
URxvt.color15: #EEEEEC

2012年3月10日 星期六

C inline assembly

延伸語法(Extended ASM)

格式如下:
__asm__(assembler template 
 : output operands                  /* optional */
 : input operands                   /* optional */
 : list of clobbered registers      /* optional */
 );
"list of clobbered registers" : 告訴gcc這些registers在assembly code使用. 範例 把值從value存到result

#include 

int main(void)
{
    int value = 10;
    int result;

    asm("movl %1, %%eax;"
            "movl %%eax, %0;"
            : "=r"(result)
            : "r"(value)
            : "%eax"
       );
   
    printf("value: %d, result: %d\n", value, result);
   
    return 0;
}
 
Brennan參考資料 

x64系統修改的地方

1. 使用x86的方式來編譯,gcc使用-m32,ld使用-melf_i386
2. 使用x64的register,ex. eax => rax, 而movl改成mov

    asm(
            "mov $13, %%rdx;"
            "mov %0, %%rcx;"
            "mov $0, %%rbx;"
            "mov $4, %%rax;"
            "int $0x80;"
            ::"r"(str):"rdx", "rcx", "rbx"
       );