2012-07-28 14 views
6

. Net. Bir yöntemin son talimatı olarak var olabilecek olası OpCode'lar nelerdir. Şu anda Bir yöntemin son talimatı için olası OpCodes nedir?

Ben

Ama buna başka işlem kodları olması mümkün mü? Ve eğer öyleyse, hangi kodu (C#) seçersiniz? throw bir yöntemde son işlemkodu olabiliyorsa

+2

"Son" ile, yöntem gövdesinde tanımlanan son opodu mu kastediyorsunuz, yoksa en son uygulanan opcode mu demek istiyorsunuz? (bir yöntem alttan çıkmaya gerek yoktur) –

+0

@MarcGravell "yöntem gövdesinde tanımlanan son işlem kodu". – Simon

+0

Cool konusunda açıklığa kavuştum, sonra Frederic'in gönderisine eklediğim yorumun geçerli olduğunu düşündüğüm –

cevap

2

"Son" Yani "yöntemi vücutta tanımlanan nihai işlemkodu" ile

, büyük ihtimalle jmp da nitelendirir yönünde. kimin çıkış koşulu ucunda yer almayan bir özyinelemeli yöntem düşünün eğer

Ayrıca, son işlemkodu bir call veya yerine ret ait tail.call olabilir.

Güncelleme: Eh, hayır, olmaz. Marc Gravell haklı onun yorumunda belirttiği gibi, tail.call belgeleri diyor ki:

yığını şu çağrı ile aktarılıyor argümanlar dışında boş olmalıdır. çağrı talimatını takip eden talimat bir ret olmalıdır.

Güncelleme 2: onun çıkış noktası erken (teşekkür tekrar Marc) oluşursa br ve br.s gibi Koşulsuz şube işlem kodları da, bir yöntemin son talimatları olabilir.

+1

"çağrısı" nın yine de bir ret'e ihtiyacı var, iirc; tail.call Daha az eminim (güncelleme: "Arama talimatını takip eden talimatın bir ret olması gerekir", kuyruk sayfasından). Sanırım "jmp" geçerli. –

+2

Öldürdüğüm 2'yi değiştirmek için iki tane daha var: koşulsuz dal: 'br' ve' br.s' (* çıkmadan * yöntemle) - "son" ifadesine bağlı olarak (OP’e soracağım) –

İlgili konular