Size: a a a

Ассемблер

2021 August 07

s

s54816 in Ассемблер
Префикс переключает режим 16/32. В фасме режим 16-битный, ты просишь eax, получаешь префикс. Дизассемблер предлагает 32-битный режим, видит префикс, рисует ax.
источник

s

s54816 in Ассемблер
Тем временем у меня тоже воспроизводится баг. Осталось только понять, кто виноват.
источник

E

Entusiast in Ассемблер
Дизассемблер тут не причём...
Я ему давал 16-битный, 32-битный, 64-битный - постоянно даёт AX

use32 прописал - сразу EAX во всех режимах

Вывод: по-умолчанию в FASM 16-битный режим
источник

s

s54816 in Ассемблер
cstool x32 "b8 01 00 90 90"
0  b8 01 00 90 90                                   mov    eax, 0x90900001

cstool x32 "66 b8 01 00 90 90"
0  66 b8 01 00                                      mov    ax, 1
4  90                                               nop    
5  90                                               nop    

cstool x16 "b8 01 00 90 90"
0  b8 01 00                                         mov    ax, 1
3  90                                               nop    
4  90                                               nop    

cstool x16 "66 b8 01 00 90 90"
0  66 b8 01 00 90 90                                mov    eax, 0x90900001
источник

E

Entusiast in Ассемблер
Ну значит в FASM'е дело, и там по-умолчанию бинарник 32-битный
Но не в дизассемблере
источник

s

s54816 in Ассемблер
И ещё раз посмотри на выхлоп cstool. И смени дизассемблер себе.
источник

s

s54816 in Ассемблер
Можно даже без дизассемблера. 32-битный mov — 5 байт, в 16-битном режиме он же — 6 (из-за префикса). Сколько байт в бинарнике?
источник

E

Entusiast in Ассемблер
6
источник

s

s54816 in Ассемблер
Вопрос закрыт?
источник

E

Entusiast in Ассемблер
Так как закрыт, если 16-битный - 6 байт
Значит FASM генерирует по умолчанию 16-битный код
источник

s

s54816 in Ассемблер
Ура!
источник

E

Entusiast in Ассемблер
Так я с самого начала писал, что FASM генерирует 16-битный код по-умолчанию
источник

E

Entusiast in Ассемблер
Вот здесь пошатнулся, потому что мельком увидел, что дизасм выдал EAX, а потом пересмотрел, и оказалось, что я прописал use32
Дизассемблер всё верно показывает
источник

II

Ira Irina in Ассемблер
на реальном pentium 4, сталкивался что отладчик insight путает между собой префиксы 66 и 67, когда они стоят перед jmp. Перед mov не путает, а перед jmp путает.
источник

s

s54816 in Ассемблер
Я сходил потестил в настоящий дос на реальном железе. Там всё ок со всеми версиями afd, которые я нашёл. В досбоксе (0.74-3) со всеми поддерживаемыми значениями core первый байт первой инструкции ноль. В режиме полноценной эмуляции (boot с образом) не пробовал, но даже если и заработает, без монтирования директорий в нём смысла нет, проще тогда сразу какой-нибудь qemu или vbox взять.
источник

D

Den in Ассемблер
Под emu8086 работает только mov на lea заменить пришлось иначе мусор выдает перед фразой
источник

s

s54816 in Ассемблер
Там не в коде дело.
источник

s

s54816 in Ассемблер
afd.com → нолик, afdpro.exe → нормально. Так и не понял, кто виноват.
источник

II

Ira Irina in Ассемблер
Только в окне дизасма cs:100 ноль? А если в окне памяти этот же адрес посмотреть, что там будет?
источник

D

Den in Ассемблер
Качал тут adf там народ в коментах писал что дизасемблировал его и какие то ошибки школьные находил, очень удивлялись что программисты такого уровня ошибки такие школьные делали
источник