@a63826ndrew
Студент, новичок в Python

В чем заключаются ошибки и как их исправить?

Есть такой код на языке С++ с ассемблерной вставкой
#include <iostream>
using namespace std;

int main()
{
    char s1[] = "Hola queridos amigos";
    char tmp;
    asm 
    (  
    "push edi"  
    "push esi"
    "mov edx,lenS"  
    "or edx,edx"  
    "jz _end"   
    "lea eax,s1"  
    "mov esi,eax"  
    "add eax,edx"  
    "dec eax"  
    "mov edi,eax"
        
    "_next:"
    "mov al, [esi]"  
    "mov ah, [edi]"
    "mov [edi], al"
    "mov [esi], ah"
    "inc esi"
    "dec edi"
        
    "cmp edi,esi"
    "jz _end"
    "mov eax,edi"
    "inc eax"
    "cmp eax,esi"
    "jz _end"
    "jmp _next"
        
    "_end:"
    "pop esi"
    "pop edi"
    );
    std::cout<<s1<<std::endl;
    return 0;
}


При его компиляции вылезло следующее:
Error: junk `esimov edx' after expression
Error: too many memory references for `push'

А в чем заключаются эти ошибки, я не могу понять, объясните пожалуйста и подскажите, как их исправить.
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
А в чем заключаются эти ошибки, я не могу понять

Когда ты на С++ пишешь строки подряд, вот так:
"push edi"  
"push esi"
"mov edx,lenS"
...

они склеиваются в одну строку. Когда ассемблер видит команду "push edipush esimov edx, lenS..." он резонно недоумевает.

как их исправить

Вставить символы конца строки \n или другие разделители инструкций в ассемблерный код.
Ты же просил пример кода, вот же он, он компилируется и работает, воспользуйся им. Если непонятно что там написано, задавай вопросы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы