Çağrı kuralı - Calling convention

Gelen bilgisayar bilimleri , bir çağırma kuralı bir olan uygulama düzeyinde nasıl (düşük seviyeli) düzeni alt programlar alma parametreleri onların arayan ve nasıl bir sonuca dönmek dan. Çeşitli uygulamalardaki farklılıklar, parametrelerin, dönüş değerlerinin , dönüş adreslerinin ve kapsam bağlantılarının nereye yerleştirildiğini ( kayıtlar , yığın veya bellek vb.) ve bir işlev çağrısına hazırlanma ve daha sonra ortamı geri yükleme görevlerinin arayan ve arayan arasında nasıl bölündüğünü içerir. arayan.

Çağırma kuralları belirli bir programlama dilinin değerlendirme stratejisiyle ilgili olabilir , ancak değerlendirme stratejisi genellikle daha yüksek bir soyutlama düzeyinde tanımlandığından ve dilin bir parçası olarak görüldüğünden, çoğu zaman bunun bir parçası olarak kabul edilmez (veya tam tersi). belirli bir dilin derleyicisinin düşük seviyeli uygulama detayı olarak .

Varyasyonlar

Çağrı kuralları şunlarda farklılık gösterebilir:

  • Parametrelerin, dönüş değerlerinin ve dönüş adreslerinin yerleştirildiği yer ( kayıtlarda , çağrı yığınında , her ikisinin karışımında veya diğer bellek yapılarında)
  • Bellekte geçirilen parametreler için, resmi parametreler için gerçek argümanların (veya büyük veya karmaşık bir argümanın bölümlerinin) iletilme sırası
  • Bir (muhtemelen uzun veya karmaşık) dönüş değeri, aranandan arayana nasıl geri gönderilir (yığında, kayıt defterinde veya yığın içinde)
  • Bir işlev çağrısından sonra ayarlama ve temizleme görevi, arayan ve aranan arasında nasıl bölünür?
  • Argümanları açıklayan meta verilerin geçirilip geçirilmeyeceği ve nasıl geçirileceği
  • Rutin sona erdiğinde (yığın çerçevesinde veya bazı kayıtlarda) çerçeve işaretçisini geri yüklemek için kullanılan çerçeve işaretçisinin önceki değerinin depolandığı yer
  • Rutinin yerel olmayan veri erişimi için herhangi bir statik kapsam bağlantısının yerleştirildiği yer (tipik olarak yığın çerçevesinde bir veya daha fazla pozisyonda, ancak bazen genel bir kayıtta veya bazı mimariler için özel amaçlı kayıtlarda)
  • Yerel değişkenlerin nasıl tahsis edildiği bazen çağrı kuralının bir parçası olabilir (arayan, aranan için tahsis ettiğinde)

Bazı durumlarda, farklılıklar aşağıdakileri de içerir:

  • Kayıtların korunan kişi tarafından korunmaksızın doğrudan kullanılabileceği sözleşmeler
  • Hangi kayıtların geçici olarak kabul edildiği ve eğer geçiciyse, aranan tarafından geri yüklenmesi gerekmediği

Çoğu mimaride, genellikle mimar tarafından önerilen, yalnızca yaygın olarak kullanılan bir çağrı kuralı vardır. İçin RISCs SPARC, MIPS ve dahil RISC-V bu çağrı kuralı dayalı kayıtları isimler sıkça kullanılmaktadır. Örneğin, MIPS kayıt $4ile $7"ABI isimleri" bilgisi $a0yoluyla $a3standart çağrı kuralı geçen parametre için kullanımlarını yansıtır. (RISC CPU'ların birçok eşdeğer genel amaçlı kaydı vardır, bu nedenle genellikle onlara sayı dışında ad vermek için hiçbir donanım nedeni yoktur.)

Her ne kadar bazı programlama dilleri kısmen dil şartnamede çağıran sırasını belirleyebilir veya kilit uygulanmasında, böyle dillerin farklı uygulamaları (yani farklı derleyiciler ) hala çeşitli arama kuralları kullanabilir ve bir uygulama birden fazla arama seçeneği sunabilir ortak düşünce. Bunun nedenleri performans, teknik sebeplerle veya teknik sebepler olmaksızın diğer popüler dillerin geleneklerine sık sık uyum sağlama ve çeşitli " bilgisayar platformları " tarafından getirilen kısıtlamalar veya sözleşmelerdir .

Mimariler

x86 (32 bit)

X86 mimarisi çok farklı arama kuralları ile kullanılır. Az sayıda mimari kayıt ve basitliğe ve küçük kod boyutuna tarihsel odaklanma nedeniyle, birçok x86 çağrı kuralı yığın üzerinde argümanlar iletir. Dönüş değeri (veya ona bir işaretçi) bir kayıtta döndürülür. Bazı kurallar, özellikle çok sık çağrılan kısa ve basit yaprak rutinleri (diğer rutinleri çağırmayan rutinler) için performansı artırabilecek ilk birkaç parametre için kayıtlar kullanır.

Örnek çağrı:

 push EAX            ; pass some register result
 push dword [EBP+20] ; pass some memory variable (FASM/TASM syntax)
 push 3              ; pass some constant
 call calc           ; the returned result is now in EAX

Tipik arayan yapısı: ( aşağıdaki talimatların bir kısmı veya tamamı (ret hariç) basit prosedürlerde optimize edilebilir ). Bazı kurallar, ayrılmış parametre alanını, retyerine düz kullanarak bırakır ret imm16. Bu durumda, arayan kişi add esp,12bu örnekte olabilir veya başka bir şekilde ESP'deki değişiklikle ilgilenebilir.

calc:
  push EBP            ; save old frame pointer
  mov EBP,ESP         ; get new frame pointer
  sub ESP,localsize   ; reserve stack space for locals
  .
  .                   ; perform calculations, leave result in EAX
  .
  mov ESP,EBP         ; free space for locals
  pop EBP             ; restore old frame pointer
  ret paramsize       ; free parameter space and return.

KOL (A32)

Standart 32-bit ARM çağrı kuralı, 15 genel amaçlı kaydı şu şekilde tahsis eder:

  • r15: Program sayacı (komut seti spesifikasyonuna göre).
  • r14: Bağlantı kaydı. Bir alt program çağrısında kullanılan BL komutu, dönüş adresini bu kayıt defterinde saklar.
  • r13: Yığın işaretçisi. "Thumb" işletim modundaki Push/Pop komutları sadece bu kaydı kullanır.
  • r12: Prosedür-içi çağrı kayıt defteri.
  • r4 ila r11: Yerel değişkenler.
  • r0 ila r3: Bir alt programa iletilen argüman değerleri ve bir alt programdan döndürülen sonuçlar.

Döndürülen değerin türü r0'dan r3'e sığmayacak kadar büyükse veya boyutu derleme zamanında statik olarak belirlenemiyorsa, çağıran bu değer için çalışma zamanında alan ayırmalı ve r0'daki o boşluğa bir işaretçi iletmelidir.

Altyordamlar, r4 ila r11 arasındaki içerikleri ve yığın işaretçisini korumalıdır (belki bunları işlev önsözünde yığına kaydederek , ardından bunları karalama alanı olarak kullanarak, ardından işlev sonsözünde yığından geri yükleyerek ). Özellikle, diğer altyordamlarını çağrı altyordamlar gerekir bu diğer altyordamlarını çağırmadan önce yığına link kayıt R14 dönüş adresini kaydedin. Bununla birlikte, bu tür alt programların bu değeri r14'e döndürmeleri gerekmez - geri dönmek için yalnızca bu değeri program sayacı olan r15'e yüklemeleri gerekir.

ARM çağrı kuralı, tam azalan bir yığın kullanmayı zorunlu kılar.

Bu çağrı kuralı, "tipik" bir ARM alt rutininin şunları yapmasına neden olur:

  • Önsözde, yığına r4'ten r11'e itin ve r14'teki dönüş adresini yığına itin (bu, tek bir STM komutuyla yapılabilir);
  • Geçirilen tüm bağımsız değişkenleri (r0'dan r3'e kadar) yerel sıfırdan kayıtlara (r4'ten r11'e) kopyalayın;
  • Diğer yerel değişkenleri kalan yerel kazıma kayıtlarına (r4 ila r11) tahsis edin;
  • r0 ila r3, r12 ve r14'ün korunmayacağını varsayarak, BL kullanarak hesaplamaları yapın ve gerektiğinde diğer alt programları çağırın;
  • Sonucu r0'a koyun;
  • Sonsözde, yığından r4'ten r11'e çekin ve dönüş adresini r15 program sayacına çekin. Bu, tek bir LDM komutuyla yapılabilir.

KOL (A64)

64-bit ARM ( AArch64 ) çağrı kuralı, 31 genel amaçlı kaydı şu şekilde tahsis eder:

  • x31 (SP): Bağlama bağlı olarak yığın işaretçisi veya sıfır kaydı.
  • x30 (LR): Alt programlardan geri dönmek için kullanılan prosedür bağlantı kaydı.
  • x29 (FP): Çerçeve işaretçisi.
  • x19 - x29: Aranan kişi kaydedildi.
  • x18 (PR): Platform kaydı. İşletim sistemine özgü bazı özel amaçlar veya arayan tarafından kaydedilen ek bir kayıt için kullanılır.
  • x16 (IP0) ve x17 (IP1): Prosedür içi çağrı kazıma kayıtları.
  • x9 - x15: Yerel değişkenler, arayan kaydedildi.
  • x8 (XR): Dolaylı dönüş değeri adresi.
  • x0 - x7: Bir alt programa iletilen argüman değerleri ve bir alt programdan döndürülen sonuçlar.

x ile başlayan tüm kayıtlar , w ile başlayan karşılık gelen 32 bitlik bir kayıt defterine sahiptir . Bu nedenle, 32-bit x0'a w0 denir.

Benzer şekilde, 32 kayan nokta kaydı şu şekilde tahsis edilir:

  • v0 ila v7: Bir alt programa iletilen argüman değerleri ve bir alt programdan döndürülen sonuçlar.
  • v8 - v15: callee kaydedildi, ancak yalnızca alttaki 64 bitin korunması gerekiyor.
  • v16 - v31: Yerel değişkenler, arayan kaydedildi.

PowerPC

PowerPC en fonksiyonları için register değişkenler geçirebilirsiniz böylece mimari kayıtları çok sayıda var tek seviyeli aramalar. Yığına ek argümanlar iletilir ve çok seviyeli çağrıların kullanılması durumunda (özyinelemeli veya başka türlü) ve kayıtların kaydedilmesi gerektiğinde, çağrılan işleve kolaylık sağlamak için her zaman kayıt tabanlı argümanlar için alan tahsis edilir. Bu da kullanım olup değişkin fonksiyonları gibi printf()fonksiyon argümanları bir dizi olarak erişilmesi gereken. Tüm prosedürel diller için tek bir çağrı kuralı kullanılır.

MIPS

O32 ABI olan orijinal olarak durumuna bağlı olarak, en sık kullanılan ABI Sistem V MIPS ABI. Argümanları iletmek için yalnızca dört kayıt mevcut olduğundan , kesinlikle yığın tabanlıdır . Bu algılanan yavaşlık, yalnızca 16 kayıt içeren antik bir kayan nokta modeliyle birlikte, diğer birçok çağrı kuralının çoğalmasını teşvik etti. ABI 1990'da şekillendi ve 1994'ten beri hiç güncellenmedi. Yalnızca 32-bit MIPS için tanımlanmıştır, ancak GCC , O64 adında 64-bit bir varyasyon yaratmıştır. $a0-$a3

64-bit için, Silicon Graphics'in N64 ABI'si ( Nintendo 64 ile ilgili değil ) en yaygın olarak kullanılır. En önemli gelişme, artık argüman geçişi için sekiz kaydın mevcut olmasıdır; Aynı zamanda, benzer şekilde daha küçük bir kod bir 32-bit işaretçileri kullanan N32 adı verilen bir ILP32 versiyonu da vardır 32. kayan nokta kayıtların sayısı artar x32 ABI . Her ikisi de CPU'nun 64 bit modunda çalışır.

O32'yi N32'ye daha çok benzeyen 32 bitlik bir ABI ile değiştirmek için birkaç girişimde bulunuldu. MIPS EABI ile bir 1995 konferansı ortaya çıktı, bunun için 32-bit versiyonu oldukça benzerdi. EABI, MIPS Technologies'e, dönüş değeri için ayrıca argüman kayıtlarını yeniden kullanan daha radikal bir "NUBI" ABI önermesi için ilham verdi. MIPS EABI, GCC tarafından desteklenir ancak LLVM tarafından desteklenmez; ikisi de NUBI'yi desteklemez.

Tüm O32 ve N32/N64 için dönüş adresi bir $rakayıt defterinde saklanır . Bu, JAL(atla ve bağlantı) veya JALR(atla ve bağlantı kaydı) talimatlarının kullanılmasıyla otomatik olarak ayarlanır . Yığın aşağı doğru büyür.

SPARC

SPARC mimarisi, aksine çoğu RISC mimarileri üzerine kurulmuştur kayıt pencereleri . Her kayıt penceresinde 24 erişilebilir kayıt vardır: 8'i "in" kayıtlarıdır (%i0-%i7), 8'i "yerel" kayıtlardır (%l0-%l7) ve 8'i "out" kayıtlarıdır (% o0-%o7). "in" kayıtları, çağrılan işleve argümanları iletmek için kullanılır ve herhangi bir ek argümanın yığına itilmesi gerekir . Ancak, potansiyel bir kayıt penceresi taşması, yerel değişkenler ve (32-bit SPARC'ta) değere göre bir yapı döndürmeyi işlemek için çağrılan işlev tarafından her zaman alan tahsis edilir. Bir işlevi çağırmak için, çağrılacak işlevin argümanları "out" kayıtlarına yerleştirilir; fonksiyon çağrıldığında, "out" kayıtları "in" kayıtları olur ve çağrılan fonksiyon "in" kayıtlarındaki argümanlara erişir. Çağrılan işlev tamamlandığında, çağrılan işlev döndüğünde ilk "çıkış" kaydı olan ilk "içeri" kaydına dönüş değerini yerleştirir.

Sistem V ABI en modern, Unix benzeri sistemler takip dönüş adresini Çerçeve işaretçisi ve% i7% i6 ayırarak,% i5 yoluyla kayıt% I0 "in" ilk altı bağımsız değişkenler geçirir.

IBM System/360 ve ardılları

IBM System / 360 bir donanım yığını olmadan başka bir yapıdır. Aşağıdaki örnekler , 64-bit z/Architecture'ın piyasaya sürülmesinden önce OS/360 ve ardılları tarafından kullanılan çağırma kurallarını göstermektedir ; System/360 için diğer işletim sistemlerinde farklı çağrı kuralları olabilir.

Çağrı programı:

     LA  1,ARGS      Load argument list address
     L   15,=A(SUB)  Load subroutine address
     BALR 14,15      Branch to called routine1
     ...
ARGS DC A(FIRST)     Address of 1st argument
     DC A(SECOND)
     ...
     DC A(THIRD)+X'80000000' Last argument2

Çağrılan program:

SUB  EQU *            This is the entry point of the subprogram

Standart giriş sırası:

     USING *,153
     STM 14,12,12(13) Save registers4
     ST  13,SAVE+4    Save caller's savearea addr
     LA  12,SAVE      Chain saveareas
     ST  12,8(13)
     LR  13,12
     ...

Standart dönüş sırası:

     L   13,SAVE+45
     LM  14,12,12(13)
     L   15,RETVAL6
     BR  14          Return to caller
SAVE DS  18F         Savearea7

Notlar:

  1. BALRİlk belirtilen yazmacındaki talimat depolar sonraki komut (dönüş adresi) adres kayıt 15 ikinci bağımsız adresine 14 ve dallarını argüman kayıt.
  2. Çağıran, kayıt 1'deki bağımsız değişken adresleri listesinin adresini iletir. Son adres, listenin sonunu belirtmek için yüksek sıralı bit kümesine sahiptir. Bu, bu kuralı kullanan programları 31 bit adreslemeye sınırlar.
  3. Çağrılan rutinin adresi register 15'tedir. Normalde bu başka bir register'a yüklenir ve register 15 bir baz register olarak kullanılmaz.
  4. STMTalimat olarak adlandırılan arayan tarafından sağlanan bir 72-bayt alanında 12'ye kadar kayıtlar 14, 15 ve 0 kaydeder alanda tasarruf denilen rutin olarak adlandırdığı subroutinler tarafından kullanılmak üzere alana tasarrufu kendi sağlayan kayıt 13. işaret ettiği; bu alanın adresi normal olarak rutin boyunca kayıt 13'te tutulur. Aşağıdaki talimatlar, STMbu kaydetme alanını arayanın kaydetme alanına bağlayan ileri ve geri zincirleri günceller.
  5. Dönüş dizisi, arayanın kayıtlarını geri yükler.
  6. Kayıt 15 genellikle bir dönüş değeri iletmek için kullanılır.
  7. Çağrılan yordamda bir savearea'yı statik olarak bildirmek, onu reentrant ve özyinelemeli yapmaz ; bir yeniden giriş programı, işletim sisteminden edinilen ve geri döndükten sonra serbest bırakılan veya çağıran program tarafından geçirilen depolamada dinamik bir kayıt alanı kullanır.

In System / 390 ABI ve z / Mimarlık Linux kullanılan ABI:

  • 0 ve 1 kayıtları uçucudur
  • Kayıtlar 2 ve 3, parametre geçişi ve dönüş değerleri için kullanılır
  • 4 ve 5 numaralı kayıtlar da parametre geçişi için kullanılır
  • Kayıt 6, parametre geçişi için kullanılır ve aranan kişi tarafından kaydedilmeli ve geri yüklenmelidir.
  • 7'den 13'e kadar olan kayıtlar, aranan kişi tarafından kullanılmak içindir ve onlar tarafından kaydedilmeli ve geri yüklenmelidir.
  • Kayıt 14, iade adresi için kullanılır
  • Kayıt 15, yığın işaretçisi olarak kullanılır
  • Kayan nokta kayıtları 0 ve 2, parametre geçişi ve dönüş değerleri için kullanılır
  • Kayan nokta kayıtları 4 ve 6, aranan kişi tarafından kullanılmak içindir ve onlar tarafından kaydedilmeli ve geri yüklenmelidir.
  • z/Architecture'da, 1, 3, 5 ve 7 ile 15 arasındaki kayan nokta kayıtları, aranan kişi tarafından kullanılmak içindir
  • Erişim kaydı 0, sistem kullanımı için ayrılmıştır
  • 1'den 15'e kadar olan erişim kayıtları, aranan kişi tarafından kullanılmak içindir.

SüperH

Kayıt ol Windows CE 5.0 gcc renesas
R0 Değerleri döndür. Montaj sözde talimatlarını genişletmek için geçici. 8/16-bit işlemler için örtük kaynak/hedef. Korunmamış. Dönüş değeri, arayan kaydeder Değişkenler/geçici. garanti değil
R1..R3 Geçici kayıtlar olarak hizmet eder. Korunmamış. Arayan çizik kaydetti. Yapı adresi (varsayılan olarak arayanın kaydetmesi) Değişkenler/geçici. garanti değil
R4..R7 Tamsayı argümanlarının ilk dört kelimesi. Argüman oluşturma alanı, R4'ten R7'ye kadar tutma argümanlarının dökülebileceği alanı sağlar. Korunmamış. Parametre geçişi, arayan kaydeder Argümanlar. Garantili değil.
R8..R13 Kalıcı kayıtlar olarak hizmet eder. Korunmuş. Aranan Kayıtlar Değişkenler/geçici. Garantili.
R14 Varsayılan çerçeve işaretçisi. (R8-R13 ayrıca çerçeve işaretçisi olarak da hizmet edebilir ve yaprak rutinleri, çerçeve işaretçisi olarak R1–R3'ü kullanabilir.) Korunmuştur. Çerçeve İşaretçisi, FP, aranan kişi kayıtları Değişkenler/geçici. Garantili.
R15 Yığın işaretçisi veya kalıcı kayıt işlevi görür. Korunmuş. Yığın İşaretçisi, SP, aranan kişi kaydeder Yığın işaretçisi. Garantili.

Not: Aranan kişinin tasarrufu için "korunmuş" yedekler; aynısı "garantili" için de geçerli.

68k

Motorola 68000 serisi için en yaygın çağrı kuralı :

  • d0, d1, a0 ve a1 sıfırdan yazmaçlardır
  • Diğer tüm kayıtlar çağrılı olarak kaydedilir
  • a6, bir derleyici seçeneği tarafından devre dışı bırakılabilen çerçeve işaretçisidir.
  • Parametreler yığına sağdan sola doğru itilir
  • Dönüş değeri d0'da saklanır

IBM 1130

IBM 1130 , küçük 16 bit sözcük adreslenebilir bir makina. Yalnızca altı kaydı artı durum göstergeleri vardı ve yığını yoktu. Kayıtlar, Komut Adres Kaydı (IAR) , Akümülatör (ACC) , Akümülatör Uzantısı (EXT) ve üç indeks kaydı X1–X3'tür. Çağıran program ACC, EXT, X1 ve X2'yi kaydetmekten sorumludur. Alt yordamları çağırmak, doğrudan ana programla bağlantılı yeri değiştirilemeyen alt yordamları kodlamak ve bir aktarım vektörü aracılığıyla yeri değiştirilebilir kitaplık alt yordamlarını çağırmak için iki sözde işlem vardır . Her iki sözde işlem , bir sonraki talimatın adresini etkin adresinde (EA) ve dalları EA+1'de saklayan bir Branch ve Store IAR ( ) makine talimatına çözümlenir . CALLLIBFBSI

Argümanlar ‍'ı takip eder BSI—‌genellikle bunlar argümanların‍ tek kelimelik adresleridir—‌çağrılan rutin, dönüşte bunları atlayabilmesi için kaç argüman bekleneceğini bilmelidir. Alternatif olarak, argümanlar kayıtlarda iletilebilir. İşlev rutinleri, sonucu gerçek bağımsız değişkenler için ACC'de veya Gerçek Sayı Sözde Biriktirici (FAC) olarak adlandırılan bir bellek konumunda döndürdü . Argümanlar ve dönüş adresi, alt rutinin ilk konumunda depolanan IAR değerine göre bir ofset kullanılarak adreslendi.

  *                  1130 subroutine example
     ENT  SUB        Declare "SUB" an external entry point
 SUB DC   0          Reserved word at entry point, conventionally coded "DC *-*"
 *                   Subroutine code begins here
 *                   If there were arguments the addresses can be loaded indirectly from the return addess
     LDX I 1 SUB     Load X1 with the address of the first argument (for example)
 ...
 *                   Return sequence
     LD      RES     Load integer result into ACC
 *                   If no arguments were provided, indirect branch to the stored return address
     B   I   SUB     If no arguments were provided
     END  SUB

IBM 1130, CDC 6600 ve PDP-8'deki (üç bilgisayarın tümü 1965'te tanıtıldı) alt yordamları, dönüş adresini bir alt yordamın ilk konumunda saklar.

Uygulama konuları

Bu değişkenlik, birden çok dilde yazılmış modülleri birleştirirken veya işletim sistemi veya kitaplık API'lerini , yazıldığı dilden farklı bir dilden çağırırken dikkate alınmalıdır ; bu durumlarda, arayan ve aranan tarafından kullanılan arama kurallarını koordine etmek için özel dikkat gösterilmelidir. Tek bir programlama dili kullanan bir program bile, kod optimizasyonu için derleyici tarafından seçilen veya programcı tarafından belirtilen çoklu çağrı kurallarını kullanabilir.

Dişli kod

İş parçacıklı kod, çağrılan koddaki bir işlev çağrısından sonra kurulum ve temizlik için tüm sorumluluğu yükler. Çağıran kod, çağrılacak alt programları listelemekten başka bir şey yapmaz. Bu, tüm işlev kurulumunu ve temizleme kodunu, işlevin çağrıldığı birçok yer yerine tek bir yere (işlevin giriş ve son sözü) yerleştirir. Bu, iş parçacıklı kodu en kompakt çağrı kuralı haline getirir.

Dişli kod, yığındaki tüm bağımsız değişkenleri iletir. Tüm dönüş değerleri yığında döndürülür. Bu, saf uygulamaları, kayıtlarda daha fazla değer tutan çağrı kurallarından daha yavaş hale getirir. Ancak, kayıtlardaki en üstteki yığın değerlerinin birkaçını, özellikle de dönüş adresini önbelleğe alan iş parçacıklı kod uygulamaları, genellikle, dönüş adresini yığına her zaman gönderen ve gönderen altyordam çağırma kurallarından daha hızlıdır.

PL/I

PL/I dilinde yazılmış programlar için varsayılan çağrı kuralı , diğer kurallar isteğe bağlı olarak belirtilebilmesine rağmen, tüm argümanları referansa göre iletir. Argümanlar farklı derleyiciler ve platformlar için farklı şekilde işlenir, ancak tipik olarak argüman adresleri bellekteki bir argüman listesi aracılığıyla iletilir. Dönüş değerini içerecek bir alana işaret eden nihai, gizli bir adres iletilebilir. PL/I tarafından desteklenen çok çeşitli veri türleri nedeniyle, örneğin karakter veya bit dizilerinin uzunluklarını, dizilerin boyutunu ve sınırlarını ( dope vektörleri ) veya yerleşimi ve içeriği tanımlamak için bir veri tanımlayıcısı da iletilebilir. bir veri yapısının . Sabit olan veya çağrılan prosedürün beklediği argüman türüyle uyuşmayan argümanlar için sahte argümanlar oluşturulur.

Ayrıca bakınız

Referanslar

Dış bağlantılar