Справка ASM - настройка несоответствия блоков - PullRequest
0 голосов
/ 27 апреля 2019

Напишите программу, которая вычисляет сумму значений в данном массиве, используя процедуру ArraySum Sub. Массив DWORD 8, 3, 12, 9, 2, 20, 15, 6, 5 - Назовите подпрограмму как ArraySumProc. - Передайте выше определенный массив и размер массива в подпрограмму ArraySum. - Для доступа к значениям в кадре вызывающего абонента используйте EBP (помните, что EBP создается на стороне вызываемого абонента). - Результат вычисленной суммы необходимо назначить переменной памяти val1 на стороне вызывающей стороны. - Расчетный результат выражения должен отображаться на экране консоли из основной подпрограммы. - Используйте соответствующие регистры и инструкцию цикла. - Запустите вашу программу, используя отладчик, чтобы проверить ваши ответы. ▪ Используйте Step Into вместо Step Over для отслеживания стека, ESP, EBP, EIP во время отладки. ▪ Чтобы получить доступ к памяти стека, скопируйте значение ESP из окна регистра и вставьте его в текстовое поле поиска в окне памяти.

Я ввел раздел данных и кода, но почему-то произошла ошибка. Кто-нибудь знает почему ??

.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode: DWORD

.data
    array DWORD 8, 3, 12, 9, 2, 20, 15, 6, 5
    theSum DWORD?

.code
    mov esi,OFFSET array
    mov ecx,LENGTHOF array
    call ArraySum
    mov theSum,eax
INVOKE ExitProcess,0
main ENDP

ArraySum PROC
    push esi
    push ecx
    mov eax,0
L1: add eax,[esi]
    add esi,TYPE DWORD
    loop L1
    pop ecx
    pop esi
    ret
ArraySum ENDP
END main

Ошибка: 1> AddTwo.asm (9): ошибка A2008: синтаксическая ошибка: сумма 1> AddTwo.asm (17): фатальная ошибка A1010: непревзойденное вложение блоков: основной

...