składnia Intel'a | składnia AT&T | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
przykładowy program |
global main
|
.section .rodata
|
||||||||
pisownia rejestrów |
|
|
||||||||
pisownia liczb |
|
|
||||||||
menmoniki |
* kolejność argumentów: cel, źródło * dyrektywy odwołań do pamięci mówiące o przekazywanej wielkości mov eax, 1b
|
* kolejność argumrentów: żródło, cel * sufiksy operatorów oznaczające wielkość przekazwaną movl $1, eax
|
||||||||
odwołania do pamięci |
podawane w '[' i ']' mov eax,[ebx+10h]
|
odwołanie w '(' i ')' movl 0x10(%ebx),%eax
wymyślna forma zapisu operacji kompleksowych!!! |
Intel | AT&T |
---|---|
mov eax, [ebx + ecx*2 + 3] |
movl 3(%ebx, %ecx, 2), %eax |
copy_to_user
Interesujące nas pliki:
copy_to_user
:makro copy_to_user z pliku aucces.h |
---|
|
constant
lub generic
. Oba sprawdzają uprawnienia do
wykonania operacji a następnie wywołują odpowiednio makra __constant_copy_user
i __generic_copy_user
. Definicję pierwszego z nich mozemy znaleźć w pliku
uaccess.h, oto jej fragment:makro __constant_copy_user z pliku aucces.h |
---|
|
__generic_copy_user
, które zdefiniowane zostało w pliku usercopy.c:makro __generic_copy_user z pliku usercopy.c |
---|
|
CONFIG_X86_USE_3DNOW_AND_WORKS
wywołuje się albo wersja makra
__generic_copy_user
dająca ew. możliwość wykorzystania rozkazów MMX procesora.
Albo wersja druga, która korzysta ze zdefiniowanego w pliku uaccess.h makra
(__copy_user
):makro __copy_user z pliku uaccess.h |
---|
|
CONFIG_X86_USE_3DNOW_AND_WORKS
nigdy nie zostaje spełniony! Innymi słowy makro takie nie zostało dotąd zaimplementowane.
Nic nie stoi na przeszkodzie, by czytelnik zrobił to samodzielnie.makro fast_clear_page z pliku mmx.c |
---|
|
mm0
. Rejestr ten
jest dodatkowym rejestrem występującym w procesorach z obsługą MMX. Warto zwrócić
tu uwagę na to, że zwiększenie rozmiaru kodu pozwala na zmniejszenie ilości
poleceń zwiększenia licznika co ma znaczenie przy tak często wywoływanej operacji.