Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию (от Ассемблера до Делфи)


Информационный Канал Subscribe.Ru


Низкоуровневый язык программирования Ассемблер
урок 3
Регистры. Инструкция по применению.

Сегодня мы откроем для себя крутое такое понятие - "регистр". Я конечно же понимаю, что изучать одну лишь теорию очень скучное занятие. Хотелось бы конечно больше практики, но на данном этапе желательно понять самые пресамые основные моменты, которые необходимы для понимания практических примеров. А уже потом изучать теорию только по мере крайней необходимости, то есть в случаях когда для достижения какой-либо цели без нее не обойтись.

Вообще регистры очень похожи на переменные в памяти - они бывают разных разрядов, с ними можно производить операции сложения, вычитания, умножения и деления. Но в отличие от переменных расположенных в оперативной памяти процессор с регистрами работает гораздо быстрее, и как следствие программер на Ассемблере обычно использует регистры на полную катушку. И посему нам просто жизненно необходимо понять, что это такое и как этим пользоваться.

Как и типы данных регистры бывают разные: 8-ми разрядные, 16-ти разрядные и 32-х разрядные. Начнем с самых маленьких - 8-ми разрядных. К ним относятся регистры: ah, al, bh, bl, ch, cl, dh, dl. Таким образом в этих регистрах вы можете хранить данные размером в 1 байт. Теперь посмотрим каким образом это можно осуществить. А сделать это можно с помощью команды процессора mov. Взглянем на примеры:


mov ah, 8
mov ch, 255
mov dl, 0
mov ah, dl
mov ch, ah

Как видно из примеров, на первом месте стоит название регистра, в который вы хотите чего-нибудь записать, а на втором месте стоит либо регистр (8-ми разрядный), из которого берется значение, либо это может быть число, причем в данном случае от 0 до 255 (8-ми разрядность).

Запомните!! Мы рассматриваем регистры, которые могут оперировать только с целыми числами!! Числа с плавающей точкой с ними работать не будут!!

Далее заценим старших собратьев 8-ми разрядных регистров - 16-ти разрядных. Их тоже несколько и называются они: ax, bx, cx и dx. В них также можно записывать всякие разные вещицы:


mov ax, 2000
mov cx, ax
mov dx, 8000
mov ax, dx

Все аналогично 8-ми разрядным регистрам - на первом месте стоит название регистра, в который заносится значение, на втором месте либо 16-ти разрядный регистр, из которого берется значение, либо какое-нибудь число от 0 до 65535.

Теперь взгянем одним глазком на 32-ух разрядные регистры:


mov eax, 201000
mov ecx, eax
mov edx, 128000
mov eax, edx

А, все тоже самое, что и у младших сестренок: на первом месте - имя регистра, в который заносится инфа, а на втором - либо 32-ух разрядный регистр, из которого берется значение, либо число от 0 до 4294967295.

Oops! Я забыл упомянуть о том, что в регистры можно записывать и переменные оперативной памяти. То есть если у нас есть переменная "zzz dw 12345", то ее значение можно записать в один из 16-ти разрядных регистров:
mov ax, zzz
mov bx, zzz
mov cx, zzz
mov dx, zzz

Аналогично и для других разрядов...

Я наглым образом опустил описание еще целого ряда регистров, но зделал я это в гуманных целях. Я говорю только о том, что может сразу же понадобиться в ближайшем будущем, а не обо всем сразу, дабы не забивать ваши головы информацией, которая из-за отсутствия применения все равно очень быстро забудется. Так что такие вот пирожки. И как обычно если у вас появились вопросы по теме - пишите мне по адресу: evolverstation@narod.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное