2016-04-01 18 views
0

numaralı dizideki öğeleri eklerken, derleme dilinde yeni başlıyorum. Görevim, döngüden geçmek ve dizilenmek yerine her sayıyı eklemek oldu, ancak işe yaramayacak gibi görünmüyordu. Herhangi biri açıklayabilirse ne yaptığımı anlamaya çalışıyorum.Looping x86

this is my code 
    .data 

    num WORD 3, 5, 2, 7, 8, 6 

    .code 
    main PROC 

    mov eax, 0 
    mov ebx, 0 
    mov ecx, 0 


    mov eax, OFFSET num + TYPE num 
    mov ecx, [LENGTHOF num] 
    Lp: 
     mov ebx, [ecx * TYPE num] 
     add eax, ebx 
    loop Lp 

    exit 

    main ENDP 

    END main 
+1

Sence (yani comment) kodunuzu böylece açıklamalıdır Her bir talimatın ne yapmak istediğini söyleyebilir. Daha sonra, makinenin ne yaptığını karşılaştırmak için bir hata ayıklayıcı kullanabilirsiniz. Yani, niye 'mov eax, num + tip num 'off off belirsiz, endeksleme ve tabii ki herhangi bir şey yazdırmak değil temel adresi eklemek için unutma. – Jester

cevap

0

çalışır FASM pencerelerde (konsolda 31 yazdırır) için örnek bir göz atın ve ondan yararlı bir şey çıkacak umut

include 'win32wxp.inc' 

    .data 

Num dd 3, 5, 2, 7, 8, 6 
Buf db 16 dup (?) 
Dum rd 1 

    .code 
Start: 
    lea esi,[Num] 
    mov ecx,Buf - Num 
    sub edx,edx 
Lp: lodsd 
    add edx,eax 
    loop Lp 

    invoke wsprintf, addr Buf, '%d', edx 
    invoke AllocConsole 
    invoke WriteConsole,<invoke GetStdHandle,STD_OUTPUT_HANDLE>,Buf,<invoke lstrlen,addr Buf>,Dum,0 
    invoke Sleep,-1 
.end Start