Computer language/GNU Assembler
の編集
Top
>
Computer language
> GNU Assembler
[
ホーム
] [
一覧
|
検索
|
ヘルプ
]
-- 雛形とするページ --
!Template
A20
API
ATA/ATAPI
ATA/ATAPI/Command
ATA/ATAPI/I/O Port, Register
ATA/ATAPI/Transfer
ATA/ATAPI/Transfer/UltraDMA
Address space
Assembly language
BBS
Barn
Books
Boot process
Build
Comments/El Torito
Comments/Memo
Comments/OS glossary
Comments/Privilege levels
Comments/Projects/TestOS_CD
Computer language
Computer language/C
Computer language/C++
Computer language/C++/Class
Computer language/C++/Class/Inheritance
Computer language/C++/Operator
Computer language/C++/関数名forアセンブリ
Computer language/C/Complex sentence
Computer language/GNU Assembler
DMA
DMAC
DMAC/Intel 8237A
Development environment for Linux
Device
Device/82093AA
Device/8259
Device/PCI
Device/PCI to ISA Bridge
Device/PCI/Class Code
El Torito
Exception
FDC
FDC/82077AA
FDD boot
FDDブート
FileSystem
FileSystem/ISO 9660
FileSystem/Joliet
Format/FileFormat
Format/FileFormat/ELF
Format/FileFormat/PNG
FormattingRules
GCC
GHex
Help
Info
Info/Copyright Policy
Info/Introduction
Inline assembly
InterWikiName
I/O port address
I/O port address/0x0000~0x03ff
I/O port address/0x0c00~0x0fff
I/Oポートアドレス
KBC
KBC/Intel 8042
Kernel
Linker script
Links
MBR
Makefile
Memo
Memo/Flags
Memo/Linux
Memo/if文が遅い理由
Memo/アドレスの種類
Memo/クラス設計パターン
Memo/コメントアウト手法
Memo/ブートセクタ
Memo/メモリの連続領域(一次元)を多次元で扱う
Memo/リンカスクリプト
Memo/二重ループをアセンブリで書く
Memo/勉強会でのプレゼン
Memory management
Memory map
Menu
NDP
OS
OS glossary
OS用語集
PIC
PIT
PIT/Intel 8254
PORTA
PORTB
Page fault
Paging
Popular
Privilege levels
Projects
Projects/ML_Check
Projects/TestOS_CD
Projects/TestOS_FDD
QEMU
RTC
RTC/MC146818A
Recent
SandBox
Section
Stack
Stack switching
System port A
System port B
Top
Trouble Information
UEFI
VESA
arch/arm
x64
x64/Descriptor/Base
x64/Descriptor/Segment descriptor
x64/Descriptor/System descriptor
x64/Descriptor/System descriptor/System segment descriptor/LDT segment descriptor
x64/Descriptor/System descriptor/System segment descriptor/TSS descriptor
x64/Descriptor/System descriptor/Type
x86
x86/Descriptor
x86/Descriptor/AVL
x86/Descriptor/Base
x86/Descriptor/DPL
x86/Descriptor/D/B
x86/Descriptor/G
x86/Descriptor/Limit
x86/Descriptor/P
x86/Descriptor/S
x86/Descriptor/Segment descriptor
x86/Descriptor/Segment descriptor/A
x86/Descriptor/Segment descriptor/Type
x86/Descriptor/System descriptor
x86/Descriptor/System descriptor/Gate descriptor
x86/Descriptor/System descriptor/Gate descriptor/Call gate descriptor
x86/Descriptor/System descriptor/Gate descriptor/Interrupt gate descriptor
x86/Descriptor/System descriptor/Gate descriptor/Task gate descriptor
x86/Descriptor/System descriptor/Gate descriptor/Trap gate descriptor
x86/Descriptor/System descriptor/System segment descriptor
x86/Descriptor/System descriptor/System segment descriptor/LDT segment descriptor
x86/Descriptor/System descriptor/System segment descriptor/TSS descriptor
x86/Descriptor/System descriptor/Type
x86/GDT
x86/IDT
x86/Interrupt management
x86/LDT
x86/Register
x86/Segment selector
x86/Task management
x86/Task management/TSS
システム・ポートA
システム・ポートB
セクション
ヒデ
特権レベル
*** displacement(base, index, scale) [#w679ada7] 2次元配列を参照する場合に有効な構文。 例: movw $0x1234, 0x1000(%ebx, %esi, 4) 2次元配列で有効に参照する場合のイメージ displacement[base][index] < 1要素のサイズ:scale
タイムスタンプを変更しない
TITLE:GNU アセンブラ * GNU アセンブラ(GAS) [#q7eb1dc2] ** 目次 [#d760be38] #contents ** コメントの種類 [#w60821a5] GASは、3種類のコメントをサポートしている。~ CやC++でおなじみのコメントと、アセンブリ言語で一般的に使用するコメントが使える。~ たまに、//が使えないこともある。 -/* ~ */ -// -# ** 構文 [#rfe1f5c6] *** 基本構文 [#dfc2e7d4] GASは、NASMなどのIntel構文と違い、AT&T構文なので、オペランドのソースとディスティネーションが逆。 **** NASM [#r595c534] movd Dest, Src **** GAS [#n9eb06da] movl Src, Dest *** レジスタ [#s848272d] GASはレジスタを記述するときに%記号をつける。 **** NASM [#rfd90068] movd eax, ebx **** GAS [#mb2c0286] movl %ebx, %eax *** 即値 [#z75f2204] GASは即値(定数数値)を記述するときに$記号をつける。 **** NASM [#rfd90068] movd eax, 0x20 **** GAS [#mb2c0286] movl $0x20, %eax ** メモリ参照 [#jdcf6aea] メモリ参照の基本構文は以下の通り。 displacement(base, index, scale) この基本構文から一部省略して記述可能。 |~ |~指定種別|~説明|~省略時| |displacement|即値|静的なアドレスオフセット|0| |base|32bitレジスタ|配列のベースアドレス|0| |index|32bitレジスタ(esp除く)|配列のインデックス|0| |scale|即値(1,2,4,8)|配列の1要素の大きさ|1| なお、計算式は以下の通り。 displacement + base + index * scale ※セグメントレジスタを以下のように指定することも可能。 segment:displacement(base, index, scale) セグメントレジスタ省略時は、baseの種類により異なる。 - baseがesp, ebpの場合:ss - 上記以外の場合:ds 以下、書き方一覧 displacement (base) displacement(base) displacement(index, scale) displacement(base, index) displacement(base, index, scale) *** displacement [#c6bfcd18] 最も単純な構文。 例: movw $0x1234, label label: .word 0x0000 ラベル(アドレス)を$記号なしで指定するだけ。 *** (base) [#q6fc8939] レジスタを使用する場合の構文。 例: movw $0x1234, (%eax) *** displacement(base) [#md17191b] C言語において、関数の引数やローカル変数を参照する場合に有効な構文。 例: movw $0x1234, -4(%ebp) < ローカル変数を参照 *** displacement(index, scale) [#u95e2a88] 1次元配列を参照する場合に有効な構文。 例: movw $0x1234, 0x1000(%esi, 4) 1次元配列で有効に参照する場合のイメージ displacement[index] < 1要素のサイズ:scale *** displacement(base, index) [#vdf7dde1] 2次元配列、構造体配列を参照する場合に有効な構文 例: movw $0x1234, +4(%ebx, %edx) 構造体配列で有効に参照する場合のイメージ base[index].displacement index += sizeof base[0] base[index].displacement *** displacement(base, index, scale) [#w679ada7] 2次元配列を参照する場合に有効な構文。 例: movw $0x1234, 0x1000(%ebx, %esi, 4) 2次元配列で有効に参照する場合のイメージ displacement[base][index] < 1要素のサイズ:scale ** ディレクティブ [#h50f4726] GASでディレクティブを記述するときは、"."を用いる。~ この"."は特別な意味がある。 *** ディレクティブの種類 [#fb37ceb5] |~ディレクティブ|~意味| |.byte|1バイトのデータを配置する| |.word|2バイトのデータを配置する| |.short|~| |.long|4バイトのデータを配置する| |.int|~| |.ascii|アスキーコードの文字列を配置する| ** 参考・関連 [#a4e4bc42] - [[Lavender - GNU Assembler:http://www.lavender.org/~mouri/pukiwiki/index.php?gas]] - [[The GNU Assembler:http://tigcc.ticalc.org/doc/gnuasm.html]] - [[GNU Assembler:http://caspar.hazymoon.jp/OpenBSD/annex/gas.html]] - IA-32 SDM 上巻:基本アーキテクチャ
Since 2008 July. OS Project Wiki