![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Я всё так же не силён в ассемблере, но пытаюсь. Проблема тупейшая, но голова в асме не хочет работать.
Есть вот такая функция: Код:
Код:
Програмистами не рождаются, ими становятся! |
#2
|
||||
|
||||
![]() Вся проблема в том, что нельзя сравнивать переменные. Только регистры.
Код:
Хорошо написанная программа не требует документации ICQ 9-184-668. |
#3
|
||||
|
||||
![]() Вычесть одно из другого и проверить на нуль.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
![]() Эээ....
Код:
Для сравнения есть cmp + флаговые переходы jz/jnz/jb/ja/jc/je - тысячи их, и на каждый еще по несколько псевдонимов. cmp eax, ebx вычитает ebx из eax и выставляет флаги в соответствии с результатом, после чего на основании этих флагов можно сделать или не сделать переход. je/jz - переход на метку если есть флаг нуля, т.е. если результат предыдущей арифм. операции нулевой (eax = ebx в описываемом случае), jne/jnz - наоборот. При сравнении как минимум один аргумент должен быть регистром или константой, при этом первый аргумент константой быть не может. Можно сравнить регистр с числом, регистр с регистром, регистр с памятью, память с числом, память с регистрм. Любые локальные переменные находятся в памяти (и разработчикам MASM, да и не только, надо сказать отдельное "спасибо" за то, что в синтаксисе никак явно не указывается, что это обращение к памяти; только FASM в этом плане додумался логично сделать). .IF-макрос транслируется в тот же cmp +j-что-нибудь. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 05.08.2015 в 23:20. |
#5
|
||||
|
||||
![]() А что мешает свой макрос запилить, который будет две ячейки памяти сравнивать, через регистры, например?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#6
|
||||
|
||||
![]() Можно сделать любой макрос, хоть "сделать_все_хорошо". Только тот же макрос для двух ячеек будет, очевидно, портить регистры, а значит иметь сторонние эффекты, или же работать очень медленно (каждый раз сохранять/загружать один и тот же регистр, даже когда это не надо). Это ж не ЯВУ, который все лишнее соптимизирует потом.
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 07.08.2015 в 20:36. |