|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.09.2014, 23:17 | #11 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,764
|
Цитата:
|
|
14.09.2014, 17:08 | #12 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 588
|
Смотрите пожалуста КодерПро. Я сохранил кажится прошлой осинью листы сайта, статьи как и оформление понравились офигенно!
Может прилипнут к сообщению.. Урок 10 - Преимущества MASM.mht: Некорректный файл Жаль!!!!!!!! Ну тогда так что ли. 10- Преимущества MASM вперед -------------------------------------------------------------------------------- 10.0 - Преимущества masm Если вы не используете masm, то можете пропустить этот раздел и попробовать преобразовать все примеры, или прочитать это и пробовать убедить себя, использовать masm. Конечно это ваш собственный выбор. Но masm делает действительно ассемблер намного проще. 10.1 - Конструкции сравнения и повтора Masm имеет некоторый синтаксис псевдовысокого уровня, чтобы легко создавать конструкции сравнения и повтора: .IF, .ELSE, .ELSEIF, .ENDIF .REPEAT, .UNTIL .WHILE, .ENDW, .BREAK .CONTINUE If Если у вас есть опыт в языках программирования, возможно вы видели что-то вроде if/else конструкций: .IF eax==1 ;eax равен 1 .ELSEIF eax=3 ; eax равен 3 .ELSE ; eax не равен 1 и 3 .ENDIF Эта конструкция очень полезна. Вам не нужно вставлять сравнения и переходы, а только вставте директиву .IF (не забудьте точку перед .IF и .ELSE и т.д.). Вложенности if позволяются: .IF eax==1 .IF ecx!=2 ; eax= 1 и ecx не равно 2 .ENDIF .ENDIF Это может быть сделано проще: .IF (eax==1 && ecx!=2) ; eax = 1 и ecx не равно 2 .ENDIF А вот и операторы, которые вы можете использовать: == равно != не равно > больше < меньше >= больше или равно <= меньше или равно & проверка бита ! инверсия ( NOT ) && логическое 'И' ( AND ) || логическое 'ИЛИ' ( OR ) CARRY? флаг переноса (cf) установлен? OVERFLOW? флаг переполнения (of) установлен? PARITY флаг паритета (pf) установлен? SIGN? флаг знака (sf) установлен? ZERO? флаг нуля (zf) установлен? Repeat Эта конструкция выполняет блок, пока условие не истинно: .REPEAT ; код здесь .UNTIL eax==1 Эта конструкция повторяет код между repeat и until, пока eax не станет равным 1. While Конструкция while это инверсия конструкции repeat. Она выполняет блок, пока условие истинно: .WHILE eax==1 ; код здесь .ENDW Вы можете использовать директиву .BREAK, чтобы прервать цикл и выйти. .WHILE edx==1 inc eax .IF eax==7 .BREAK .ENDIF .ENDW Если eax=7, цикл while будет прерван. Директива continue осуществляет переход на код проверяющий условие цикла в конструкциях repeat и while. 10.2 - Invoke Это самое большое преимущество над tasm и nasm. Invoke упрощает использование процедур и вызовов. Обычный стиль: push параметр_3 push параметр_2 push параметр_1 call procedure Invoke стиль: invoke procedure, параметр_1, параметр_2, параметр_3 Собранный код будет одинаковым, но invoke стиль проще и более надежнее. Чтобы использовать invoke для вызова процедуры, вы должны определить ее прототип: PROTO STDCALL testproc:DWORD, :DWORD, :DWORD Эта директива объявляет процедуру, названную testproc, которая берет 3 параметра размером DWORD. Теперь, если вы сделаете это... invoke testproc, 1, 2, 3, 4 ...masm выдаст вам ошибку, что процедура testproc берет 3 параметра, а не 4. Masm также имеет контроль соответствия типов, т.е. проверяет, имеют ли параметры правильный тип (размер). В invoke вы можете использовать ADDR вместо OFFSET. Это сделает адрес в правильной форме, когда код будет собран. Процедуры определены подобно этому: testproc PROTO STDCALL :DWORD, :DWORD, :DWORD .code testproc proc param1:DWORD, param2:DWORD, param3:DWORD ret testproc endp Это создает процедуру, названную testproc, с тремя параметрами. Прототип используется, invoke. testproc PROTO STDCALL :DWORD, :DWORD, :DWORD .code testproc proc param1:DWORD, param2:DWORD, param3:DWORD mov ecx, param1 mov edx, param2 mov eax, param3 add edx, eax mul eax, ecx ret testproc endp Теперь процедура делает следующие вычисления. testproc(param1, param2, param3) = param1 * (param2 + param3). Значение результата возвращается в регистре eax. Локальные переменные определяются как здесь: testproc proc param1:DWORD, param2:DWORD, param3:DWORD LOCAL var1:DWORD LOCAL var2:BYTE mov ecx, param1 mov var2, cl mov edx, param2 mov eax, param3 mov var1, eax add edx, eax mul eax, ecx mov ebx, var1 .IF bl==var2 xor eax, eax .ENDIF ret testproc endp Вы не можете использовать эти переменные вне процедуры. Они сохранены в стеке и удаляются при возврате из процедуры. 10.3 - Макрокоманды Я не буду сейчас рассказывать о Macro. Возможно в более поздних версиях этого туториала, но сейчас они для нас не важны. [наверх] |
14.09.2014, 17:34 | #13 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
masm не среда, а компилятор, и указанное в нем умеет уже давно не он один.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
14.09.2014, 17:48 | #14 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 588
|
Да я реально тему знаю края, плохо.
|
15.09.2014, 00:20 | #15 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,347
|
Из перечисленного нет интелисенса и пре-созданных шаблонов, все остальное в студии есть, правда для MASM, но я видел сторонние плагины для NASM.
|
12.05.2019, 23:49 | #16 |
Участник клуба
Регистрация: 21.03.2010
Сообщений: 1,508
|
Visual studio 2019 и assembler
Всем привет!
Подниму старую тему. Помогите новичку. Можно ли сейчас подружить Assembler c Visual Studio 2019? Если да, то что установить, какие компоненты среды, какие компиляторы? Я изучал всегда Delphi, QtCreator, поэтому хочу VisualStudio. Начал читать книжку В. И. Юрова. Там Masm. Сейчас установил студию с компонентом разработки под C++, нашёл 2-е инструкции в интернете, но они не работают. https://prog-cpp.ru/asm-vs/. Дошёл до строки "По правой кнопке мыши для файла с расширением .asm выбираем опцию Свойства." Выбираю "Свойства" файла Source.asm и там ничего нет. |
16.05.2019, 12:44 | #17 |
Участник клуба
Регистрация: 21.03.2010
Сообщений: 1,508
|
Получилось!
Я не знаю, хоть вы и плевались от Visual Studio, но я настроил её по этому руководству: http://dml.compkaluga.ru/forum/index...owtopic=101277
Проблема была в том, что нужно установить " разработка классических приложений C++" и после этого создавать "Консольное приложение", удалять main.cpp и добавлять новый по инструкции. Точки останова, отладчик, горячие клавиши, нормальное окно(не консоль), автосборка, объединение нескольких файлов в один проект. Здесь есть всё что мне необходимо для комфортного изучения ассемблера. |
16.05.2019, 21:38 | #18 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
ничего ты так не изучишь.
асм тебе не прибомбас к чему-нибудь, и его нужно изучать отдельно. наоборот, вся высокоуровневая хрень берёт начало от асма, а ты решил пойти обратно
Нашедшего выход - затаптывают первым..
|
16.05.2019, 21:40 | #19 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
и дельфи и паскаль это для беременных мамочек,
если хочешь учить языки, начинай с асма
Нашедшего выход - затаптывают первым..
|
16.05.2019, 21:47 | #20 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Паскаль для школьников, ну а Дельфи хз для кого сейчас (кроме легаси и т.п.).
Если хочешь учить английский — начинай с наскальных рисунков? Кстати, а что значит "учить языки"?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какая среда лучше? | generic1 | Общие вопросы C/C++ | 6 | 13.04.2011 16:13 |
визуальная среда Си++ | aurora_87 | Общие вопросы C/C++ | 0 | 11.11.2009 21:29 |
Визуальная среда с++ | aurora_87 | Общие вопросы C/C++ | 1 | 21.10.2009 23:05 |
какая из трех сортировок (обменная,исчерпыванием,выбором) самая быстрая? | Cyberbest | Помощь студентам | 2 | 26.04.2008 10:34 |