Forum: Duyurular RSS
gdc dissassembler
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: gdc dissassembler
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
Avatar
Salih Dinçer #2
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler, kesinlikle çok işime yarayacak!

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

.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:
  }
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
Avatar
Salih Dinçer #4
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet, tahmin ettiğim gibi çok ilginç!

Şurada 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:
    }//*/
  }
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
Salih Dinçer #5
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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:
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Duyurular RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 22:39:37 (UTC -08:00)