Thread overview
gdc dissassembler
Sep 20, 2012
Salih Dinçer
Sep 20, 2012
Salih Dinçer
Sep 20, 2012
Salih Dinçer
September 20, 2012

Teşekkürler, kesinlikle çok işime yarayacak!

Hemen denedim de sanki DMD'nin look-up table olayını kullanmıyor:

Alıntı:

>

.LC0:
.string "bir"
.LC1:
.string "iki"
movl %fs:int example.i@tpoff, %eax
cmpl $1, %eax
je .L3
cmpl $2, %eax
jne .L6
movq $3, %fs:immutable(char)[] example.s@tpoff
movq $.LC1, %fs:immutable(char)[] example.s@tpoff+8
.L6:
xorl %eax, %eax
ret
.L3:
movq $3, %fs:immutable(char)[] example.s@tpoff
xorl %eax, %eax
movq $.LC0, %fs:immutable(char)[] example.s@tpoff+8
ret
void example.__modinit():
movq _Dmodule_ref(%rip), %rax
movq $__mod_ref.1590, _Dmodule_ref(%rip)
movq %rax, __mod_ref.1590(%rip)
ret
immutable(char)[] example.s:
int example.i:
__mod_ref.1590:
.quad 0
.quad _D7example12__ModuleInfoZ

Kodu şu:

// Type your code here, or load an example.
int i=1;
string s;
void main() {
 switch(i) {
   case 0: break;
   case 1: s = "bir"; break;
   case 2: s = "iki"; break;
   default:
 }
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 20, 2012

Evet, tahmin ettiğim gibi çok ilginç!

Şurada (http://ddili.org/forum/thread/951) tartışmaya açtığım şu örneği denedim:

import core.stdc.stdio: printf;

void main() {
 char harf = 64; // Octal 0x100; @ işareti ve devamında A var

 while(harf) {
   harf++;

   //* toggle-code on
   if(harf > 64 && harf < 91) {
     printf("Büyük Harf: %c\n", harf);
   } else if(harf > 96 && harf < 123) {
     printf("Küçük Harf: %c\n", harf);
   }/*/
   switch(harf) {
     case 'A': .. case 'Z':
       printf("Büyük Harf: %c\n", harf);
       break;
     case 'a': .. case 'z':
       printf("Küçük Harf: %c\n", harf);
       break;
     default:
   }//*/
 }
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 20, 2012

Bir ilginç nokta daha var o da kullanılanılan assembly komutlarının yenilerden (sanırım x86 instruction set'den sonra gelenler?) olması. Yani hep alışmışızdır ya iki yazmaç arasında mov kullanılır ve bu "move" sözcüğünün kısaltılmışıdır. Konumuz olan web uyglamasında ise movl (sanırım move literal demek...) kullanılmış.

Aynı şekilde cmpb, popq gibi şeyler benim hiç alışık olmadığım komutlar... :blush:

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 20, 2012

Kodu otomatik olarak derleyen ve assembly çıktısını gösteren bir site:

http://d.godbolt.org/

Programı soldaki pencereye yazıyorsunuz, sağda assembly karşılığını gösteriyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 20, 2012

Ben dmd'nin de lookup-table kullanmadığını hatırlıyordum. Ayrıca ikisi de duruma göre kullanmayabilir de. Az seçenek olduğunda belki kullanmamak daha hızlıdır. (?)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]