Delphi assembly x64 parametreleri

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Delphi assembly x64 parametreleri

Mesaj gönderen PROGRAMADOR »

Merhaba,

Assembly ile şöyle bir fonksiyon yazıyorum:

Kod: Tümünü seç

function test(numero:word;var str:pansichar):pansichar;
asm
    mov [rdx], 'zz'
end;
x64 ABI'ye göre fonksiyon ve prosedure'larda parametreler sırasıyla rcx,rdx,r8 ve r9 registerlerine aktarılır. Buna göre str parametresi rdx registerinde olmak durumunda. Ancak str'nin değerinde hiçbir değişme olmuıyor.

Bununla birlikte kod bölümünü şu şekilde değiştirince hata almıyorum ve str 'zz' oluyor:

Kod: Tümünü seç

    mov rax, [rdx]
    mov [rax], 'zz'
Gördüğünüz gibi rdx'değeri rax'e aldığımda rax üzerinden değişikliği yaptım. Peki neden rdx üzerinden doğrudan değişiklik yapamıyorum?
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: Delphi assembly x64 parametreleri

Mesaj gönderen PROGRAMADOR »

Uzunca bir düşünmeden sonra sorunu buldum. Normalde assembly'de mov komutunun operandları memory olabiliyor; ilki memory ve ikincisi immediate de olabiliyor. Ancak delphi'de özel bir durum var. Ram'deki değişkenleri doğrudan mov ile değiştiremiyoruz. Veri aktarımını registerler üzerinden yapmak durumundayız.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Cevapla