Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320

Учебная статья

20.05.2011, 14:39. Показов 4766. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В данной статье расматриваються безусловные переходы на delphi и реализации альтернативы в с помощью вставки asm. Я статью выложел на своем будущем сайте... Вобщем вот начало коме интересно заходите может напишу что новенького. Вырезана рекламная ссылка
Сама статья
Учебное пособие (Изучаем Ассемблер и Паскаль в сравнении)

Введение
В данной книге производиться изучение языка ассемблера(встроенный в Delphi 7) и паскаля в сравнении между собой. При этом затрагивается макро ассемблер "MASM 32 Editor Version 10” Данное учебное пособие написанное и рассчитанное на людей вообще незнающий ассемблер, но знающих Delphi (Деэлфай) В языке программирования Delphi нет многих инструкций которые приводиться на самом оригинальном ассемблере.

Урок 1
(метки в Delphi и альтернатива на ASM)

В текущем уроке рассматриваем метки (в дельфи они называться label). На масме метки тоже есть и они называются JMP но если мы возьмем классический ассемблер в сравнении с встроенным ассемблером в Delphi то мы найдем разницу между ними. Команды переходов всегда начинаются с буквы "j” а дальше к ним подставляться дополнения (О них пока говорить не надо).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2011, 14:39
Ответы с готовыми решениями:

Выбирать из потока АSСII-кодов только цифры и выводить их на дисплей
Всем доброго времени суток. Если может кто нибудь помочь с ниже приведенной задачей буду искренне признателен. Единственно что она...

Учебная задача, как сделать?!
Помогите написать на assembler, вот это чудо: a/b+10, если a>b 2, если a=b (a3+1)/b, если a<b Добавлено через 1 час 9...

учебная модель Эвм. АССЕМБЛЕР
как вбить число...ну например мне нужно вычислить 1800/х

5
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
20.05.2011, 20:28  [ТС]
Учебное пособие (Изучаем Ассемблер и Паскаль в сравнении)

Введение
В данной книге производиться изучение языка ассемблера(встроенный в Delphi 7) и паскаля в сравнении между собой. При этом затрагивается макро ассемблер "MASM 32 Editor Version 10” Данное учебное пособие написанное и рассчитанное на людей вообще незнающий ассемблер, но знающих Delphi (Деэлфай) В языке программирования Delphi нет многих инструкций которые приводиться на самом оригинальном ассемблере.


Урок 1
(метки в Delphi и альтернатива на ASM)
В текущем уроке рассматриваем метки (в дельфи они называться label). На масме метки тоже есть и они называются JMP но если мы возьмем классический ассемблер в сравнении с встроенным ассемблером в Delphi то мы найдем разницу между ними. Команды переходов всегда начинаются с буквы "j” а дальше к ним подставляться дополнения (О них пока говорить не надо).

Образец кода delphi
Delphi
1
2
3
4
5
6
7
8
9
10
label 
  ending; 
var 
  eax1 : Integer; 
begin 
  eax1 := 0; 
  eax1 := 10; 
  ending: 
  inc(eax1); 
  goto ending;
Далее расмотрим тотже код но написаный спомощью вставки asm

Assembler
1
2
3
4
5
6
7
asm 
  xor eax, eax 
  mov eax, 10 
  @ending: 
  inc eax 
  jmp @ending
end;
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
20.05.2011, 20:36  [ТС]
Условия "IF" на языке assambler

Урок 2
(Расмотрим условия "IF")
Условия на языке Pascal представляют собой всем известную форму:

If A <= 10 Then begin
...
Здесь код, который будет выполнен, если условия выполнено
...
End else
...
Здесь код, который будет выполнен, если условие не выполнено
...



На языке низкого уровня таких инструкций нет. Инструкцию if в ассемблере заменяет инструкции (CMP и TEST). Команды между собой отличаються.

Будем изучать CMP

CMP - Сравнивает положительные и отрицательные значения. Отличие команды TEST заключается - в поразрядном сравнении, но нам это пока не надо.Будет применять как есть – кто хочет подробностей пусть читает другую статью. Рассмотрим ниже пример кода с разветвлением:




Тотже код только с помощью вставки asm


Pascal
1
2
3
4
5
6
7
8
Pascal
var 
  x : Byte; 
begin 
  x := 100; 
  if x < 110 then 
    inc(x); 
  end;

Assembler
1
2
3
4
5
6
7
asm 
  mov eax, 100 
  @mode: 
  inc eax 
  cmp eax, 110 
  JB @mode //выполнмть переход если флаг ZF = 1
end
Код, написанный на дельфи не требует комментария что касается кода написанного на asm я прокомментирую все очень просто: Команда cmp она находиться как бы в цикле и постоянно проверяет условия "eax = 110 ? --> cmp eax, 110" на дельфи эта строка записалась так "if eax = 110 then” после того как eax становиться равным 110 флаг ZF изменяется с 0 на 1 это важно!!! Что такое флаги? Прочтите обязательно если не знаете! На них полностью основан переход. Следом у вас идет команда JB которая проверяет флаг CF, Переход будет выполнен в том случае если флаг CF будет равен 1 иначе команда JB выполнена не будет.

Что такое флаги и где их смотреть в Delphi 7?

Что бы наблюдать за изменением флагов выполните следующие. Напишите код если он у вас еще не написан и запустите на выполнение в режиме отладки клавишей (F7 или выбрать в меню в delphi Run\trace Into ) откроется окно слева в большом ваш код, т.е. код который сейчас будет, выполняется, а правее там есть флаги найдете флаг CF. И нажимая клавишу F7 ВНИМАТЕЛЬНО СМОТРИТЕ ЗА НИМ КАК ОН ИЗМЕНИТЬ ЗНАЧИТ БУДЕТ ВЫПОЛНЯЕТЬСЯ ИНСТРУКЦИЯ ПЕРЕХОДА. Изменения которые были выполнены отмечаються красным цветом.

Большая просьба на статью нежаловаться тоже начинающий прог-т в области асм если что пишете нюансы
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
20.05.2011, 21:16
Может я ошибаюсь, я почти не помню паскаль, но код на паскале и на ассемблере не аналогичны. Код на ассемблере реализует цикл типа do while, на паскале условие проверится один раз и x не изменится.

Цитата Сообщение от n971030 Посмотреть сообщение
JB @mode //выполнмть переход если флаг ZF = 1
не верно. Выполнится переход если CF=1
0
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
21.05.2011, 08:52
Если объявить метки в блоке label, то можно выполнять переходы из ассемблерного кода в паскаль и наоборот.
Pascal
1
2
3
4
5
6
7
8
9
label
  a,b;
begin
  goto a;
  asm
  a: jmp b;
  end;
  b:
end;
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
21.05.2011, 09:28
интересная весчь
начинающие после этого будут боятся ассемблера как черт ладана.
для начала

Цитата Сообщение от n971030 Посмотреть сообщение
Pascal
1
2
3
4
5
6
7
var 
 x : Byte; 
begin 
 x := 100; 
 if x < 110 then 
 inc(x); 
 end;
Код ASM

Assembler
1
2
3
4
5
 mov eax, 100 
 @mode: 
 inc eax 
 cmp eax, 110 
 JB @mode //выполнмть переход если флаг ZF = 1
не эквивалентны
флаги попутаны
(Ну про это уже написали)
идем дальше


Цитата Сообщение от n971030 Посмотреть сообщение
CMP - Сравнивает положительные и отрицательные значения.
какие такие положительные и отрицательные значения???
разница для знаковых и беззнаковых в командах перехода
как работает (сравнивает) CMP не написано
а это просто вычитание одного числа из другого без запоминания результата (но флаги выставляются)
почему не расписаны флаги(кто за что отвечает,как устанавливаются)?

в частности

Цитата Сообщение от n971030 Посмотреть сообщение
CF
это флаг переполнения разрядной сетки
выставится если два больших числа сложить или
вычесть большое число из малого
ZF флаг нуля
выставляется если в аккумуляторе 0(при действии арифметических и логических команд)
Assembler
1
2
mov eax,0 ; вот так не выставится
xor eax,eax ; а так выставится
Цитата Сообщение от n971030 Посмотреть сообщение
"eax = 110 ? --> cmp eax, 110" на дельфи эта строка записалась так "if eax = 110 then”
не верно
правильный аналог
Assembler
1
2
cmp eax,110
jz ...... ;для знаковых je
а для
Цитата Сообщение от n971030 Посмотреть сообщение
cmp eax, 110
JB @mode
аналог будет
Pascal
1
if eax < 110 then
Цитата Сообщение от n971030 Посмотреть сообщение
Команды переходов всегда начинаются с буквы "j” а дальше к ним подставляться дополнения (О них пока говорить не надо).
о них то как раз и надо говорить в первую очередь
ибо их там до проха
безусловный переход
условные переходы
если 0 (если равно)
если не 0 (если не равно)
если больше
если не больше
если больше или равно
исли меньше
если не меньше
если меньше или равно
причем для знаковых и без знаковых они разные
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2011, 09:28
Помогаю со студенческими работами здесь

Учебная ЭВМ. Минимальное число
RD #40 WR 30 RD #6 WR 31 RD @30 WR 32 M1: RD 30 ADD #1 WR 30 RD 31

Учебная ЭВМ. Минимальное положительное число
Здравствуйте, задание, найти минимально-положительное число, при данном коде 0 считается программой как число &quot;не достойное&quot; быть...

Учебная программа с защитой от копирования, статического и динамического исследования
Здравствуйте, помогите пожалуйста с заданием нужно написать программу с такими параметрами:метод защиты программы от копирования:...

Программа с использованием подпрограммы. Учебная модель ЭВМ Жмакина
Три массива в памяти заданы начальными адресами и длинами. Вычислить и вывести на устройство вывода среднее арифметическое параметров этих...

Найти номер минимального числа (учебная модель ЭВМ Жмакина)
Написать программу определения номера минимального числа элементов массива чисел С1, С2,..., Сn. сделать нужно в учебной модели ЭВМ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru