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

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

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

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

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

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

В текущем уроке рассматриваем метки (в дельфи они называться label). На масме метки тоже есть и они называются JMP но если мы возьмем классический ассемблер в сравнении с встроенным ассемблером в Delphi то мы найдем разницу между ними. Команды переходов всегда начинаются с буквы "j” а дальше к ним подставляться дополнения (О них пока говорить не надо).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2011, 14:39
Ответы с готовыми решениями:

Учебная ЭВМ (Assembler).
Всем доброго времени суток. Если может кто нибудь помочь с ниже приведенной задачей буду искренне...

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

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

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

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

Введение
В данной книге производиться изучение языка ассемблера(встроенный в 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  [ТС] 3
Условия "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 4
Может я ошибаюсь, я почти не помню паскаль, но код на паскале и на ассемблере не аналогичны. Код на ассемблере реализует цикл типа do while, на паскале условие проверится один раз и x не изменится.

Цитата Сообщение от n971030 Посмотреть сообщение
JB @mode //выполнмть переход если флаг ZF = 1
не верно. Выполнится переход если CF=1
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
21.05.2011, 08:52 5
Если объявить метки в блоке 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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
21.05.2011, 09:28 6
интересная весчь
начинающие после этого будут боятся ассемблера как черт ладана.
для начала

Цитата Сообщение от 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
21.05.2011, 09:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2011, 09:28
Помогаю со студенческими работами здесь

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

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

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

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

[Статья] Создаем VST эффект на ассемблере
Статья о создании простого VST эффекта на FASM....

Учебная статья - основы работы с реестром в C#
Учебная статья - основы работы с реестром в C# Для начинающих предлагаю эту учебную статью, если в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru