2016-04-01 1 views
0

Я только начинаю на ассемблере, моя задача состояла в том, чтобы перебирать и массировать и добавлять каждый номер, чем отображать его, однако я не могу заставить его работать. Я пытаюсь понять, что я делаю неправильно, если кто-то может объяснить.Looping Through при добавлении элементов из массива в сборку 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

Вы должны объяснить (т.е. комментарий) свой код, чтобы мы может сказать, что вы хотите, чтобы каждая инструкция выполняла. Тогда вы можете даже использовать отладчик, чтобы сравнить то, что делает машина. Тем не менее, непонятно, почему вы делаете «mov eax, offset num + type num», вы забываете добавлять базовый адрес при индексировании, и вы, конечно, ничего не печатаете. – Jester

ответ

0

Посмотрите на пример для ФАПО окон, который работает (печатает 31 в консоли) и надеемся, что вы получите что-то полезное из него

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