Напишите программу, которая вычисляет сумму значений в данном массиве, используя процедуру 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: непревзойденное вложение блоков: основной