Tekil Mesaj gösterimi
Alt 06-09-2008, 15:19   #19
Constantin
ยŦยк
 
Constantin - ait Kullanıcı Resmi (Avatar)
 

REGISTER KOMUTLARI

BSWAP
---------------------------------------
byte swap
BSWAP O1
BSWAP O1 yerinde 32 Bit lik bir register bekler. 0 .ile 4. üncü byte'i ve 2. ile 3. yü degistirir. Örnek:
mov eax, 11223344h
BSWAP EAX ; EAX= 44332211h

CBW
---------------------------------------
convert byte to word CBW AL- registeri icinde bulunan seyi, bir Word seklinde AX e yazar.

CDQ
---------------------------------------
convert word to quadword CDQ EAX icindeki doubleword 'u EDX:EAX icine quadword olarak yazar.

CWD
---------------------------------------
convert word to doubleword CWD AX icinde bulunan word' u DX:AX e doubleword olarak yazar.

CWDE
---------------------------------------
convert word to doubleword extended CWDE AX icindeki word'u EAX 'E doubleword olarak yazar.
LEA
---------------------------------------
load effective address
LEA O1, O2
LEA O2 nin adresini O1 e yazar. O1 16 yada 32 Bit lik bir register olabilir. Örnek:
lea dx, deger
mov dx, offset deger
; Bu ikisi ayni isi yapar
LMSW
---------------------------------------
load machine status word
LMSW O1
O1 e CR0 registerinin ilk 16 bitini yazar(32 Protected Mode gecmeye yariyon kisimda ordadir) Ne yazikki real mode da bu gecirli degil, o yüzden mov O1, cr0 yazmaniz gerekebilir.
Bu komut aslinda isletim sistemi icindir, ve normal bir programda kullanilmasi gerekli degildir.

MOV
---------------------------------------
move
MOV O1, O2
Assembler dilinin en önemli komutudur. O1 e O2 yi tasir, önemli olan her iki Ox nun esit olmasidir. Ikinci kural ise ikisininde Segmentregister olmamasidir. 16 bitlik bir registeri 32 bit lik bir registerin icine kopyaladiginiz zaman Pentium Pro dan itibaren 0 ile diger bitler doldurulur. Önceki islemcilerde karisik bitlerle dolduruluyorlardi. Tip: xor ax, ax ; mov ax, 0 push ds ; mov ax, ds pop es ; mov es, ax

MOVSX
---------------------------------------
move with sign- extension MOVSX O1, O2 MOVSX o1 in icine o2 yi kopyalar, burdaki fark ise o1 in 16 yada 32 bit olup o2 nin 8 veya 16 bit olabilmesidir. Örnek: mov ax, 0 mov bl, -5 movsx ax, bl

MOVZX
---------------------------------------
move with zero- extend
MOVZX O1, O2

POP
---------------------------------------
POP O1
Stak(daha önce PUSH lanmis seyler) tan O1 icine cekmeye yarar. Stak n son karakterini ceker. Eger O1 16-Bit ise SP = SP+ 2 eger O1 32-Bit ise SP= SP+4 olur.

POPA
---------------------------------------
pop all
POPA bütün registerleri kullanmak icindir. Registerler siradaki gibi kullanilmis olurlar;
DI, SI, BP, BX, DX, CX, AX
POPAD
-------------------------------------
pop all doubleword
Baknz: POPA

POPAW
-------------------------------------
pop all word
Baknz: POPA

PUSH
--------------------------------------
PUSH O1
Stak 'a eleman göndermeye yarar, ama o1 8- Bitlik bir eleman olamaz. Eger O1 16-Bit ise SP = SP- 2 eger O1 32-Bit ise SP= SP- 4 olur.

PUSHA
--------------------------------------
push all
16 bitlik bütün registerleri su sirada pushlar;
AX, CX, DX, BX, SP, BP, SI, DI.

PUSHAD
------------------------------------
push all doubleword
baknz: PUSA

PUSHAW
--------------------------------------
push all word
baknz: PUSHA

SMSW ---------------------------------------
store machine status word
SMSW O1
SMSW CR0 in ilk 16 bitini O1 e kaydeder. Aslinda isletim sisteminin ihtiyac duydugu, bir komuttur ve bir uygulamada kullanilmasi gerekli degildir.

MSRs
-------------------------------------- 80 nin üzerinde MSR vardir, ama her islemcide degisik olabilirler. Bu yüzden Pogramlamada fazla kullanilmamaktadirlar, WRMSR ile EDX: EAX icindeki eleman yazilir, RDMSR ile okunurlar. Tip: Hayla merak ediyorsaniz Döküman Nr. 245472 de Pentium4 ün MSRs hakkinda bilgi bulabilirsiniz, developer.intel.com da.

XCHG --------------------------------------
exchange
XCHG O1, O2
Iki elemanin iceriklerini degistirir. XLAT
---------------------------------------
translate
XLAT [O1]
XLAT DShttp://www.supermp3.org/images/smilies/frown.gifE)BX adresindeki degeri AL ye kopyalar. Önceden AL de hangi Byte istendigi yazilmalidir.
Örnek:
var db "ABCDE"
...
lea bx, var
mov al, 3 ;Dördüncü eleman
XLAT ; AL=D
...
XLAT ES: O1

EK B: NASILSINIZ?

; 2003 Anil Öner
.model small
.data

msg db "Iyimisiniz?([E]vet/[H]ayir)$"
msg2 db 0Ah, "Iyi. http://www.supermp3.org/images/smilies/smile.gif$"
msg3 db 0Ah, "Kotu. http://www.supermp3.org/images/smilies/frown.gif$"
.code
start:
mov ax, @data ; ds = data
mov ds, ax
mov ah, 09h
lea dx, msg ; Ekrana msg yi yaz.
int 21h
mov ah, 07h
int 21h
cmp al, 'e'
je sec_1
cmp al, 'E'
je sec_1 ; e yada E ise sec_1 e git.
mov ah, 09h
lea dx, msg3 ; degilse msg3 u ekrana yaz
int 21h
sec_1: ; iyi ise
mov ah, 09h
lea dx, msg2
int 21h
son:
mov ah, 04ch ; cikis
int 21h
end start
ends

EK C: AMD vs Intel(I64 vs X86-64)


Bu yazimda size bir kac yeni teknolojiden söz edecegim. Eminim ki aranizda Ia64 ve x86-64 ü duymus olanlar vardir.
Bu iki teknolojide 64- Bitlik sistemler.
Ia64
----------------------------------------------------------------------------
Intelin CISC tabanli islemcileriyle Hp nin RISC tabanli islemcilerinin komutlarinin birlestirilmesiyle olusmus EPIC teknolojisine dayaniyor. Ilk EPIC islemci Itanium' du. Itanium Server ler icin gelistirilmis bir islemciydi, bu yüzden pahali. IA64 gercekten cok fazla registere sahip. Bu yüzden ziplama orani düsürülebiliyor. Buda gercekten cok iyi bir performans demek oluyor. Tabiki EPIC in gercek ten zor oldugunu söylemem gerek. Bunun disinda derleyicilerde EPIC icin cok optimize edilmis kod yaratamiyorlar.
Iste örnek bir kod:
Mantik
Eger p1=p2
r2=r3+r4
Yoksa
r7=r6-r5
EPIC:
cmp.eq p1, p2 = r1, r0
(p2) br.cond else_clause
add r2 = r3, r4
br.endif
else_clause:
sub r7 = r6, r5
endif:
....

Tabiki yukaridaki kod daha optimize edilmeden x86 gözüyle bakilarak yazildi, yani ziplama komutlariyla. Ayni Kodun optimize edilmis hali:
EPIC:
cmp.eq p1, p2 = r1, r0
(p1) add r2 = r3, r4
(p2) sub r7 = r6, r5
...
x86-64
Constantin Ofline   Alıntı ile Cevapla