Что предпочитаете?

воскресенье, 13 февраля 2011 г.

Внутренние регистры

Так как мы занимаемся программированием микропроцессора, то логичнее всего начать эту тему с обсуждения внутренних регистров микропроцессора, доступных для использования. На рисунке показаны три группы регистров данных, и адресов, 16-битовый указатель команд IP  и 16-битовый регистр флагов.
  • Регистры данных
      В зависимости от того, чем Вы оперируете: 16-битовыми словами или 8-битовыми байтами, регистры данных можно рассматривать как четыре 16-битовых или восемь 8-битовых регистров. В первом случае регистры имеют имена АХ, ВХ, СХ, DX. Эти регистры образованы из 8-битовых регистров AL, АН, BL, ВН, CL, СН, DL и DH. Здесь L и Н означают младшие (low) и старшие (high) байты 16-битовых регистров. Например, регистры AL и АН образуют соответственно младший и старший байты регистра АХ.
Очень удивлён тем, что по моим ссылкам кто-то пришёл и даже отписался. Ну тогда мои усилия не напрасны и стоит попробовать продолжить этот блог. Постараюсь для вас, дорогие читатели.

суббота, 12 февраля 2011 г.

Сегменты и смещения

У большинства микропроцессоров адрес ячейки памяти представляет собой одно число. А у микропроцессора 8088 адрес каждой ячейки памяти задается двумя числами: номером блока и смещением. Такой странный метод адресации обусловлен тем, что команды программы для микропроцессора 8088 и ее данные должны располагаться в разных частях памяти, другими словами, в разных сегментах. Если, например, Вам требуется адресоваться к ячейке с данными, то микропроцессору 8088 понадобится адрес блока памяти, с которого начинается сегмент данных (из регистра сегмента данных), и позиция желаемой ячейки в этом сегменте (ее смещение). Вспомните, как ищут в городе чей-нибудь дом: сначала находят улицу (считайте ее сегментом), а затем дом с нужным номером (смещением) на этой улице. К счастью Вам достаточно задавать только смещение, а номер блока микропроцессор  выберет сам.

Адресация

Ну пока-что заходят только мои знакомые лица, но надеюсь на лучшее.

Так как у микропроцессора 8088 указатель команд и адресные регистры имеют по 1 Кбитов, то можно подумать, что он способен адресоваться к памяти объемом не более 64 Кбайт (65 536 байт), т. е. имеет стандартный для 8-битовых микропроцессоров диапазон адресов. Однако на самом деле микропроцессор 8088 всегда генерирует 20-битовые адреса. Он делает это за счет добавления 16-битового смещения к содержимому регистра сегмента, умноженному на 16. Таким образом:

физический адрес = смещение + 16 • (регистр сегмента)

В действительности, микропроцессор  вместо умножения на 16 использует содержимое регистр сегмента так, как если бы оно имело четыре дополнительных нулевых бита

Добавление нулей аналогично умножению, поскольку при каждом сдвиге на одну позицию влево двоичное число удваивается. Следовательно, перемещение значения регистра сегмента на четыре позиции влево умножает его на16:2*2*2*2=16.

пятница, 11 февраля 2011 г.

Указатели команд

Большинство микропроцессоров выполняют программу следующим образом: извлекают из памяти очередную команду, исполняют ее, затем извлекают следующую команду и т. д. Этот подход, естественно, приводит к простоям, так как микропроцессор должен перед исполнением команды подождать ее извлечения из памяти.
Одна из них, интерфейс шины (Bus Interface Unit), извлекает команды из памяти и осуществляет передачу данных между исполнительными компонентами и "внешним миром". Другая компонента, операционный блок (Execution Unit), только исполняет команды. Так как эти компоненты независимы, то интерфейс шины может извлекать новую команду из памяти в то самое время, когда операционный блок исполняет ранее извлеченную команду.

Ну чтож, начнём.

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

Итак, начнём со старого-старого tasm'a.