Error a2070 invalid instruction operands как исправить

Mov ax,byte ptr[ESI] A2070: invalid instruction operands Assembler Решение и ответ на вопрос 1297716

15 / 15 / 2

Регистрация: 26.04.2012

Сообщений: 1,091

1

11.11.2014, 17:13. Показов 5205. Ответов 5


mov ax,byte ptr[ESI] A2070: invalid instruction operands

Доброго вечера!
Не понимаю!!! Полностю адекватная инструкция. Я скажем отличнопонимаю что и как будет делаться, а ассемблер- нет!!

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Эксперт быдлокодинга

2091 / 525 / 69

Регистрация: 04.11.2010

Сообщений: 1,310

11.11.2014, 17:35

2

Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Цитата
Сообщение от Dimka-novitsek
Посмотреть сообщение

Не понимаю!!! Полностю адекватная инструкция. Я скажем отличнопонимаю что и как будет делаться, а ассемблер- нет!!

Ты в штаны медведя зайца пихаешь, вот ассемблер и непонимает в какую штанину его сунуть. В AL или в AH



3



Ушел с форума

Автор FAQ

15703 / 7377 / 980

Регистрация: 11.11.2010

Сообщений: 13,321

11.11.2014, 17:40

3

Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Dimka-novitsek,
величина АХ слово, а не байт — поэтому пиши mov ax,word ptr [ESI]



1



15 / 15 / 2

Регистрация: 26.04.2012

Сообщений: 1,091

11.11.2014, 18:08

 [ТС]

4

СПАСИБО!!!!! Понял.. так просто!



0



Somebody

2832 / 1641 / 254

Регистрация: 03.12.2007

Сообщений: 4,222

11.11.2014, 18:59

5

Цитата
Сообщение от Dimka-novitsek
Посмотреть сообщение

Здесь написано что AX- отдельный регистр,16 бит и есть также AH и AL — по 8 бит. Вообще то ассемблер мог бы и сообразить..

Так он хорошо «соображает», если ему не мешать:

Assembler
1
mov ax, [esi]



0



Эксперт быдлокодинга

2091 / 525 / 69

Регистрация: 04.11.2010

Сообщений: 1,310

11.11.2014, 23:38

6

Цитата
Сообщение от Dimka-novitsek
Посмотреть сообщение

Здесь написано что AX- отдельный регистр,16 бит и есть также AH и AL — по 8 бит. Вообще то ассемблер мог бы и сообразить..

Он и сообразил что ты пихаешь невпихуемое.



1



Содержание

  1. Error a2070 invalid instruction operands как исправить
  2. Answered by:
  3. Question
  4. Answers
  5. Русские Блоги
  6. Процесс установки OpenSSL и решения ошибок под Windows
  7. Примечание. Этот тест прошел успешно в версии WIN10 64 VS2012 openssl-1.0.2o. Другие условия не гарантируют успеха. Если возникнут вопросы, обращайтесь к блогеру. Брат попробуй помочь решить это.
  8. Русские Блоги
  9. Процесс установки OpenSSL и решения ошибок под Windows
  10. Примечание. Этот тест прошел успешно в версии WIN10 64 VS2012 openssl-1.0.2o. Другие условия не гарантируют успеха. Если возникнут вопросы, обращайтесь к блогеру. Брат попробуй помочь решить это.

Error a2070 invalid instruction operands как исправить

Answered by:

Question

Answers

The thing I would suggest is use the size descriptors for the first operand.

movlps qword ptr [rdx], xmm7

Because you are dereferencing a memory location (that is what the [] does, it says to access the memory location specified in rdx) the assembler doesn’t know the size of the memory block you are pointing to. So you have to give the assembler the size of this memory location. The qword ptr tells it that it is pointing to a qword block of memory (that is quad word or 8 byte, which is the same size as half of xmm7).

A similar thing is true for movss. Except that in this case you would need to use dword ptr instead of qword ptr. So modify this line to.

movss dword ptr [rdx+8], xmm6

Oh, and if you are going to give a sample please make sure that it will give only the problem you describe. Your sample will actually give two more errors. The first is on the line

and the second is on the line

This is because test is an instruction and instructions take priority over identifiers. So instead of seeing the proc and thinking test is a name of a procedure, it will see test think that it is an instruction and expect two valid parameters for it.

Источник

Русские Блоги

Процесс установки OpenSSL и решения ошибок под Windows

Есть два способа использовать OpenSSL под Windows:
1. Непосредственно загрузите установочный пакет, скомпилированный другими:http://slproweb.com/products/Win32OpenSSL.html
2. Скомпилируйте и установите самостоятельно:
1. Загрузите и установите perl.
http://www.activestate.com/activeperl/downloads/
2. Установка и настройка:
напрямую запустите установочный файл (например: ActivePerl-5.16.3.1604-MSWin32-x86-298023.msi), чтобы завершить установку; процесс установки автоматически завершит настройку переменных среды (после завершения установки Вы можете увидеть каталог bin Perl в переменных системной среды (например: добавлен C: Program Files perl site bin;)), настраивать вручную не нужно;
3. Проверьте успешность установки:
Войдите, например, в папку каталога установки perl и выполните «perl example.pl». Если отображается «Привет от ActivePerl!», это означает, что установка Perl прошла успешно. Как показано ниже:

После успешной установки Perl вы можете начать использовать связанные с Perl команды для установки OpenSSL.
4. OpenSSL может загрузить исходный код и скомпилировать его самостоятельно, либо вы можете напрямую загрузить установочный пакет и использовать его после установки.
5. Используйте исходный код для компиляции openssl
1) Путь для загрузки исходного кода openssl:
http://www.openssl.org/source/
2) Настройте переменные среды VS2012 (потому что инструмент nmake, поставляемый с vs2012, будет использоваться при компиляции openssl позже).
Запустите файл vcvars32.bat в каталоге bin VS2012 (например, E: Visuol Studio 2012 VC bin), чтобы завершить настройку. Mine не отображается из-за конфигурации. . Больше никаких скриншотов.
3) Настройте openssl
Ниже приводится метод настройки OpenSSL, который я нашел в Интернете, здесь я свяжу его:https://blog.csdn.net/houjixin/article/details/25806151



Я последовал его методу, и было две ошибки:
1.

2.

Чтобы найти решение, потребовалось много усилий,
Решение первой ошибки: отключить сборку

Второе решение ошибки: оно находится на официальном сайте openssl, метод — отключить IPV6.
может относиться к:http://rt.openssl.org/Ticket/Display.html?id=2097&user=guest&pass=guest

В конце концов я изменил его на:

Я очень рад быть здесь, компилировал и компилировал, а значит, успешно, duangduangduang, результат появился:


Это очень больно, но я все равно не сдавался. Думаю, решить эту проблему нетрудно. Позже я нашел такую ​​статью на Baidu:https://blog.csdn.net/mfcing/article/details/43059105, На самом деле это не имеет отношения к этой ошибке, но я видел такой код:

Мне было интересно, связано ли это с моей предыдущей компиляцией? Я постучал:

Кисть и кисть. . . . . . . . . . Ждал больше минуты . наконец!

Я снова выполнил тест nmake -f ms ntdll.mak и проверил его.

Примечание. Этот тест прошел успешно в версии WIN10 64 VS2012 openssl-1.0.2o. Другие условия не гарантируют успеха. Если возникнут вопросы, обращайтесь к блогеру. Брат попробуй помочь решить это.

Источник

Русские Блоги

Процесс установки OpenSSL и решения ошибок под Windows

Есть два способа использовать OpenSSL под Windows:
1. Непосредственно загрузите установочный пакет, скомпилированный другими:http://slproweb.com/products/Win32OpenSSL.html
2. Скомпилируйте и установите самостоятельно:
1. Загрузите и установите perl.
http://www.activestate.com/activeperl/downloads/
2. Установка и настройка:
напрямую запустите установочный файл (например: ActivePerl-5.16.3.1604-MSWin32-x86-298023.msi), чтобы завершить установку; процесс установки автоматически завершит настройку переменных среды (после завершения установки Вы можете увидеть каталог bin Perl в переменных системной среды (например: добавлен C: Program Files perl site bin;)), настраивать вручную не нужно;
3. Проверьте успешность установки:
Войдите, например, в папку каталога установки perl и выполните «perl example.pl». Если отображается «Привет от ActivePerl!», это означает, что установка Perl прошла успешно. Как показано ниже:

После успешной установки Perl вы можете начать использовать связанные с Perl команды для установки OpenSSL.
4. OpenSSL может загрузить исходный код и скомпилировать его самостоятельно, либо вы можете напрямую загрузить установочный пакет и использовать его после установки.
5. Используйте исходный код для компиляции openssl
1) Путь для загрузки исходного кода openssl:
http://www.openssl.org/source/
2) Настройте переменные среды VS2012 (потому что инструмент nmake, поставляемый с vs2012, будет использоваться при компиляции openssl позже).
Запустите файл vcvars32.bat в каталоге bin VS2012 (например, E: Visuol Studio 2012 VC bin), чтобы завершить настройку. Mine не отображается из-за конфигурации. . Больше никаких скриншотов.
3) Настройте openssl
Ниже приводится метод настройки OpenSSL, который я нашел в Интернете, здесь я свяжу его:https://blog.csdn.net/houjixin/article/details/25806151



Я последовал его методу, и было две ошибки:
1.

2.

Чтобы найти решение, потребовалось много усилий,
Решение первой ошибки: отключить сборку

Второе решение ошибки: оно находится на официальном сайте openssl, метод — отключить IPV6.
может относиться к:http://rt.openssl.org/Ticket/Display.html?id=2097&user=guest&pass=guest

В конце концов я изменил его на:

Я очень рад быть здесь, компилировал и компилировал, а значит, успешно, duangduangduang, результат появился:


Это очень больно, но я все равно не сдавался. Думаю, решить эту проблему нетрудно. Позже я нашел такую ​​статью на Baidu:https://blog.csdn.net/mfcing/article/details/43059105, На самом деле это не имеет отношения к этой ошибке, но я видел такой код:

Мне было интересно, связано ли это с моей предыдущей компиляцией? Я постучал:

Кисть и кисть. . . . . . . . . . Ждал больше минуты . наконец!

Я снова выполнил тест nmake -f ms ntdll.mak и проверил его.

Примечание. Этот тест прошел успешно в версии WIN10 64 VS2012 openssl-1.0.2o. Другие условия не гарантируют успеха. Если возникнут вопросы, обращайтесь к блогеру. Брат попробуй помочь решить это.

Источник

I’m newbie in Win32 Assembly:

I learn code this program, it’s Window simple. But I get the error:

error a2070 invalid instruction operands (MASM)

I have searched on google about this error, but I still don’t understand.

.386
.model flat, stdcall
option casemap:none

include masm32includewindows.inc
include masm32includekernel32.inc
include masm32includeuser32.inc
includelib masm32libkernel32.lib
includelib masm32libuser32.lib

WinMain PROTO :HINSTANCE, :HINSTANCE, :LPSTR, :DWORD

.data
    AppName     db "First Windows", 0
    ClassName   db "Window Class", 0

.data?
    hInstance   dd ?
    CommandLine dd ?

.code
start:
    invoke  GetModuleHandle, NULL
    MOV     hInstance, EAX
    invoke  GetCommandLine
    MOV     CommandLine, EAX
    invoke  WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
    invoke  ExitProcess, EAX

    WinMain PROC ahInstance:HINSTANCE, 
            ahPrevInstance:HINSTANCE, 
            aCommandLine:LPSTR, 
            aCommandShow:DWORD
        LOCAL   wc:WNDCLASSEX
        LOCAL   hwnd:HANDLE
        LOCAL   msg:MSG

        MOV     wc.cbSize, SIZEOF WNDCLASSEX
        MOV     wc.style, CS_HREDRAW or CS_VREDRAW
        MOV     wc.lpfnWndProc, offset WndProc
        MOV     wc.cbClsExtra, NULL
        MOV     wc.cbWndExtra, NULL
        MOV     wc.hInstance, hInstance ;;;;;;;;;;;;;;;; Error here

        invoke  LoadIcon, NULL, IDI_APPLICATION
        MOV     wc.hIcon, EAX
        MOV     wc.hIconSm, EAX
        invoke  LoadCursor, NULL, IDC_ARROW
        MOV     wc.hCursor, EAX
        MOV     wc.hbrBackground, COLOR_WINDOW+1
        MOV     wc.lpszMenuName, NULL
        MOV     wc.lpszClassName, offset ClassName

        invoke  RegisterClassEx, addr wc

        invoke  CreateWindowEx, NULL, addr ClassName, addr AppName, 
                WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 
                CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, ahInstance, NULL
        MOV     hwnd, EAX

        invoke  ShowWindow, hwnd, SW_SHOWNORMAL
        invoke  UpdateWindow, hwnd

        .WHILE TRUE
            invoke  GetMessage, addr msg, NULL, 0, 0
            .BREAK .IF (!EAX)
            invoke  TranslateMessage, addr msg
            invoke  DispatchMessage, addr msg
        .ENDW

        MOV EAX, msg.wParam
        RET
    WinMain endp

    WndProc PROC ahWnd:HWND, aMsg:DWORD, awParam:WPARAM, alParam:LPARAM
        .IF aMsg == WM_DESTROY
            invoke  PostQuitMessage, NULL
        .ELSE
            invoke  DefWindowProc, ahWnd, aMsg, awParam, alParam
            ret
        .ENDIF
        XOR EAX, EAX
        ret
    WndProc endp
end start

That line:

MOV     wc.hInstance, hInstance

gets an error, I replace by:

PUSH hInstance
POP  wc.hInstance

—> this is OK.

But I don’t understand WHY ???

Anyone can help me.

  • Remove From My Forums
  • Question

  • when compiling this in ml64.exe 64bit (masm64)

    the SSE command give me an error

    what do i need to do to include the SSE commands in 64 bit?

    CODE: 

       
        .code
         foo PROC
          movlps [rdx], xmm7 ;;error A2070: invalid instruction operands
          movhlps xmm6, xmm7
          movss [rdx+8], xmm6 ;;rror A2070: invalid instruction operands
          ret
        foo ENDP
        end
    

    i get the error:

       1>Performing Custom Build Step
        1> Assembling: extasm.asm
        1>extasm.asm(6) : error A2070: invalid instruction operands
        1>extasm.asm(10) : error A2070: invalid instruction operands
        1>Microsoft (R) Macro Assembler (x64) Version 8.00.50727.215
        1>Copyright (C) Microsoft Corporation.  All rights reserved.
        1>Project : error PRJ0019: A tool returned an error code from "Performing Custom Build Step"

    • Edited by

      Monday, March 15, 2010 6:01 PM

Answers

  • I don’t think this is the correct forum, but on the other hand I don’t know if there is one.

    have you tried changing

    movlps [rdx], xmm7
    to
    movlps QWORD PTR[rdx], xmm7

    • Marked as answer by
      _Green_
      Tuesday, March 16, 2010 7:38 AM

    • Marked as answer by
      _Green_
      Tuesday, March 16, 2010 7:38 AM

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account


Closed

Mardoxx opened this issue

Oct 17, 2017

· 16 comments

Comments

@Mardoxx

x86 Native Tools Command Prompt for VS 2017
> perl Configure VC-WIN32 --prefix="C:UsersOwneropenssl-1.0.2l"
> msdo_ms.bat
> nmake -f msnt.mak
 Assembling: tmp32sha1-586.asm
tmp32sha1-586.asm(1432) : error A2070:invalid instruction operands
tmp32sha1-586.asm(1576) : error A2070:invalid instruction operands
NMAKE : fatal error U1077: '"C:Program Files (x86)Microsoft Visual Studio2017EnterpriseVCToolsMSVC14.11.25503binHostX86x86ml.EXE"' : return code '0x1'
Stop.
> where ml
> C:Program Files (x86)Microsoft Visual Studio2017EnterpriseVCToolsMSVC14.11.25503binHostX86x86ml.exe

> where cl
> C:Program Files (x86)Microsoft Visual Studio2017EnterpriseVCToolsMSVC14.11.25503binHostX86x86cl.exe

Also tried with x64_x86 Cross Tools Command Prompt for VS 2017, same results.

@Mardoxx
Mardoxx

changed the title
Compiling 1.0.2l with VS2017 fails with A2070:invalid instruction operands

Compiling 1.0.2l with VS2017 for x86 fails with A2070:invalid instruction operands

Oct 17, 2017

@Mardoxx

x64 compiles okay, but fails at linking:

x64 Native Tools Command Prompt for VS 2017
> perl Configure VC-WIN64A --prefix=C:Build-OpenSSL-VC-64
> msdo_win64a
> nmake -f msnt.mak
tmp32x86_64cpuid.obj : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'x86'
NMAKE : fatal error U1077: '"C:Program Files (x86)Microsoft Visual Studio2017EnterpriseVCToolsMSVC14.11.25503binHostX64x64lib.EXE"' : return code '0x458'
Stop.

Also tried with x86_x64 Cross Tools Command Prompt for VS 2017, same results.

@Mardoxx

1.0.2k fails identically too.

1.0.2k compiles and links fine under x86 with no-asm
1.0.2l does not.

@mattcaswell

From INSTALL.W32:

- Netwide Assembler, a.k.a. NASM, available from http://nasm.sourceforge.net/
  is required if you intend to utilize assembler modules. Note that NASM
  is now the only supported assembler.

Please try installing NASM and use msdo_nasm.bat instead of msdo_ms.bat

@Mardoxx

@Mardoxx

... lots more errors/warns
tmp32sha1-586.asm:3962: error: comma, colon, decorator or end of line expected after operand
tmp32sha1-586.asm:3963: warning: `PTR' is not a NASM keyword [-w+ptr]
tmp32sha1-586.asm:3963: error: comma, colon, decorator or end of line expected after operand
tmp32sha1-586.asm:3964: warning: `PTR' is not a NASM keyword [-w+ptr]
tmp32sha1-586.asm:3964: error: comma, colon, decorator or end of line expected after operand
tmp32sha1-586.asm:3970: error: symbol `__sha1_block_data_order_avx' redefined
tmp32sha1-586.asm:3970: error: parser: instruction expected
tmp32sha1-586.asm:3972: error: parser: instruction expected
tmp32sha1-586.asm:3983: error: parser: instruction expected
tmp32sha1-586.asm:3985: error: parser: instruction expected
tmp32sha1-586.asm:3986: error: parser: instruction expected
tmp32sha1-586.asm:3987: warning: label alone on a line without a colon might be in error [-w+orphan-labels]
NMAKE : fatal error U1077: '"c:Program Files (x86)NASMnasm.EXE"' : return code '0x1'
Stop.
NMAKE : fatal error U1077: 'if' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"c:Program Files (x86)Microsoft Visual Studio2017EnterpriseVCToolsMSVC14.11.25503binHostX86x86nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"c:Program Files (x86)Microsoft Visual Studio2017EnterpriseVCToolsMSVC14.11.25503binHostX86x86nmake.exe"' : return code '0x2'
Stop.

@mattcaswell

@mattcaswell

Sorry should be nmake -f msnt.mak clean on windows

@Mardoxx

Was just about to say 😄!

One min.

@Mardoxx

@Mardoxx

If OpenSSL only supports building with nasm, why not remove do_ms.bat? @mattcaswell

@mattcaswell

It’s a good question. I’ll leave it to @dot-asm to answer.

@levitte

do_nasm.bat assumes that you have configured with asm acceleration enabled, i.e. no no-asm.
do_ms.bat assumes that you have configured with no-asm.

Here’s the piece of text that actually says so, although maybe not in the clearest of ways…

@Mardoxx

@levitte so you should never run do_ms.bat without prior configuration of no-asm? Thanks

@levitte

@dot-asm

As for x64 thing, see #4508.

@Mardoxx

Я новичок в сборке, и я пытаюсь написать простую программу для создания всплывающего окна с текстом в 64-битной сборке, используя MASM64. Я нашел 32-битную версию в https://www.bigmessowires.com/2015/10/06/assembly-language-windows-programming/ и пытался адаптировать ее к 64-битной сборке.

32-битный оригинал отлично компилируется с ml.exe, но, конечно, дает ошибки с ml64. Пока что я удалил .686 .model flat stdcall в начале, заменил End Main в конце на END и заменил push eax на push rax.

Это мой код на данный момент:

EXTERN MessageBoxA@16 : proc
EXTERN ExitProcess@4 : proc

.const
msgText db 'YES IT FINALLY WORKS!!!', 0
msgCaption db 'Hello World', 0

.code
Main:
push 0
push offset msgCaption
push offset msgText
push 0
call MessageBoxA@16
push rax
call ExitProcess@4

END

Однако строки 11 и 12 (push offset msgCaption push offset msgText) продолжают выдавать эту ошибку error A2070:invalid instruction operands.

Я везде искал и не могу найти, почему это не работает. Что мне нужно сделать по-другому в x64?

(Я использую Windows 10, Visual Studio 2017.)


ОБНОВИТЬ:

Я изменил push offset var на mov rax, offset var | puah rax, и он отлично скомпилировался, а затем я перешел на соглашение о быстром вызове, как упоминалось в комментариях.

EXTERN MessageBoxA@16 : proc
EXTERN ExitProcess@4 : proc

.const
msgText db 'YES IT FINALLY WORKS!!!', 0
msgCaption db 'Hello World', 0

.code
WinMainCRTStartup: ;fast calling convention...
mov rcx, 0
mov rdx, offset msgText
mov r8, offset msgCaption
mov r9, 0
sub rsp, 32
call MessageBoxA@16
mov rcx, rax
sub rsp, 32
call ExitProcess@4

END

Но пытаюсь связать с
link /subsystem:windows /out:test64.exe kernel32.lib user32.lib test64.obj
и получите эту ошибку компоновщика …

test64.obj : error LNK2001: unresolved external symbol MessageBoxA@16
test64.obj : error LNK2001: unresolved external symbol ExitProcess@4
LINK : error LNK2001: unresolved external symbol WinMainCRTStartup
test64.exe : fatal error LNK1120: 3 unresolved externals

Я включил kernel32.lib и user32.lib, и, по-видимому, 64-битные версии имеют то же имя. Я использую «x64 Native Tools Cmd Prompt for VS 2017», если это помогает …


ОБНОВЛЕНИЕ 2:

Исправлено просмотром кода в повторяющейся ссылке. (Почему x86 и x64 такие разные? Вздох)

Понравилась статья? Поделить с друзьями:
  • Error an unexpected network error occurred
  • Error an unexpected error occurred https registry yarnpkg com not found
  • Error an object could not be cloned
  • Error an nvidia kernel module nvidia drm appears to already be loaded in your kernel
  • Error an exception occurred in the script