タグ

レジスタとアセンブラに関するedo_m18のブックマーク (3)

  • GAS_インラインアセンブラ CapmNetwork

    GAS_インラインアセンブラ GAS(GNU アセンブラ)のインラインアセンブラ インラインアセンブラとは、アセンブリ言語で記述されたコードをC言語のような高級言語のソースコードに埋め込む機能のことです。 gccを利用した場合、C言語とGASは相性よくインライン記述することが可能です。 インラインアセンブラの構文 インラインアセンブラは、以下の基形でC言語ファイルにアセンブラコードを関数のように埋め込みます。 __asm__("asm code"); なお、「__asm__」ではなく「asm」と記述することも出来ますが、asmが予約語や関数名と衝突するしている場合には使用できない(C99ではasmキーワードが予約されています)ため、通常は「__asm__」を用います。 インライン構文は複数行に渡って書くことができます。 複数の命令を書く場合は、一行毎にダブルクオーテーションで括り、命令の

  • x64のレジスタ拡張

    x64の大きな特徴の1つに、レジスタの拡張が挙げられます。今回は、この部分を中心に解説していきます(特集:64ビットコンピューティング最前線)。 C MAGAZINE 2005年6月号より転載 x64には、64ビットに拡張された16の汎用レジスタ(GPR)と、16の128ビットXMMレジスタが搭載されています。 x64で新たに追加されたレジスタは、アプリケーションレベルでは64ビットモード時においてのみ使用することができます。 ここで1つ例をあげてみましょう。 ADD AL, DL ;8ビットの加算 ADD AX, DX ;16ビットの加算 ADD EAX, EDX ;32ビットの加算 ADD RAX, RDX ;64ビットの加算 この4つの命令は従来のx86でも使われているADDという加算命令です。これらはすべて「A=A+B」の計算をしろという意味の命令ですが、x86では加算するデー

    x64のレジスタ拡張
  • Assembly Programming on x86-64 Linux (04)

    レジスタ x86-64 には64ビットの汎用レジスタが16あります。それぞれ64ビット(8バイト)、32ビット(4バイト)、16ビット(2バイト)、8ビット(1バイト)のレジスタとして使用することができます。RAX、RBX、RCX、RDXの4は8ビットのレジスタ2つとして独立にアクセスできます。32ビットレジスタとして書き込まれた場合に上位32ビットは0が書き込まれることに注意してください。16ビット、8ビットレジスタとして書き込まれた場合は上位のビットは変化しません。 汎用レジスタには整数またはメモリアドレスを格納することができます。 RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP は16bit CPUである 8086の時代(1978年?)から存在するレジスタの64bit拡張版です。したがって汎用レジスタといっても昔の役割が少し残っていて、一部の命令で特殊な役割があり

  • 1