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

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 826
от 14.08.2007, 12:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 390, Экспертов: 24
В номере:Вопросов: 2, Ответов: 2


Вопрос № 97744: Здравствуйте! Начал изучать книгу "Ассемблер это просто!" и сразу появились неясности. Объясните пожалуйста, во второй главе этой книги говорится что микропроцессоры имеют 14 регистров, и мне не понятно это их общее количество...
Вопрос № 97749: Здравствуйте! Начал изучать книгу "Ассемблер это просто!" и сразу появились неясности. Объясните пожалуйста, во второй главе этой книги говорится что микропроцессоры имеют 14 регистров, и мне не понятно это их общее количество...

Вопрос № 97.744
Здравствуйте!
Начал изучать книгу "Ассемблер это просто!" и сразу появились неясности.
Объясните пожалуйста, во второй главе этой книги говорится что
микропроцессоры имеют 14 регистров, и мне не понятно это их общее количество или речь идет только о 14 типах, по их назначению, регистрах. Вобщем-то читая дальше я понял что сегментных регистров в процессоре,физически, много, так-как было сказано что программы типа ".COM" загружается впервые свободные регистры. А как же с другими регистрами, например с регистрами данных, например "ah или al", или регистрами-указателями, ведь если их тоже, физически, много как процессор определяет с какими именно надо работать, ведь в отличии от сегментных, регистры данных или указатели не имеют точного
адреса в программе, это видно в отладчике.
Зарание спасибо.
Отправлен: 08.08.2007, 17:24
Вопрос задал: Ташканов Иван Герардович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Sergijj
Здравствуйте, Ташканов Иван Герардович!

Ну во-первых не все микропроцессоры, а только i80x86 и совместимые с ними.
А во-вторых, Вы немного неправильно поняли смысл регистра.
Регистр - это НЕ поименованная область памяти компьютера, а собственная, минимально-уровневая из доступных программно, память собственно процессора.
Память компьютера (к которой обращаются программы и загружаются они туда же) - это ОЗУ (Оперативное Запоминающее Устройство) - отдельная от процессора микросхемка.
А память собственно процессора (её программы используют как инструментарий) - это регистры.

Так вот, регистры (будем для простоты придерживаться рассматриваемого Вами уровня) сами по себе 16-битные = словные = 2-байтовые (т.к. в 1 байт = 8 бит).
Из них:
CS, SS, DS, ES - сегментные, т.е. могут содержать только (во всяком случае подразумевается, что использоваться будут они именно так) адрес сегмента кода (CS) или данных (SS, DS, ES) (сегмент - начало куска памяти, куда идёт обращение).
IP, SP, SI, DI - парные им индексные (или "указательные") регистры, т.е. содержат уже не абсолютный адрес сегмента памяти, а относительный адрес _кода_ или _данных_ (а не сегмента _памяти_) - размер смещения необходимых _кода_ или _данных_ в памяти, относительно начала _сегмента_памяти_.
AX (а с ним и 8-битные AH, AL), BX (а с ним и 8-битные BH, BL), CX (а с ним и 8-битные CH, CL), DX (а с ним и 8-битные DH, DL), BP и регистр флагов (FLAGS) - это регистры - "рабочие лошадки".

Т.е., как видите, 16-битных регистров _всего_ 14...;)

Кроме того, из первых двух групп регистров (сегментные и индексные ("указательные")) видна архитектура памяти процессоров i80x86: вся память разбита на сегменты (сегмент = 64 килобайта = 65536 байт - именно столько значений может "поместиться" в 16 битах информации)
и адрес конкретных данных в памяти представляет собой т.н. "сегментную пару" - адрес (номер) сегмента и смещение относительно начала этого сегмента.
Записывается это так:

"Сегментный регистр":"регистр смещения (индексный)", например: ES:DI

или так (не в виде имён регистров, а в виде значений, находящихся "внутри" этих регистров):

"адрес сегмента (в шестнадцатиричной системе счисления)":"размер смещения (в шестнадцатиричной системе счисления)", например: 0A000:0000

Безусловно, что у каждого регистра есть своя функция:
пара CS:IP (CodeSegment:IndexPointer) отвечает за хранение указателя (сегмент + смещение) на то место в памяти, где происходит выполнение программы (не данные, а код);
пара SS:SP (StackSegment:StackPointer) отвечает за хранение указателя на текущую вершину стека выполняемой программы;
пары DS:SI (DataSegment:SourceIndex) и ES:DI (Extended_dataSegment:DestinationIndex) отвечают за хранение указателей на текущие пользовательские (программные) данные.

BX - (Base_registr) рекомендуется для хранения базы (например адреса сегмента);
CX - (Counter_registr) рекомендуется для использования в качестве счётчика;
DX - (Data_registr) нет рекомендаций - свободные данные;
AX - (Auxiliary_registr) дополнительный регистр, который собственно и является главной рабочей лошадкой, не рекомендуется для длительного хранения данных;
BP - (BasePointer) дополнительный базовый указатель;
FLAGS - регистр флагов (битового (маскированного) представления результатов операций).

Вот собственно и всё. Более детальную информацию можно посмотреть в справочной литературе.
Если что осталось неясным, пишите. Постараюсь ответить.

Успехов!
---------
Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 10-ый класс)
Ответ отправлен: 09.08.2007, 10:23
Оценка за ответ: 4


Вопрос № 97.749
Здравствуйте!
Начал изучать книгу "Ассемблер это просто!" и сразу появились неясности.
Объясните пожалуйста, во второй главе этой книги говорится что
микропроцессоры имеют 14 регистров, и мне не понятно это их общее количество
или речь идет только о 14 типах, по их назначению, регистрах. Вобщем-то читая дальше я понял что сегментных регистров в процессоре,физически, много, так-как было сказано что программы типа ".COM" загружается впервые свободные регистры. А как же с другими регистрами, например с регистрами данных, например "ah или al", или регистрами-указателями, ведь если их тоже, физически, много как процессор определяет с какими именно надо работать, ведь
в отличии от сегментных, регистры данных или указатели не имеют точного адреса в программе, это видно в отладчике.
Зарание спасибо.
Отправлен: 08.08.2007, 17:59
Вопрос задал: Ташканов Иван Герардович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Калашников О.А.
Здравствуйте, Ташканов Иван Герардович!
Вы спутали регистры и ячейки памяти. Регистры могут быть 8-ми разрядные (AH, AL), 16-ти разрядные (AX) и 32-х разрядные (EAX). Соответственно в таблице это можно отразить так:
EAX
AX
AH | AL
При этом, регистры AH и AL являются старшей и младшей частью регистра AX, а регистр AX является младшей частью регистра EAX.
Если говорить упрощённо, то регистр - это просто переменная. Например, как в Бейсике: $a = 10.
Что в Ассемблере будет выглядеть как
mov al,10
При этом AX и EAX будут тоже автоматически содержать число 10.
По поводу сегментных и остальных регистров. Их не много, а определённое количество. Посмотреть список всех 16-разрядных регистров можно в отладчике afd. В оталдчике CodeView или SoftICE можно увидеть все 8-и, 16-и и 32-х разрядные регистры.
Ответ отправил: Калашников О.А. (статус: *Администратор)
Россия, Москва
----
Ответ отправлен: 09.08.2007, 10:02
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.54 beta от 01.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное