Ассемблер в Delphi - Игростроение и развлечение

Форма входа

Приветствую Вас Гость!

Логин:
Пароль:

Наш опрос

С каким напитком предпочитаете встречать праздники?
Всего ответов: 20


    Случайное фото

    Статистика


Поддержите наш проект

WebMoney:
R309699065243
U292079291240
Z373355457648

Счётчики


Rambler's Top100
Рейтинг@Mail.ru

Ассемблер в Delphi - Игростроение и развлечение

[ Новые сообщения · Участники · Правила форума · RSS ]

WWW Site Forum
Страница 1 из 11
Игростроение и развлечение » Программинг » Языки программирования и конструкторы » Ассемблер в Delphi (Основные моменты программирования на Ассемблер в Делфи)
Ассемблер в Delphi
KostiaДата: Пятница, 14.12.2007, 15:29 | Сообщение # 1
Программист
Группа: Проверенные
Сообщений: 80
Репутация: 2
Статус: Offline
Всем доброго времени суток! Я постараюсь показать, как это просто писать программу на Ассемблере.

Добавлено (14.12.2007, 13:59)
---------------------------------------------
Для начала разберёмся, а где вообще писать ассемблеровский код. А писать его надо между двумя ключевыми словами

Code
begin
   Asm
   ...
   end;
end;

Если в процедуре или в функции присутвствует только ассемблеровский код, то можно обойтись и без begin
Code
Procedure Assembler;
asm
...
end;

Добавлено (14.12.2007, 14:10)
---------------------------------------------
Теперь, я расскажу немного о регистрах процессора. Регистры - это кусочки памяти где можно хранить информацию в двоичном коде. Сейчас я покажу самые основные:
8 - бит – al,bl,cl,dl.
16-бит – ax,bx,cx,dx.
32-бит – eax,ebx,ecx,edx.

Добавлено (14.12.2007, 14:43)
---------------------------------------------
Регистры это хорошо, но какой от них толк, если незнаешь как присвоить им значение.
Для присваивания используется команда mov, например нам нужно присвоить значение переменной i:integer регистру eax:

Code
asm
   mov eax,i
end;

Почему был выбран регистр eax, все просто, Delphi это среда для разработки 32 битных прилажений.
Также мы можем присвоить переменной регистр:
Code
asm
   mov i,eax
end;

Добавлено (14.12.2007, 15:09)
---------------------------------------------
Первая програмка на Ассемблере.
Напишим функцию которая складывает два числа a и b.

Code
function summ(a,b:integer): integer;
asm
   add a,b
end;

add - это команда которая складывает два значения a и b и записывает результат в первую переменную a.
Можно было сначало занести значения параметров в регистры и сложить их.
Code
function summ(a,b:integer): integer;
asm
   mov eax,a
   mov ebx,b
   add eax,ebx
   mov result,eax
end;

Как складывать и отнимать
add eax,ebx {к eax прибавили ebx и результат записался в eax}
sub eax,ebx {от eax отняли ebx и результат записался в eax }

Как умножить и поделить
mul eax,ebx {умножение без учета знака}
imul eax,ebx {умножение с учетом знака}
div eax,ebx {деление без учета знака}
idiv eax,ebx {деление с учетом знака}

Добавлено (14.12.2007, 15:22)
---------------------------------------------
Как сделать цикл
Loop имя метки метка
Jmp имя метки метка

Пример цикла loop

Code
Asm
Mov ax,0 //обнулили cx
Mov cx,10 // в asm ecx,cx,cl – являются щетчиками
   @QQ: // метка с именем QQ, вместо QQ можно задать любое другое имя
     add ax,cx // увеличили ax
     dec cx // уменьшали cx на 1
   loop @QQ // вновь запустили цикл
End;

Пример jmp
Code
Asm
   Mov ax,0
   Mov cx,10
   @QQ:
     add ax,cx
     dec cx
     cmp cx,0 // если cx = 0
     je @QW // то переход на метку QW
   jmp @QQ //перешли на метку QQ
   @QW:
End;

Добавлено (14.12.2007, 15:29)
---------------------------------------------
Сдвиги
rcl- сдвиг влево
rcr- сдвиг вправо

mov ax,100
rcl ax,1 // после сдвига ax на 1 влево ax стал равен 200, на 2 ax=400, на 3 ax=800
rcr ax,1 // ax=50, на 2 ax=25, на 3 ax=12

максимум можно сдвинуть на 31 бит

Сообщение отредактировал Kostia - Пятница, 14.12.2007, 15:26
 
IvinДата: Суббота, 16.02.2008, 16:26 | Сообщение # 2
Программист Delphi
Группа: Проверенные
Сообщений: 125
Репутация: 6
Статус: Offline
Хорошо написано.
Но насчет умножения и деления у меня немного другая информация.
Насколько я помню:
mov eax,a
mul b
Т.е. у команды mul только 1 параметр, 2ой множитель. Результат умножения записывается в eax. Деление аналогично.


Все мои рассказы - http://ivin.3dn.ru/
Мои статьи - http://www.textsale.ru/u102051team102051.html
 
quadrathellДата: Вторник, 22.07.2008, 18:07 | Сообщение # 3
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Kostia, Честно говоря ассемблер пытался изучать ещё Спектрумовский и были даже успехи, сдвиг пикселя(спрайта) по экрану, бегущая строка и прочее, вот из твоих примеров вижу что есть какая-то схожесть…
И Дельфи тоже вижу серьёзная штука, после бейсика трудненько будет переучиться, но зато есть желание… Спасибо тебе что помогаешь. cool


 
IsUaДата: Суббота, 06.09.2008, 20:45 | Сообщение # 4
Группа: Гости





Іея не погана, в плані того, що працюєш колективом, але потрібно почати з основ, якимось яскравим прикладом. Власне сам 2 дні просидів, поки дотямив процедуру пошуку рядка на asm, дякуючи великому бажанню пізнати суть. Тепер розумію, що пропалював свою сітківку не дарма, бо стандартна ф-ція пошуку повністю перебудована і доповнена. Коли хочеш, можна було б ввести розділ і т .д., де аналізуватимуться сирці( исходники ) - загалом, за баранкою не я... smile
 
KostiaДата: Суббота, 30.01.2010, 21:53 | Сообщение # 5
Программист
Группа: Проверенные
Сообщений: 80
Репутация: 2
Статус: Offline
на самом деле ассемблер достаточно простой язык программирования.
Мне интересен один вопрос, когда мы пишем
Code
var
   r: real; i: integer;
begin
   r:=i;
end;

то delphi/pascal этот код заменяет приблизительно на
Code
fild i
fstp r

почему он матерится на i:=r, ну написал бы warning что мол потеря данных может произойти, так нет будет материться, пока i:=round®; не напишешь.
Я бы делал так:
Code
fld r
fistp i

и всё, чего париться, темболее этот код быстрее, чем i:=round®, т.к. требуется вызов функции и все связанные с этим последствия.
ЗЫ: так мысли вслух =)
 
Игростроение и развлечение » Программинг » Языки программирования и конструкторы » Ассемблер в Delphi (Основные моменты программирования на Ассемблер в Делфи)
Страница 1 из 11
Поиск: