Error a2026 constant expected

Error A2026: constant expected

Topic: Error A2026: constant expected  (Read 14580 times)

Hyzau

Hi,

Once again, sorry for disturbing you
I’m having the following syntax which I want to translate in MASM

movzx eax , word [(ebx-1)*2+eax]

I’ve tried many things but I can’t figure out what syntax should I use in masm


mov eax, 2
mov dwSave, ebx
sub dwSave, 1
mul dwSave ; I can't alter ebx, i need it later so I put it in "dwSave dd 0"

[Doing some change on eax]

add eax, dwSave ;  so eax = (ebx - 1) * 2 + eax

movzx eax, [eax] ; error A2070: invalid instruction operands
movzx eax, word [eax] ; error A2009: syntax error in expression // Yeah I know that it was wrong but tried it anyway ><
movzx eax, word ptr [eax] ; seems to doesn't give the right  value


By the way, the original code is NASM.
Thanks in advance for your help.

Best regards,


Logged


Hyzau

Okay,

movzx eax, word ptr [eax]

May be the right solution ^^. However, it doesn’t work for me because I’m loosing EDX during the MUL…
If you have a working syntax which don’t force me to use MUL it could be great.


Logged


Use movzx eax, word ptr [2*ebx+eax-2]

Welcome to the Forum :icon14:


Logged


« Last Edit: February 25, 2022, 05:47:43 AM by nidud »


Logged


Hyzau

Use movzx eax, word ptr [2*ebx+eax-2]

Welcome to the Forum :icon14:

Well thanks a lot  :biggrin:
It’s kinda simpler than my all my stuff.

I’ve was searching a solution for hours now and I didn’t thought about brackets ><


Logged


The push/pop works but is kind of slow, at least on my CPU:

Intel(R) Celeron(R) M CPU        420  @ 1.60GHz (SSE3)
loop overhead is approx. 189/100 cycles

124     cycles for 100 * movzx JJ
226     cycles for 100 * push nidud

12      bytes for movzx JJ
17      bytes for push nidud

29811   = eax movzx JJ
29811   = eax push nidud


Logged


I am completely newbie in masm32 and I want to realize such idea which is described in following line of (incorrect) code :

mov ebx,(eax mod any_number)

Compiler gives me error A2026 : constant expected

I read that mod operation cannot be used between registers, so which methods will help me to perform same idea ?

Hope for your help.

asked Jan 23, 2012 at 12:30

user1164889's user avatar

1

9 % 5 = 4
What does Modulus mean? It is the remainder after you divide 2 numbers

    mov     eax, 9 mod 5

or

xor     edx, edx
mov     eax, 9
mov     ecx, 5
div     ecx

now edx contain the Modulus

answered Jan 24, 2012 at 3:51

Gunner's user avatar

GunnerGunner

5,7222 gold badges24 silver badges39 bronze badges

I would like to use my answer to exercise 2.b of the book Guide to Assembly Language: A Concise Introduction by James T. Streib,

;result = number % amount

mov eax,number  
cdq             ;copy or propagate the sign bit into the edx register
idiv amount     
mov result,edx  ;the remainder in the edx register and the  
                ;quotient in the eax register

answered May 16, 2020 at 19:56

EnthusiastiC's user avatar


  1. Mikl___

    Mikl___

    Супермодератор
    Команда форума

    Публикаций:

    14

    Регистрация:
    25 июн 2008
    Сообщения:
    3.468

    Стандартная реализация ALIGN ЧИСЛО в MASM предполагает заполнение от метки ALIGN_ЧИСЛО до адреса кратного ЧИСЛО кодом 90h, а если требуется заполнение, например нулями? В теории это должно выглядеть вот так

    1. db ((-$) and 11b) dup (0); align 4

    а на практике эта конструкция приводит к выдаче ошибки
    error A2026: constant expected
    Как правильно это выглядит на масм?


  2. FatMoon

    FatMoon

    New Member

    Публикаций:

    0

    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia

    Чего-то меня сомнения гложут. Если align в секции данных, оно нулями и заполняло всегда. Если в коде — то естественно нопами. Как-то не заострял на этом внимания, но вроде бы так. И это меня устраивало на 100%


  3. Mikl___

    Mikl___

    Супермодератор
    Команда форума

    Публикаций:

    14

    Регистрация:
    25 июн 2008
    Сообщения:
    3.468

    FatMoon
    не обращал внимание на align в секции данных, но у меня секция кода объединена с секцией данных и секцией импорта (вот такой я извращенец!), но всё-же, как написать рабочую конструкцию типа этой

    1. db ((-$) and 11b) dup (0)

    на масме без «error A2026: constant expected»?


  4. valterg

    valterg

    Active Member

    Публикаций:

    0

    Регистрация:
    19 авг 2004
    Сообщения:
    2.105

    ALIGN aligns ……………………….
    …………………………………..
    In a segment containing no instructions, the assembler pads each

    skipped byte with nulls (00h). In a code segment, the assembler
    inserts a no-operation sequence (not necessarily NOP instructions)
    to fill the gap.


  5. s_d_f

    s_d_f

    New Member

    Публикаций:

    0

    Регистрация:
    15 май 2008
    Сообщения:
    342

    Если секция кода начинается с метки start

    1. db (512-(($-offset start) mod 512)) dup(0CCh)

  6. Mikl___

    Mikl___

    Супермодератор
    Команда форума

    Публикаций:

    14

    Регистрация:
    25 июн 2008
    Сообщения:
    3.468

    Rockphorr
    спасибо, но, к сожалению, код вашего примера выдает следующие ошибки

    1. error A2006: undefined symbol a
    2. error A2026: constant expected

    конструкция s_d_f рабочая, вот ее «косметическая» доработка

    1. db ((start — $) and 511) dup(0CCh)

    Спасибо всем кто откликнулся!


WASM

DessanM

1 / 1 / 0

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

Сообщений: 81

1

Ошибка компиляции исходника из книги Кипа Ирвина

21.05.2021, 23:35. Показов 1843. Ответов 14

Метки нет (Все метки)


Цитата
Сообщение от politoto
Посмотреть сообщение

Попробуйте научиться запускать в отладчике или симуляторе одну инструкцию машины, например, CPUID ( 0F A2 )

Если б я мог хоть что-то внятное запустить)))))))После долгих мучений и миллиона видео на youtube не вызывает ошибку вот такой код:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
include Irvine32.inc
 
.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
 
.data
        
.code
main PROC
; ---------------------------------------------------------
 
; ---------------------------------------------------------
INVOKE ExitProcess, 0
main ENDP
END main        ;specify the program's entry point

и вот такой код:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
include Irvine32.inc
 
.data
message db "Hello", 0
 
.code
main :
 
mov edx, OFFSET message 
call WriteString
ret
 
END main

Выполняется с ошибками:

E0020 идентификатор «include» не определен MASM F:ASSEMBLERMASMMain.asm 1
E0065 требуется точка с запятой «;» MASM F:ASSEMBLERMASMMain.asm 1

И только с регистром EDX, a EAX, EBX, ECX выводят какой-то 1 разный символ мусора.

Почему выполняются оба кода,почему один ошибки выводит а второй нет, какой вариант шаблона использовать — понятия не имею.
Чтоб что-то начать пробовать нужно от чего-то отталкиваться, а мне не от чего)

Добавлено через 39 секунд
это в Visual Studio

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



0



DessanM

1 / 1 / 0

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

Сообщений: 81

22.05.2021, 00:04

 [ТС]

2

еще у меня компилируется вот такой код чрез командную строку

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.386
.model flat, stdcall
option casemap:none
 
include C:masm32includewindows.inc
include C:masm32includekernel32.inc
include C:masm32includemasm32.inc
 
includelib C:masm32libkernel32.lib
includelib C:masm32libmasm32.lib
 
.data
    hello db "Hello",0
 
.code
 
start:
    invoke StdOut , addr hello
    invoke ExitProcess, 0
 
end start

И он же только с прописанными путями в Visual Studio

Assembler
1
2
3
4
5
6
include windows.inc
include kernel32.inc
include masm32.inc
 
includelib kernel32.lib
includelib masm32.lib

выводит ошибки:

Ошибка A2026 constant expected MASM C:masm32includewinextra.inc 11052
Ошибка A2026 constant expected MASM C:masm32includewinextra.inc 11053
Ошибка MSB3721 выход из команды «ml.exe /c /nologo /Zi /Fo»DebugMain.obj» /Fl»DebugMASM.lst» /I «C:Irvine» /I «C:masm32lib» /I «C:masm32include» /W3 /errorReportrompt /TaMain.asm» с кодом «1». MASM C:Program Files (x86)Microsoft Visual Studio2019PreviewMSBuildMicrosoftVCv160Buil dCustomizationsmasm.targets 70
Ошибка (активно) E0169 требуется объявление MASM F:ASSEMBLERMASMMain.asm 1



0



Модератор

1763 / 866 / 157

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

Сообщений: 2,941

Записей в блоге: 3

22.05.2021, 00:30

3

Не видя упомянутые в сообщениях файлы, остаётся только гадать.
Возможно, нужно ещё определить какие-то символы, которые при успешной сборке у Вас заданы, а при сборке плагином для MSBuild в MVStudio не заданы. Например, версия Windows, для которой собирается программа и т.п.



0



ФедосеевПавел

Модератор

Эксперт по электронике

8278 / 4182 / 1595

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

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

Записей в блоге: 3

22.05.2021, 00:57

4

Начнём с того, что примеры в книге Кипа Ирвина предполагается компилировать пакетным файлом следующего содержания

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
REM  make32.bat -  Batch file for assembling/linking 32-bit Assembly programs
REM  Revised: 11/15/01
 
@echo off
cls
 
REM The following three lines can be customized for your system:
REM ********************************************BEGIN customize
SET PATH=C:Masm615
SET INCLUDE=C:Masm615INCLUDE
SET LIB=C:Masm615LIB
REM ********************************************END customize
 
ML -Zi -c -Fl -coff %1.asm
if errorlevel 1 goto terminate
 
REM add the /MAP option for a map file in the link command.
 
LINK32 %1.obj irvine32.lib kernel32.lib /SUBSYSTEM:CONSOLE /DEBUG
if errorLevel 1 goto terminate
 
dir %1.*
 
:terminate
pause

Фишка в объявлении специальных переменных среды окружения Include и Lib, а также в добавлении пути к ml и link в переменную PATH.
Это позволяет не указывать пути в самих исходниках.

Тут уж как работаете — из пакетника или из VS.

Не обращайте внимания, найдите рабочую конфигурацию и занимайтесь ассемблером, а не системными деталями.



0



1 / 1 / 0

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

Сообщений: 81

22.05.2021, 01:22

 [ТС]

5

Цитата
Сообщение от ФедосеевПавел
Посмотреть сообщение

Фишка в объявлении специальных переменных среды окружения Include и Lib, а также в добавлении пути к ml и link в переменную PATH.

Он может и предлагает, но я такое вижу впервые. В роликах компилируют

ml /c /Zd /coff «file.asm» — делает obj
Link /SUBSYSTEM:CONSOLE «file.obj» — делает exe

дайте хоть начать что-то нормально запускать из ассемблера)Куда мне в bat лезть еще.

Цитата
Сообщение от ФедосеевПавел
Посмотреть сообщение

Не обращайте внимания, найдите рабочую конфигурацию и занимайтесь ассемблером, а не системными деталями.

Я б с радостью, но не получается. Хотелось бы чтоб всё работало через Visual Studio (не Visual Studio Code).
Может Вы мне дадите какие-то примеры посложнее, которые я мог бы попробовать скомпилировать и на основании успеха или неудачи, изучив полученные ошибки отладчика, можно был бы выявить рабочий шаблон и от него можно было бы отталкиваться для изучения ассемблера. Я уже не знаю, что придумать, мечусь по всему интернету.

politoto, и у Вас может есть какие-то примеры посложнее на ассемблере



0



Модератор

1763 / 866 / 157

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

Сообщений: 2,941

Записей в блоге: 3

22.05.2021, 03:34

6

DessanM, заметно посложнее: в дистрибутивах FASM’а для разных платформ есть исходники самого FASM’а, из которых FASM может собрать сам себя.
А иногда и простенькую IDE.



0



DessanM

1 / 1 / 0

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

Сообщений: 81

22.05.2021, 11:53

 [ТС]

7

Цитата
Сообщение от politoto
Посмотреть сообщение

DessanM, заметно посложнее: в дистрибутивах FASM’а для разных платформ есть исходники самого FASM’а, из которых FASM может собрать сам себя.
А иногда и простенькую IDE.

А если серьёзно?

Добавлено через 28 минут
Так они еще и по разному компилируются…похоже я досовское приложение компилирую под виндоус. Вы можете дать программу на ассемблере под виндоус MASM, рассказать в чём пишете и дать коды компиляции, чтоб я сделал также? Пожалуйста. Без ссылок на статьи, без юмора, очень прошу

Добавлено через 2 часа 18 минут
Правильно ли до меня дошло, что вот этот код, где много mov и прерываний, только для DOS и под виндоус его не запустить:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.model small
.stack 200
.data
Hello byte "Hello, world!$"
.code
start:  mov ax,@data
    mov ds,ax
    mov ah,9
    mov dx,offset Hello
    int 21h
    mov ah,0
    int 16h
    mov ah,4Ch
    int 21h
end start

А вот этот код, который почти как С++ и без mov и прерываний, который мне не нравится потому что, я хочу именно прописывать каждый регистр, каждый байт сам, а здесь всего этого не наблюдается, как раз для виндоус:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.386
.model flat, stdcall
option casemap:none
include masm32includewindows.inc
include masm32includekernel32.inc
include masm32includeuser32.inc
includelib masm32libuser32.lib
includelib masm32libkernel32.lib
 
.data
MsgCaption      db "Iczelion's tutorial no.2",0
MsgBoxText      db "Win32 Assembly is Great!",0
 
.code
start:
    invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
    invoke ExitProcess,NULL
end start

А я уже который день пытаюсь скомпилировать код под DOS, который мне очень сильно нравится и я хочу его изучить, для виндоус и запустить его и ищу в интернете почему у меня ничего не получается и создаю разные темы на форуме?



0



ФедосеевПавел

Модератор

Эксперт по электронике

8278 / 4182 / 1595

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

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

Записей в блоге: 3

22.05.2021, 17:38

8

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

Решение

Да, один код для DOS, другой для Windows.

Не теряйте время на DOS, сразу учите Windows.

Консольные программы для Windows выглядят почти, как аналогичные для DOS.
Для ввода и вывода я использую функции msvcrt.dll: printf, scanf, putc, puts. Использую макрос invoke. Недавно увидел макрос printf, который вызывает crt_prtintf, но быстрее в наборе и понятнее в исходнике.

Сам работаю в редакторе SciTE, компиляцию и отладку запускаю пакетными (bat) файлами.
В составе masm32 есть редактор qeditor, позволяющий набирать, компилировать и запускать на исполнение программы — пользуйтесь им. В этом случае, пути к включаемым файлам и библиотекам можно набирать относительными.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
.686
.model flat, stdcall
option casemap :none
        .nolist
        include masm32includewindows.inc
 
        include masm32includeuser32.inc
        include masm32includekernel32.inc
        include masm32includemsvcrt.inc
        include masm32includemasm32.inc
        include masm32macrosmacros.asm
 
        includelib masm32libuser32.lib
        includelib masm32libkernel32.lib
        includelib masm32libmsvcrt.lib
        includelib masm32libmasm32.lib
        .list
.const
        aszPressAnyKey          db      0Dh, 0Ah, 0Dh, 0Ah, "Press any key to exit", 0
.data
        aszHello                db      0Dh, 0Ah, "Hello, Worlds!", 0Dh, 0Ah, 0
        aszHelloNew             equ     acfm$("nHello, Worldsxn")
.data?
 
.code
 
main    proc
 
        printf("nHello, Worldsxn")
 
        invoke  crt_printf, ADDR aszHello
 
        push    offset aszHello
        call    crt_printf
        add     esp,    4*1
 
        push    aszHelloNew
        call    crt_printf
        add     esp,    4*1
 
        ;ожидание нажатия любой клавиши
        invoke  crt_printf,     ADDR aszPressAnyKey
        invoke  crt__getch
        ;завершение программы
        invoke  ExitProcess,    0
main    endp
 
end     main



2



politoto

Модератор

1763 / 866 / 157

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

Сообщений: 2,941

Записей в блоге: 3

22.05.2021, 22:59

9

Цитата
Сообщение от DessanM
Посмотреть сообщение

я уже который день пытаюсь скомпилировать код под DOS, который мне очень сильно нравится

Код использует устаревшие возможности старого языка, которые в современном ассемблере отключены за ненадобностью. Но ассемблировать его современным ml.exe в Developer PowerShell for VS 2019 мне сегодня удалось:

Windows Batch file
1
ml /Flconout$ /omf hw.asm /nologo

Microsoft (R) Macro Assembler Version 14.28.29913.0
Copyright (C) Microsoft Corporation. All rights reserved.

Assembling: hw.asm

Код

Microsoft (R) Macro Assembler Version 14.28.29913.0         05/22/21 20:20:20
hw.asm                                                       Page 1 - 1


                                .model small
                                .stack 200
 0000                           .data
 0000 48 65 6C 6C 6F 2C         Hello byte "Hello, world!$"
       20 77 6F 72 6C 64
       21 24
 0000                           .code
 0000  B8 ---- R                start:  mov ax,@data
 0003  8E D8                        mov ds,ax
 0005  B4 09                        mov ah,9
 0007  BA 0000 R                    mov dx,offset Hello
 000A  CD 21                        int 21h
 000C  B4 00                        mov ah,0
 000E  CD 16                        int 16h
 0010  B4 4C                        mov ah,4Ch
 0012  CD 21                        int 21h
                                end start

Код

Microsoft (R) Macro Assembler Version 14.28.29913.0        05/22/21 20:20:20
hw.asm                                                       Symbols 2 - 1

Segments and Groups:

                N a m e                 Size     Length   Align   Combine Class

DGROUP . . . . . . . . . . . . .        GROUP
_DATA  . . . . . . . . . . . . .        16 Bit   000E     Word    Public  'DATA'
STACK  . . . . . . . . . . . . .        16 Bit   00C8     Para    Stack   'STACK'
_TEXT  . . . . . . . . . . . . .        16 Bit   0014     Word    Public  'CODE'

Symbols:

                N a m e                 Type     Value    Attr

@CodeSize  . . . . . . . . . . .        Number   0000h
@DataSize  . . . . . . . . . . .        Number   0000h
@Interface . . . . . . . . . . .        Number   0000h
@Model . . . . . . . . . . . . .        Number   0002h
@code  . . . . . . . . . . . . .        Text     _TEXT
@data  . . . . . . . . . . . . .        Text     DGROUP
@fardata?  . . . . . . . . . . .        Text     FAR_BSS
@fardata . . . . . . . . . . . .        Text     FAR_DATA
@stack . . . . . . . . . . . . .        Text     DGROUP
Hello  . . . . . . . . . . . . .        Byte     0000     _DATA
start  . . . . . . . . . . . . .        L Near   0000     _TEXT

           0 Warnings
           0 Errors

без ошибок и предупреждений, в результате получился 166-байтный объектый файл:

Кликните здесь для просмотра всего текста

Код

00000000  80 08 00 06 68 77 2e 61  73 6d 24 96 2b 00 00 05  |....hw.asm$.+...|
00000010  53 54 41 43 4b 05 5f 44  41 54 41 06 44 47 52 4f  |STACK._DATA.DGRO|
00000020  55 50 05 5f 54 45 58 54  05 53 54 41 43 4b 04 44  |UP._TEXT.STACK.D|
00000030  41 54 41 04 43 4f 44 45  0e 98 07 00 48 14 00 05  |ATA.CODE....H...|
00000040  08 01 f7 98 07 00 48 0e  00 03 07 01 00 98 07 00  |......H.........|
00000050  74 c8 00 02 06 01 1c 9a  06 00 04 ff 02 ff 03 59  |t..............Y|
00000060  a0 12 00 02 00 00 48 65  6c 6c 6f 2c 20 77 6f 72  |......Hello, wor|
00000070  6c 64 21 24 9f a0 18 00  01 00 00 b8 00 00 8e d8  |ld!$............|
00000080  b4 09 ba 00 00 cd 21 b4  00 cd 16 b4 4c cd 21 3f  |......!.....L.!?|
00000090  9c 0a 00 c8 01 55 01 c4  08 14 01 02 58 8a 06 00  |.....U......X...|
000000a0  c1 50 01 00 00 5e                                 |.P...^|
000000a6

Добавлено через 44 минуты

Цитата
Сообщение от DessanM
Посмотреть сообщение

Правильно ли до меня дошло, что вот этот код … только для DOS и под виндоус его не запустить:

То, что код предназначен для MS-DOS ( при чём в момент создания использовал уже несколько устаревшую функцию ) и подобных систем — верно.
То, что под виндоус его не запустить — неверно. Вы же сами писали,

Цитата
Сообщение от DessanM
Посмотреть сообщение

exe файл перетаскивают в консоль винды и делается debug с наглядным кодом, что мне очень понравилось. Но те уроки выполнялись на виртуальной машине под 32 битную виндоус.

Возможность выполнения приложений, разработанных для MS-DOS, была предусмотрена в Windows NT с самого начала, при чём даже на аппаратных платформах, не совместимых с x86 (i386). Это было требованием бизнеса того времени.

В наше время появилась потребность выполнять в Windows приложения, разработанные для linux, без перекомпиляции и лишней возни. И такая возможность есть и развивается в Windows 10 уже не первый год.



1



1 / 1 / 0

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

Сообщений: 81

23.05.2021, 08:39

 [ТС]

10

ФедосеевПавел, вот это то что нужно!Это то что я искал! Сразу выводы:
1) дос не трогать
2) не мучаться с поиском современной среды разработки
3) заняться консолями под виндоус

мне б еще содержимое bat файла и вообще прекрасно

Цитата
Сообщение от politoto
Посмотреть сообщение

Но ассемблировать его современным ml.exe в Developer PowerShell for VS 2019 мне сегодня удалось

Классно, а у меня не получилось, хотя есть целых 2 ml.exe; ASM Visual и Visual Studio, не запустился файл. А я бы очень хотел наглядно видеть как записываются байты в память и там изменяются.

Цитата
Сообщение от politoto
Посмотреть сообщение

То, что под виндоус его не запустить — неверно.

Я мою 64 разрядную имел в виду.

В общем спасибо, наконец-то я знаю с чего начинать)



0



Модератор

1763 / 866 / 157

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

Сообщений: 2,941

Записей в блоге: 3

23.05.2021, 13:55

11

Цитата
Сообщение от DessanM
Посмотреть сообщение

Я мою 64 разрядную имел в виду.

Если понадобится, то в Вашей системе тоже можно запускать программы для FreeDOS
Программирование последовательного порта на ASM 8086, dosbox
Большая часть примеров из раздела https://www.cyberforum.ru/assembler-dos/ авторы вопросов тестировали в подобных симуляторах и эмуляторах.

Цитата
Сообщение от DessanM
Посмотреть сообщение

я бы очень хотел наглядно видеть как записываются байты в память и там изменяются.

Чтобы это наглядно увидеть, ASMы не нужны.
Нужен наглядный отладчик или симулятор машины. Например, x64dbg или встроенный отладчик Microsoft Visual Studio.

Кстати, для DOSBOX тоже есть штатная программа-монитор, позволяющая просматривать и изменять содержимое регистров и памяти виртуальной машины, останавливать «зависшую» машину, чтобы посмотреть, где зациклилась программа и т.д.

Добавлено через 4 часа 34 минуты

Цитата
Сообщение от DessanM
Посмотреть сообщение

код, где много mov и прерываний, только для DOS

В коде Windows 10 на самом деле тоже хватает mov, syscall и оставленных для совместимости int.

Код

NtTerminateProcess:
00007FFD6084D390 4C 8B D1             mov         r10,rcx  
00007FFD6084D393 B8 2C 00 00 00       mov         eax,2Ch  
00007FFD6084D398 F6 04 25 08 03 FE 7F 01 test        byte ptr [7FFE0308h],1  
00007FFD6084D3A0 75 03                jne         NtTerminateProcess+15h (07FFD6084D3A5h)  
00007FFD6084D3A2 0F 05                syscall  
00007FFD6084D3A4 C3                   ret  
00007FFD6084D3A5 CD 2E                int         2Eh  
00007FFD6084D3A7 C3                   ret

В отличие от linux, syscall не являются частью API Windows 10 для программ пользователя, и не должны использоваться напрямую в коде, который может выполняться в разных версиях Windows. С помощью syscall в Windows 10 на x64 реализован внутренний интерфейс системы.



1



6681 / 2664 / 366

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

Сообщений: 3,906

17.06.2021, 14:19

12

Цитата
Сообщение от politoto
Посмотреть сообщение

Возможность выполнения приложений, разработанных для MS-DOS, была предусмотрена в Windows NT с самого начала, при чём даже на аппаратных платформах, не совместимых с x86 (i386).

Это на каких таких платформах ? Почему не знаю ?



0



Модератор

1763 / 866 / 157

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

Сообщений: 2,941

Записей в блоге: 3

17.06.2021, 15:52

13

Первоначально на MIPS и DEC Alpha. Позже добавились PowerPC, Itanium, а MIPS ушёл первым, если я не ошибаюсь.
https://web.archive.org/web/20… 1638/en-us



0



6681 / 2664 / 366

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

Сообщений: 3,906

17.06.2021, 17:39

14

Каким чудом ты на DEC Alpha исполнишь приложение, разработанное для MS-DOS ? То бишь COM или EXE. Аналогично про MIPS и прочий шмипс.



0



Модератор

1763 / 866 / 157

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

Сообщений: 2,941

Записей в блоге: 3

17.06.2021, 18:31

15

Там же написано: Microsoft купила права на использование этого программного чуда у Insignia Solutions



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

17.06.2021, 18:31

Помогаю со студенческими работами здесь

Как подготовить выборку для проверки методом Ирвина
Добрый день,
стоит задача: проверить выборку на выбросы методом Ирвина.
Выборка хаотичная (т.е….

Сравнить ФИО из книги 1 и книги 2, и если совпадают, то в столбец А книги 1, подставить данные из столбца В книги 2
Добрый день! Подскажите, как сделать-есть 2 книги. Нужно сравнить фамилии из книги 1 и книги 2 и…

Delphi 10.3 (win 10/64) комьюнити Ошибка программы на Win XP из скомпилированного из исходника Делфи 7
Здравствуйте!
Есть исходник Делфи7, скомпилирован когда то и успешно работает на XP. Этот исходник…

Описать структуру Bibliotec, содержащую следующие поля: автор книги, инвентарный номер книги, название книги
Описать структуру BIBLIOTEC содержащий следующие поля: автор книги , инвентарный номер книги ,…

Ошибка при компиляции. Где ошибка? (Работа с классом)
Уважаемые форумчане!
При компиляции проекта возникает ошибка &quot; undefined reference to…

Ошибка компиляции. Ошибка — frxpngimage.dcu
Ошибка при компиляции приложения.
Само приложение делал на учебе , закинул всю папку на флешку с…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

15

Gawen

I use for the first time your masm compiler. The installation was succeded.

I want to make a 4k demo only in assembler. I choose the tiny memory mode. Unfortunately each of my compilation failed .

So I decided to compile a example program I found on the Web. However that doesn’t work .

Here the example assembler listing (the compiled example binary is a .com) :

mov al, 13h
int 10h

push cs
pop ds
mov si, offset datas

push 0a000h
pop es

@otro_frame:
inc word ptr lx
inc word ptr camx

xor di, di
mov word ptr j, -100
@otra_linea:

mov cx,320
push word ptr camx
pop word ptr i
@otro_punto:

fild word ptr i
fmul st(0),st(0) ; iэ
fild word ptr j
fmul st(0), st(0) ; jэ
fild word ptr d
fmul st(0), st(0) ; dэ
faddp st(1),st(0)
faddp st(1),st(0) ; a

fild word ptr d ; d
fimul word ptr prof ; Prof. de la camara
fadd st(0), st(0)

fild word ptr prof ; Prof. de la camara
fmul st(0),st(0)
fisub word ptr r2 ; rэ

fld st(0)
fmul st(0),st(3)
fadd st(0),st(0)
fadd st(0),st(0) ; 4 a c

fld st(2)
fmul st(0),st(0) ; bэ

fsub st(0),st(1) ; disc = bэ — 4 a c
ftst
fstsw ax
sahf
mov ax,bx
jc Pinta

fld st(4)
fadd st(0), st(0) ; 2 a

fldz
fsub st(0), st(5)
fsub st(0), st(2) ; — b — sqrt(disc)

fdiv st(0), st(1) ; ( — b — sqrt(disc) ) / (2 a)
fstp dword ptr t
finit
fld dword ptr t ; st(0) = t

fild word ptr i ; i
fmul st(0), st(1)

fild word ptr j ; j
fmul st(0), st(2)

fild word ptr d ; d
fmul st(0), st(3)
fiadd word ptr prof ; Prof.

; Ahora st(0) = z
; st(1) = y
; st(2) = x
; st(3) = t

fld st(2)
fisub word ptr lx
fld st(2)
fisub word ptr ly
fld st(2)
fisub word ptr lz

fld st(0)
fmul st(0),st(0)
fld st(2)
fmul st(0),st(0)
faddp st(1),st(0)
fld st(3)
fmul st(0),st(0)
faddp st(1),st(0)

fsqrt
fimul word ptr r

fld st(1)
fmulp st(5),st(0)
fld st(2)
fmulp st(6),st(0)
fld st(3)
fmul st(0),st(7)
fadd st(0),st(5)
fadd st(0),st(6)

fdiv st(0), st(1)
fimul word ptr rango
fabs

fistp word ptr t
mov al, t

Pinta:
stosb
inc word ptr i
dec cx
jnz @otro_punto

inc word ptr j
cmp byte ptr j, 100
jne @otra_linea

cmp byte ptr camx + 1, 1
je exit

in al, 60h
dec ax
jnz @otro_frame

exit:
mov al, 3h
int 10h

prof = [si+$-offset datas]
dw -40 ; Prof. de la camara

r2 = [si+$-offset datas]
d = r2
dw 225 ; rэ

r = [si+$-offset datas]
rango = r
dw 15

lx = [si+$-offset datas]
ly = [si+$-offset datas+2]
lz = [si+$-offset datas+4]
dw -250,-100,-400 ; Luz

camx = [si+$-offset datas]
dw -425

j = [si+$-offset datas]

i = [si+$-offset datas + 2]

t = [si+$-offset datas + 4]

I type the command :

(I’m really sorry to flood on this topic but I do NOT understand what’s wrong . )

That’s not the only case : the majority of assembler listing example from a book can’t compile.

Can anybody help me ?

#37 -x[reg] syntax



Status:
closed

Owner:
nobody

Labels:
None

Priority:
5

Updated:


2009-09-14

Created:

2009-07-10

Private:
No

The folowing syntax gets error message:
Error! E077: A constant operand is expected after a negative sign
mov word ptr -28[ebp],81E1h ; Condition prefix flags

The following doesn’t get an error:
mov word ptr [ebp-28],81E1h ; Condition prefix flags

The first syntax works fine using ALP. I don’t have MASM to test with.

Discussion

  • Nobody/Anonymous

    Masm displays:
    CODE202.ASM(7) : error A2026: constant expected

    what works with both jwasm and masm is:

    mov word ptr [-28][ebp], 81E1h

    because the [] is a synonym for the + operator in masm syntax.

    japheth

  • Peter Flass

    It’s amazing how much ALP and MASM differ. I thought they were compatible, but apparently only upwardly-compatible. If I ever get some time (ha!) I’ll look at the source with an eye towards putting in support for ALP features with a command-line argument.

  • japheth

    • status: open —> closed

Log in to post a comment.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Error a2023 instruction operands must be the same size
  • Error a2013 model must precede this directive
  • Error a2008 ассемблер
  • Error a2008 syntax error in directive
  • Error a2008 syntax error addr

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии