2016-04-04 19 views
-2
benim ilk soru için
  1. , en biz .data altında aşağıdaki kod satırını sahip varsayalım:Sözdizimi, bir dizinin bildirilmesi ve arama işlevleri için anlamı nedir?

    "theSINTArray BYTE 256 dup(?)". 
    

    Ben bu kod her eleman bir BYTE olması gereken bir dizi oluşturur biliyorum, ama ne 256 ve dup (?) var mı?

  2. Aşağıdaki kodun, SINTArray öğesinin türünü, uzunluğunu ve ofsetini/adresini yığının üstüne bastığını biliyorum, ancak bilmek istediğim, bunları yığıntan almak ve bir alt yordam içinde kullanmak mümkün olup olmadığıdır. .

    main PROC 
    
    push TYPE theSINTArray 
    push LENGTHOF theSINTArray 
    push OFFSET theSINTArray 
    call testParameters 
    exit 
    
    main ENDP 
    
  3. Bu

    sıkıcı soru biraz, o yüzden şimdiden özür dilerim, ama aşağıdaki kod örneğinde hatlarının büyük bölümünün gerekli Basitçe neden anlamıyorum. Satırıma sahip olduğumu varsayarak "TAMAMLAYINIZ" Lütfen .data bölümünde ", 0" değerini girin: Aşağıdaki kodun her satırının amacı nedir? Not: WriteString ve ReadString, kullandığım Irvine kitaplığında tanımlanmış alt yordamlardır.

    testOutput PROC 
    
    push edx 
    push ecx 
    mov  edx,offset prompt 
    call WriteString 
    pop  ecx 
    pop  edx 
    call ReadString 
    ret 
    
    testOutput ENDP 
    

cevap

4

orada 256 ve dup (?) Için nelerdir?

assembler's manual'u okuyun. TL; DR: yığınından bunları almak ve bir alt rutin Tabii

mümkündür içinde bunları kullanmak mümkün olup olmadığını eğer argüman geçirme aptalca olurdu 256 başlatılmamış bayt

tutar callee argümanlara erişemedi;) Bunları esp (yığın işaretçisi) ile ilgili olarak veya çerçeve işaretçisi olarak ayarladıktan sonra, ebp. Örnekler: [esp+4] veya [ebp+8].

testOutput PROC   ; begin testOutput procedure 

push edx    ; save edx on stack 
push ecx    ; save ecx on stack 
mov  edx,offset prompt ; load edx with address of prompt 
          ; presumably argument to WriteString 
call WriteString  ; invoke WriteString procedure 
pop  ecx    ; restore ecx saved above 
          ; in case WriteString modified it 
pop  edx    ; restore edx saved above (we have modified it) 
call ReadString   ; invoke ReadString procedure 
ret      ; return from subroutine 

testOutput ENDP   ; end of procedure 
+0

Jester altında kodunun her satırında amacı nedir, yanıtınız kesinlikle kod örnekleri benim anlayış geliştirilmiş ama 2 Kalan soruları var. İlk kod örneği için, "yedek" dediğinizde, dizideki dizin sayısını belirlemeyi mi kastediyorsunuz? Yani "256 dup (?)", SINTArray'ın 256 dizinine sahip olmasını sağlıyor? Ayrıca, dup'in yanındaki soru işareti, sayı gibi farklı bir karakterle değiştirilirse ne olur? – Proto

+0

Başka bir deyişle, önem verdiğiniz belirli bir değere göre başlatılmamış 256 baytlık bir dizi ayırır. Eğer ilgilenirseniz, elbette bu değeri "?" Yerine verebilirsiniz. – Jester

+0

Oh, şimdi, her bir baytta depolanan değeri başlatmak için parantez içindeki değerin kullanıldığını anlıyorum. Yardımın için teşekkürler Jester. – Proto