Истории про котiв #2

Друзья забыли меня бухого на чердаке девятиэтажки.
Я уснул и проснулся ВЕСЬ В КОТАХ! С двух боков лежали КОТЫ, то ли по три,
то ли по четыре с каждого боку, на груди лежал огромный рыжий КОТ!
Я сначала подумал, что это глюк (мы не только пили, но и дули).
Но глюк не царапается и не ворчит, а также глюки не оставляют шерсти на одежде.
На улице было -20, на чердаке — чуть ниже комнатной температуры (там коммуникации).
Я всю ночь был грелкой для КОТОВ

***

Достали эти динозавры комнатные (голуби),
в деревне не так много (их жрут ястреки, тем более аэродром рядом, там их как-то гоняют),
а в городе вообще писец, прикольно, что жрут даже кошачий корм.
Недавно, когда был в городе, сплю, начинает происходить какая-то фигня в квартире,
на кухне шум, я один и кошка. Открываю один глаз, думаю кошка.
Кошка сидит на стуле у компа и сама слушает. Я ей мысленно
— Иди проверь, что там за фигня.
Кошка мне также мысленно (но по роже понятно):
— Твоя хата, вот ты и проверяй, я вообще после прививки, а вдруг там НЕХ,
а у меня иммунитета к ней нет.
Воззвал к Слаанеш и Ктулху, пошел. Голубь.
Внутрь залетел, и форточку потерял, тупой тому ще.
Поймал, принес в комнату, показываю кошке.
Кошка брезгливо понюхала, типа «выкинь каку», ну я его с балкона и выкинул.

Отключение обновления Foxit PDF Reader (v. 8.3.2.25013)

Преамбула

Когда-то писал о том, что в новых версиях Foxit Reader пропал PDF-принтер и Foxit PDF Creator (копия). Так вот, новая гадость пришла откуда не ждали, теперь он сносит PDF-принтер при обновлениях.

Штатного способа отключить обновления нет

Решение

Сама программа обновления имеется в двух экземплярах:

В каталоге Foxit:
C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitUpdater.exe

И в каталоге Application Data:
C:\Users\<username>\Application Data\Foxit Software\Addon\Foxit Reader\FoxitReaderUpdater.exe, вместо <username> — ваше имя пользователя.

Просто снести два экзешника не получится, точнее получится, но Foxit Reader будет при каждом запуске ругаться, что не нашел свой обновлятор. Зато не будет ругаться, если обновлятор (оба файла) просто заменить на экзешник, который ничего не делает, а такой я уже делал (копия), правда по другому поводу. Сделал еще и версию на MASM

Написал патч на NSIS

И для себя, если винды переустанавливать, и для клиентов, на всякий случай.

Репозиторий на GitHub
Исходник NSIS
Копия (без дополнительных файлов) на PasteBin
Скачать готовый патч

Дополнительно

В принципе, исходник достаточно простой, оставлю только ссылку на получение MD5-суммы файла в NSIS: NSIS: контрольная сумма (MD5), сравнение файлов. (копия).

Примечание: почему-то MD5-сумма, получаемая NSIS-плагином (md5dll.dll) отличается от MD5-суммы, полученной средствами Windows (копия). Почему, пока не разобрался. Может, позже напишу.

Windows, CMD/BAT: получить MD5 и другие хэш-суммы для файлов.

Иногда нужно проверить целостность и правильность файла, например, скаченного из Интернета. Часто производитель файла публикует хэш-сумму (результат работы хэш-функции), а пользователь может ее проверить с помощью сторонних утилит, чтобы убедиться, что файл не поврежден или не был подвергнут зловредным изменениям злоумышленником, например, заражению вирусом, внедрению вредоносного кода.

Windows 7 и выше

В Windows 7 присутствует стандартная утилита certutil, предназначенная для работы с сертификатами и хранилищами сертификатов, но она умеет вычислять и хэш-суммы файлов.

certutil -hashfile <путь_до_файла>

По умолчанию утилита генерирует хэш SHA1

Чтобы сгенерировать хэш-сумму по другому алгоритму, нужно вызвать утилиту так:

certutil -hashfile <путь_до_файла> <алгоритм>

где <алгоритм> — один из поддерживаемых алгоритмов (регистр символов в названии алгоритма значения не имеет)

Поддерживаемые алгоритмы:

— MD2
— MD4
— MD5
— SHA1
— SHA256
— SHA384
— SHA512

Например, чтобы получить MD5-хэш надо вызвать утилиту со следующими параметрами:

certutil -hashfile <путь_до_файла> MD5

Проще всего наделать батников для каждого (или нужных) алгоритмов, да положить их в один из PATH-каталогов, например, для получения MD5-хэша можно создать MD5.BAT со следующим кодом:

@certutil -hashfile %1 MD5

Впрочем, я для вас заморочился. Тут можно взять батник для каждого алгоритма, или скачать SFX-архив для самых ленивых. Распакуется в директорию Windows.

Улучшаем BAT-файлы

Вообще, оригинальный вывод содержит много лишнего, утилита выводит лишнюю строку, сообщая о том, что обрабатывает указанный файл, потом выводит хэш, где каждый байт хэш-суммы через пробел, а потом еще и уведомляет нас, что операция успешно завершена (нет, бля, мы не заметили):

N:\BatTest\win7\simple>certutil -hashfile MD5.BAT MD5
MD5 хеш файла MD5.BAT:
9b e2 27 09 ed 09 0a 23 9e 55 52 6b 44 04 a5 33
CertUtil: -hashfile - команда успешно выполнена.

Делаем так, чтобы батник отображал только строку с хэшем и без всяких пробелов.

1. Поскольку, язык BAT/CMD беден на операции со строками, нам придется скачать стороннюю, заимствованную из Linux утилиту awk, и добавить специальную команду, чтоб утилита оставила нам только вторую строку в выводе:

certutil -hashfile MD5.BAT MD5 | awk NR==2
b9 cb 1e 4b 57 f7 77 dd 67 ee a1 61 2e c4 32 20

Скачать утилиту awk для Windows можно здесь.

2. Удалить пробелы можно тоже с помощью awk:

awk "{ gsub(/ /,//); print }"

Весь батник целиком:

@certutil -hashfile %1 MD5|awk NR==2|awk "{ gsub(/ /,//); print }"

Вывод:

N:\BatTest\win7\ one-hash>MD5.bat MD5.bat
b310116e1fa1241e916717515212c1a01f116913e147144

Готовые .BAT-файлы на GitHub
SFX-архив (распаковывается в директорию Windows, awk в комплекте)

Windows XP и выше

В Windows XP утилиты certutil нет, потому придется пользоваться сторонними программами. Их множество, но, например, можно воспользоваться утилитой hash.exe

Она поддерживает хэш-суммы:

— MD5
— SHA1
— SHA256
— SHA512

Параметры запуска:

hash.exe <алгоритм> <путь_до_файла>

Например:

Hash.exe md5 Hash.exe

выдаст MD5-хэш самой hash.exe:

Hash.exe 126399821fc56f045cef5af1d09e832b

Утилита использует библиотеки OpenSSL (DLL есть в комплекте) для получения хэш-функций.

Внимание! Утилита дубовая от слова ой, Древние! Внутреннего хелпа у нее нет, на любые ошибки (нет параметров, параметры перепутаны местами, файл недоступен) она просто выдаст пустую строку в выводе.

Опять же, наделал батников (на GitHub)

И SFX-архив для ленивых (hash.exe и DLL в комплекте)

Консольный hello, world на MASM32. Трактат с подробным разбором, лирическими отступлениями и дополнениями

Преамбула

Итак, обещал рассказать, как все-таки написать консольный Hello, world на ассемблере, и выбрал для этого MASM, потому что TASM’овский компилятор довольно давно полумертв, и не умеет из коробки некоторых базовых вещей, например, не умеет указывать подсистему (это изменение одного поля в заголовке PE-файла), в которой должна работать программа под Win32. Подсистем есть несколько, но нас пока интересуют две: WINDOWS и CONSOLE. Первая, для оконных приложений, а вторая — для консольных. Если ОС будет видеть, что приложение консольное, она проверит, открыта ли для него консоль уже (если мы запускаем приложение через cmd, или Far manager, например), и откроет для него консоль, если мы запускаем приложение из оконной среды, щелкая по экзешнику мышкой. Это избавляет нас от геморроя, вручную контролировать консоль, открывать ее, закрывать, освобождать. Хотя, принципиальных ограничений нет — консольное приложение спокойно может открыть, как стандартное диалоговое окно, так и вообще создать полноценную форму, а оконное приложение — открыть консоль.
Далее под катом…

Автограф Горбачева

Оказываюсь на какой-то конференции, куча всяких политиков и деятелей, видел в толпе Мырзина, Витухновскую, Латынину. И тут идет Горбачев. Я у кого-то рядом со мной вырываю листок, и расталкивая всех остальных, проламываюсь к Михаилу Сергеевичу, еще думаю — Ельцин помер, Кравчук помер, Шушкевич помер, а такие люди были, надо хоть у Горбачева взять автограф.

Интересно, что во сне ощущаю себя подростком. Горбачев меня как-то по-доброму по голове потрепал, а потом взял огрызок листка и расписался.

Самое странное — подпись была настоящая, я с Википедией сравнивал. А до этого я подписи Горбачева не видел, после сна нашел.

MASM32: Ошибки structure improperly initialized, syntax error : in structure и т.д. в windows.inc

И вообще их куча подобных вылезает, что аж компилятор отказывается анализировать: fatal error A1012: error count exceeds 100; stopping assembly

Решение

Скорее всего, в основной программе вы забыли указать конструкцию:option casemap:none

Эта опция говоpит MASM сделать имена (функций, меток, констант и т.д)чувствительными к pегистpам, например, ExitProcess и exitprocess — это pазличные имена.

Вообще лучше всегда указывать option casemap:none перед подкдючением внешних .inc файлов и библиотек (.LIB):

.386
.model flat, stdcall
option casemap:none

include windows.inc
include kernel32.inc
includelib kernel32.lib

...

MASM32: .386 .model, STDCALL, что это такое.

Совсем краткое пояснение. Как театр начинается с вешалки, так программа на ассемблере MASM начинается с указания набора инструкций:

.386

Это ассемблеpная диpектива, говоpящая ассемблеpу использовать набоp опеpаций для пpоцессоpа 80386. Вы также можете использовать .486, .586, но самый безопасный выбоp — это указывать .386. Также есть два пpактически идентичных выбоpа для каждого ваpианта CPU. .386/.386p, .486/.486p. Эти «p»-веpсии необходимы только когда ваша пpогpамма использует пpивилигиpованные инстpукции, то есть инстpукции, заpезеpвиpованные пpоцессоpом/опеpационной системой в защищенном pежиме. Они могут быть использованны только в защищенном коде, напpимеp, дpайвеpами. Как пpавило, ваши пpогpаммы будут pаботать в непpивилигиpованном pежиме, так что лучше использовать не-«p» веpсии. (Из мануала Iczelion’а)

.model flat

.model — модель памяти, используемая вашей программой. Для DOS, например, были модели tiny, small, compact, flat, lagre и т.д. — они выбирались в зависимости от типа программы. По ограничениям DOS сегмент кода не мог занимать пространство, больше размера одного сегмента в памяти. Чтоб это обойти, как раз и использовалась сегментация. Tiny и flat могли быть использованы для оригинальных DOS-программ, с расширением .com, которые могли занимать чуть меньше одного сегмента (64 Кб), на код и данные, и представляли собой просто кусок кода вместе с данными, можно сказать RAW-формат исполняемого файла — просто откомпилированный байткод, даже без всякого заголовка. Для EXE формата, код и данные могли занимать несколько сегментов.

В Win32 сегментация памяти не нужна, во-первых, размер адреса 32-битный, что больше, чем в DOS, во-вторых, менеджментом памяти занимается ОС, потому программа видит все нужные ей внешние библиотеки и функции из них, как если бы они были загружены в адресное пространство программы. Таким образом, программа под Win32 изнутри представляет такой себе очень большой .COM-файл, потому используется только одна модель памяти — flat.

.model flat, stdcall

У директивы .model есть несколько важных параметров, самый главный из них, указание на передачу параметров функций (обычно внешних, из DLL, но никто не мешает для своих функций использовать). Его и указываем через запятую (stdcall).

Есть три способа передачи параметров:
C (си) способ: вызывающая, т.е. наша программа, должна положить в стек нужные параметры, причем, в обратном порядке. Например, если функция описывается так:

SomeFunction (Argument1, Argument2, Argument3)

То на ассемблере она вызывается так:

push Argument3
push Argument2
push Argument1
call SomeFunction

А далее, вызывающая программа должна почистить стэк (по-научному это называется «уравнять»), push уменьшает значение регистра стека на размер операнда (2 или 4 байта), пусть будет 4, тогда получается, что надо увеличить значение стека на 3x4=12 байт.

add SP, 12

C-поpядок полезен, когда вы не знаете, как много паpаметpов будут пеpеданны функции

PASCAL — это C соглашение наоборот, параметры передаются в прямой последовательности, т.е. первый параметр кладется в стек первым, а со стеком должна разбираться сама вызываемая функция.

STDCALL — это гибрид C и PASCAL соглашения, параметры передаются в обратном порядке, но со стеком разбирается вызываемая функция.

Win32 использует практически исключительно STDCALL соглашение для своего API, исключая функцию wsprintf(), потому что она не знает, сколько ей будет передано параметров. При ее вызове следует использовать C-соглашение.

Ошибка в windows.inc (MASM)

Если вы используете include-файл windows.inc в MASM, и при компиляции происходит ошибка windows.inc(78) : error A2119: language type must be specified, значит, забыли указать параметр stdcall в директиве .model

Первый выход на полёвку


Крупный вариант


Крупный вариант

Хозяину леса, естественно, сигаретку оставили. Без фильтра не было.


Крупный вариант

Некоторые дурни думают, что мы на полевки на «Оке» ездим. Хотя вообще, я хочу мафынку для выездов, как в «Обители зла», можно без лого «Амбреллы».

Да, купил новый фот. Засру вам ленту своим непрофессионализмом.

Скрипты NppExec для MASM

Компиляция консольного приложения

npp_save
cd "$(CURRENT_DIRECTORY)"
G:\masm32\bin\ml.exe /c /coff /IG:\masm32\include\ $(FILE_NAME)
if $(EXITCODE) !=0 goto exit

G:\masm32\bin\link.exe $(NAME_PART).obj /SUBSYSTEM:CONSOLE /LIBPATH:G:\masm32\lib\
:exit

Компиляция и запуск консольного приложения

Не всегда корректно работает, как сделать, пока не разобрался.

npp_save
cd "$(CURRENT_DIRECTORY)"
G:\masm32\bin\ml.exe /c /coff /IG:\masm32\include\ $(FILE_NAME)
if $(EXITCODE) !=0 goto exit

G:\masm32\bin\link.exe $(NAME_PART).obj /SUBSYSTEM:CONSOLE /LIBPATH:G:\masm32\lib\
if $(EXITCODE) !=0 goto exit

$(NAME_PART).exe

:exit

Компиляция оконного приложения Windows

npp_save
cd "$(CURRENT_DIRECTORY)"
G:\masm32\bin\ml.exe /c /coff /IG:\masm32\include\ $(FILE_NAME)
if $(EXITCODE) !=0 goto exit

G:\masm32\bin\link.exe $(NAME_PART).obj /SUBSYSTEM:WINDOWS /LIBPATH:G:\masm32\lib\
:exit

Компиляция и запуск оконного приложения Windows

npp_save
cd "$(CURRENT_DIRECTORY)"
G:\masm32\bin\ml.exe /c /coff /IG:\masm32\include\ $(FILE_NAME)
if $(EXITCODE) !=0 goto exit

G:\masm32\bin\link.exe $(NAME_PART).obj /SUBSYSTEM:WINDOWS /LIBPATH:G:\masm32\lib\
if $(EXITCODE) !=0 goto exit

$(NAME_PART).exe

:exit

На GitHub

masm-compile-console.txt
masm-compile-console-and-run.txt
masm-compile-windows.txt
masm-compile-windows-and-run.txt

На PasteBin

masm-compile-console.txt
masm-compile-console-and-run.txt
masm-compile-windows.txt
masm-compile-windows-and-run.txt

Другие копии

Архив на Mega.NZ
Архив на Google.Drive

Как забэкапить макросы Notepad++ И как перенести макрос на другой комп.

Преамбула

Да, пока показывал школьникам ассемблер, записал пару макросов, которые создают шаблон программы, а то лень писать .386, model flat и т.д., но, поскольку, делал это в основном на своем компьютере, встал вопрос — а нельзя ли макросы перенести на другой комп, ну и забэкапить для верности. Оказывается, можно.

Backup

Бэкап делается просто. Макросы хранятся в файле C:\Users\<username>\AppData\Roaming\Notepad++\shortcuts.xml для Windows 7. В остальных системах ищите shortcuts.xml, а где он находится у вас — не ведаю.

Перенос

Если надо перенести макрос с одного компьютера на другой, открываем файл shortcuts.xml в любом текстовом редакторе.

Макросы находятся между XML-тегами <Macros> </Macros>, а конкретный макрос между тегами <Macro ...> </Macro> где, в первом, открывающем теге, указаны параметры макроса: имя (name=), и комбинация клавиш для вызова (Ctrl="no" Alt="no" Shift="no" Key="0").

Если необходимо перенести макрос с одного компьютера на другой, просто скопируйте строки, начинающиеся с <Macro name="ваш_макрос"> до </Macro> включительно, и вставьте макрос на целевом компьютере в файл shortcuts.xml между тегами <Macros> </Macros>

Примеры

Макрос для создания «болванки» исходника для TASM32 на PasteBin
Макрос для создания «болванки» исходника для TASM32 на GitHub

Макрос для создания «болванки» исходника для MASM32 на PasteBin
Макрос для создания «болванки» исходника для MASM32 на GitHub

Копия shortcuts.xml на mega.nz

О формате объектных файлов и библиотек COFF и OMF, и об опасности их смешения.

На рассвете цивилизации ПК и примерно до того времени, когда появились инструменты программирования Microsoft Win32, почти все компиляторы для ПК создавали объектные файлы с использованием стандарта Intel Object Module Format (OMF). Позже Intel представила процессоры 386 и 32-разрядный защищенный режим, после чего они также расширили спецификацию OMF для 32-разрядных систем, что привело к появлению «OMF-386», который стал стандартом для большинства сред защищенного режима ПК. Примерно в это же время исходная группа разработчиков Windows NT также разрабатывала код не только для процессоров Intel, но и для поддержки процессоров других производителей. Команда Microsoft NT выбрала более переносимый формат объектных модулей, известный как Common Object File Format (COFF), производный от официального формата объектного кода для UNIX System V. Объектные модули COFF позже стали стандартом де-факто для всех инструментов разработки Microsoft Win32 и получили преимущество в том, что он намного ближе по формату к переносимым исполняемым файлам (PE) — собственному исполняемому формату для Win32 (компоновщику формата COFF требуется гораздо меньше усилий для создания 32-разрядного EXE или DLL из файла COFF, чем из файла формата OMF).

Помимо объектных файлов форматов OMF и COFF (.obj), существуют также файлы библиотек форматов OMF и COFF (.lib). Библиотеки, к счастью, в основном представляют собой просто набор объектных файлов вместе с заголовочной информацией, которая позволяет компоновщику определить, какие объектные файлы из библиотеки использовать. Однако, чтобы усложнить ситуацию, и OMF, и COFF используют одни и те же расширения имен файлов, .obj и .lib, для ссылки на два разных типа форматов файлов объектов и библиотек (из-за этого вы не можете просто посмотреть на расширение имени файла чтобы узнать, является ли объектный модуль или файл библиотеки OMF или COFF).

Проблема со смешиванием объектных файлов и файлов библиотек от разных производителей компиляторов заключается в том, что одни поставщики поддерживают COFF, другие используют OMF, а некоторые могут работать и с тем, и с другим. Borland, например, по-прежнему использует объектные файлы и библиотеки OMF, тогда как 32-разрядные компиляторы Microsoft создают файлы формата COFF. Watcom C/C++ v11.0, по-видимому, предпочитает COFF при компиляции и компоновке приложений Windows, но создает объектные файлы OMF для использования с 32-разрядным DOS-расширителем защищенного режима DOS4GW. Microsoft MASM 6.13 по умолчанию создает файлы OMF, но параметр командной строки /coff указывает компилятору, что он должен создавать объектные файлы COFF.

Когда приходится связывать файлы разных форматов, разные компоновщики делают разные вещи. Например, компоновщик Microsoft Visual C/C++ предназначен для объектных файлов и библиотек формата COFF, но при необходимости попытается преобразовать объектные файлы OMF в файлы COFF. В некоторых случаях это работает, но, к сожалению, Microsoft LINK не поддерживает все типы записей OMF, поэтому во многих ситуациях компоновщик может дать сбой при работе с объектными файлами формата OMF. Кроме того, хотя Microsoft LINK пытается поддерживать объектные файлы OMF, он отказывается обрабатывать любые библиотеки формата OMF. Другие компоновщики, такие как TLINK от Borland, предназначены для объектных файлов OMF и аналогичным образом отказываются работать с объектными или библиотечными файлами формата COFF. Некоторые поставщики расширителей DOS и встраиваемых систем, такие как Phar Lap, предоставляют свои собственные компоновщики, поддерживающие как OMF, так и COFF, что дает вам возможность выбора.

Проблема в том, что смешение OMF и COFF типов объектных файлов и файлов библиотек может привести к хаосу. Вдобавок появляются загадочные сообщения об ошибках от компоновщиков, которые только вносят еще большее непонимание. Если ваш компоновщик не поддерживает определенный формат, вам следует придерживаться рекомендуемого формата объекта и библиотеки для вашего компилятора/компоновщика/платформы и избегать смешивания файлов OMF и COFF.

Перевод: Leha Silent для tolik-punkoff.com
Оригинальный текст (англ., TXT) предоставил Jiang Yap из WeChat
Копия перевода в TXT

Assembler: проверка условий и переходы (jump)

Небольшая шпаргалка по условным и безусловным переходам.

Безусловный переход: выполняется командой JMP <метка>, может использоваться, как для перехода вперед, пропуская некоторые команды в коде, так и для возврата назад, для повторного выполнения инструкций:

1.

	...
	какой-то код
	...
	JMP	label1
	...
	какой-то код
	...
label1:
	...
	другой код
	выполняется после срабатывания
	инструкции JMP
	...


2.

	...
	какой-то код
	...
labelret:
	...
	какой-то код
	...
	JMP	labelret

Условный переход: Выполняется, если выполнено какое-либо условие, переход осуществляется командой Jxx <метка>, где xx — мнемоника, указывающая на проверяемое условие.

Инструкция CMP

Инструкция CMP сравнивает два операнда, в основном вычитая один операнд из другого для сравнения, равны ли операнды или нет, не изменяя целевой или исходный операнд. Инструкция CMP используется вместе с инструкцией условного перехода для принятия решения. CMP изменяет регистр флагов, который потом проверяет соответствующая инструкция условного перехода, и осуществляет (не осуществляет) переход по соответствующему адресу (метке).

Синтаксис:

CMP целевой_операнд, исходный_операнд

CMP сравнивает два числа. В качестве целевого операнда может использоваться значение в регистре или в памяти. Исходный операнд может быть константой (EQU), непосредственно числом, значением в регистре или памяти. Так же, оба операнда не могут быть одновременно значениями в памяти.

Правильно Неправильно Ошибка (MASM)
cmp eax, ecx MYVALUE1 dd 2
MYVALUE2 dd 5

cmp MYVALUE1, MYVALUE2
invalid instruction operands
cmp eax, 0 cmp 0, eax immediate operand not allowed
ERROR_FLAG EQU 16h

cmp eax, ERROR_FLAG
ERROR_FLAG EQU 16h

cmp ERROR_FLAG, eax
immediate operand not allowed
MYVALUE dd ?

cmp eax, MYVALUE
MYVALUE dd ?

cmp MYVALUE, eax
MYVALUE dd ?

cmp MYVALUE, 0
MYVALUE dd ?

cmp 0, MYVALUE
immediate operand not allowed
MYVALUE dd ?
ERROR_FLAG EQU 16h

cmp MYVALUE, ERROR_FLAG
MYVALUE dd ?
ERROR_FLAG EQU 16h

cmp ERROR_FLAG, MYVALUE
immediate operand not allowed
cmp 0, 1 immediate operand not allowed
CONST1 equ 1
CONST2 equ 2

cmp CONST1, CONST2
immediate operand not allowed

Также нужно быть внимательным при сравнении значения в памяти и регистре, если их размерность будет не совпадать, это приведет к ошибке компиляции. Например, при сравнении регистра EAX, имеющего разрядность двойное слово (DWORD) с переменной, разрядность которой установлена, как байтовая (DB):

...
MYVALUE db 1
...
cmp eax, MYVALUE
...
;Ошибка: invalid instruction operands

Условные переходы

Результаты арифметических операции для знаковых чисел

Инструкция Описание Проверяемые флаги
JE/JZ Если значения равны/Если значение 0 ZF
JNE/JNZ Если значения не равны/Если значение не 0 ZF
JG/JNLE Если больше/Если не меньше или равно OF SF ZF
JGE/JNL Если больше или равно/Если не меньше OF SF
JL/JNGE Если меньше/Если не больше или равно OF SF
JLE/JNG Если меньше или равно/Если не больше OF SF ZF

Результаты арифметических операции для беззнаковых чисел или логических операций

Инструкция Описание Проверяемые флаги
JE/JZ Если значения равны/Если значение 0 ZF
JNE/JNZ Если значения не равны/Если значение не 0 ZF
JA/JNBE Если больше/Если не меньше или равно CF ZF
JAE/JNB Если больше или равно/Если не меньше CF
JB/JNAE Если меньше/Если не больше или равно CF
JBE/JNA Если меньше или равно/Если не больше AF CF

Прочие инструкции для условных переходов

Эти инструкции имеют специальное применение и проверяют значения отдельных флагов во флаговом регистре.

Инструкция Описание Проверяемые флаги
JXCZ Если значение в регистре CX равно 0 Нет
JC Если произошел перенос в результате арифметической операции CF
JNC Перенос не произошел CF
JO Произошло переполнение OF
JNO Переполнение не произошло OF
JP/JPE Число единичных бит четное PF
JNP/JPO Число единичных бит нечетное PF
JS Число со знаком (отрицательное) SF
JNS Число без знака (положительное) SF

Ссылки

Регистр флагов с описанием значений флагов (копия)

Assembler, компиляторы и туториалы Iczelion’а

Очередная ссылочная.

Компиляторы:

TASM/TASM32, компилятор для Windows x86 и DOS (Mega.NZ, ZIP, 4.6 Мб)
MASM for DOS (Mega.NZ, ZIP, 4.6 Мб)
MASM32, компилятор для Windows x86: Официальный сайт (копия на Mega.nz)
IMPORT32.LIB (7z, Mega.NZ) (копия на Google.Drive)

Туториалы Iczelion’а (RUS, перевод WASM.RU).

Довольно неплохое руководство по Win32 API для начинающих программистов на ассемблере. Начиная с простейших примеров и до довольно продвинутых программ, включая описание структур и функций Win32 API, структуры PE EXE-файла, простейших VxD-драйверов.

Перевод Aquila.

В комплекте исходники и бинарники примеров программ.

На Old-DOS
На mega.nz