17
Апр
2022

Необработанное исключение: Access violation (Нарушение доступа)

Делаю гибридную программу Си-Ассемблер для вычисления функции. Ввожу данные при помощи call scanf, помещаю необходимые данные для scanf в стек, потом стек ощичаю, но всё равно возникает ошибка доступа. Не могу понять с чем она связана. Выбрасывает после выполнения строки call scanf.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <windows.h>
#include "StdAfx.h"
#include <conio.h>



int s;
char str1[] = "%d";
char str2[] = "функция: y=a+b-c*d/e результат = %d";

_declspec(naked)

int input()
{
    __asm {
        lea esi, s;
        push esi;
        lea eax, str1
        push eax;
        call scanf;
        pop ebx
        pop ebx
        lea eax, s
        ret
    }
}



int main() {
    int a, b, c, d, e, y;
    char str1[] = "%d";
    char str2[] = "функция: y=a+b-c*d/e результат = %d";

    _asm {
        call input
        mov eax, [s]
        mov a, eax
        call input
        mov eax, [s]
        mov b, eax
        call input
        mov eax, [s]
        mov c, eax
        call input
        mov eax, [s]
        mov d, eax
        call input
        mov eax, [s]
        mov e, eax


         


        mov eax, c
            imul eax, d
            cdq
            idiv e
            push eax
            mov eax, a
            add eax, b
            pop ebx
            sub eax, ebx
            mov y, eax
            lea esi, y
            push esi
            push[esi]
            lea eax, str2
            push eax
            call printf
            

    }
    return 0;
}

Источник: https://ru.stackoverflow.com/questions/1401249/%D0%9D%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5-%D0%B8%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-access-violation-%D0%9D%D0%B0%D1%80%D1%83%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0

Тебе может это понравится...

Добавить комментарий