Знакомьтесь ассемблер часть 2

знакомьтесь ассемблер часть 2

Глава: Часть I. Предмет: Операционные системы и системное Часть I. " Знакомьтесь: Ассемблер". (Редакция от 06 декабря 2 Ответы на некоторые вопросы 3 ЧАСТЬ I. ЗНАКОМЬТЕСЬ: АССЕМБЛЕР.. . 7 Глава 1. Первая программа Шестнадцатеричная система счисления. Часть I. ЗНАКОМЬТЕСЬ: АССЕМБЛЕР (7). Глава 1. Первая программа (9). Глава 2. Регистры процессора (18). Глава 3. Сегментация памяти в реальном .

Типичные ошибки при ассемблировании программы Приложение 3. Таблицы и коды символов П3. Скан-коды клавиатуры Приложение 4.

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

В этой книге автор старался излагать материал так, чтобы он был понятен любому пользователю: Основой для книги послужили материалы разработанной автором рассылки "Ассемблер?

Используя данную рассылку, более подписчиков научились писать такие программы на ассемблере, которые казались им раньше чрезвычайно сложными и недоступными для понимания или написания. Большая часть подписчиков пыталась раньше изучать язык ассемблера, но так и не смогла пройти полный курс прочитать ту или иную книгу до конца.

Материал рассылки помог им понять ассемблер и научил писать довольнотаки сложные программы под операционными системами MS-DOS и Windows. Во втором издании автор учел и исправил все недоработки и ошибки, допущенные в первом.

Более того, автор попытался сделать обучение как можно более интересным для вас, перейдя с первой же главы к практической части. Это поможет вам изучить базовые основы ассемблера за короткое время. Автор не претендует на то, что материал, изложенный в данной книге, поможет вам освоить ассемблер во всех его проявлениях и покажет все возможности языка.

Ассемблер настолько многогранен, что просто невозможно подробно описать все его операторы, команды, алгоритмы, области применения в одной книге. Тем не менее, прочитав уже несколько глав, вы сможете научиться писать собственные программы, разбирать чужие, а также поймете, как в целом работает компьютер.

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

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

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

знакомьтесь ассемблер часть 2

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

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

Но понять принцип работы WinAPI в разы проще на примерах прерываний, которые до сих пор поддерживаются Windows. Как только вы поймете данный принцип, вы без труда перейдете на использование WinAPI. Под управлением каких операционных систем будут работать файлыприложения?

Компания Microsoft придерживается политики поддержки работоспособности программ, написанных в более ранних версиях собственных операционных систем. Тем не менее, большинство программ прекрасно запускается напрямую из Проводника Windows Explorerне требуя перезагрузки системы.

Например, Norton Commander, Far Manager, а также необходимые для изучения настоящего курса средства разработки и отладки, перечисленные далее. Все примеры протестированы на работоспособность под управлением следующих операционных систем компании Microsoft на IBM-совместимых компьютерах: На ассемблере мы будем напрямую взаимодействовать с аппаратурой, что не очень приветствуется Windows. Поэтому некоторые программы из учебного курса могут работать некорректно.

Что делать в таких случаях? Какое программное обеспечение нужно для того, чтобы создать программу на ассемблере, и где его можно достать? Прежде всего, это текстовый редактор, как отдельный, например, Akelpad, так и встроенный в какую-нибудь оболочку например, Far Manager. В принципе, сгодится даже обычный Блокнот. Думаем, что не следует заострять внимание на том, как пользоваться данными программами, тем более, что это выходит за рамки настоящей книги. Потребуется ассемблер программа, которая переводит ассемблерные инструкции в машинный код.

Это может быть MASM. Скачать все это можно бесплатно на сайте автора книги В принципе, большой разницы для наших примеров это пока не имеет, за исключением передачи параметров в командной строке при ассемблировании. Мы будем использовать MASM 6.

Если в процессе ассемблирования возникают ошибки, то обращайтесь к приложению 2 или к нашим экспертам на Настоятельно рекомендую иметь отладчик AFD, SoftIce, CodeView. Он необходим для отладки программы и в целом для демонстрации ее работы. В будущем вам, безусловно, понадобится дизассемблер, который необходим для перевода машинного кода на язык ассемблера. Автор предпочитает IDA, как один из самых мощных и удобных в пользовании. Можно также скачать минимальный, но достаточный для изучения настоящего курса набор программного обеспечения по адресу: Как построены главы книги?

Ответы на часто задаваемые вопросы. Если в процессе ассемблирования возникают ошибки, то обращайтесь к приложению 2 или к нашим экспертам на Настоятельно рекомендую иметь отладчик AFD, SoftIce, CodeView. Он необходим для отладки программы и в целом для демонстрации ее работы. В будущем вам, безусловно, понадобится дизассемблер, который необходим для перевода машинного кода на язык ассемблера.

Автор предпочитает IDA, как один из самых мощных и удобных в пользовании. Можно также скачать минимальный, но достаточный для изучения настоящего курса набор программного обеспечения по адресу: Как построены главы книги?

Ответы на часто задаваемые вопросы. Заметки, дополнительные примеры и алгоритмы. Объяснение новой темы теория. Примеры программ на ассемблере практика. Вы сможете самостоятельно написать простую программу уже после прочтения главы 1.

знакомьтесь ассемблер часть 2

Надеюсь, что изучать язык будет интересней, если мы сразу перейдем к практической части, обсуждая параллельно теорию. Попутно отмечу, что данная книга рассчитана, в первую очередь, на людей, которые ни разу не писали про- 13 Предисловие 5 граммы ни на ассемблере, ни на каком другом языке программирования. Конечно, если вы уже знакомы с Basic, Pascal, C или каким-либо иным языком, то это только на пользу. Тем не менее, все новые термины будут подробно объясняться.

Также следует отметить, что для полного изучения курса необходимы минимальные пользовательские знания операционной системы MS-DOS. Однако вы также можете работать в специальных файловых оболочках типа Far Manager, Windows Commander, Total Commander и. Какие темы будут рассмотрены в книге? Двоичная и шестнадцатеричная системы счисления. Основные команды процессоров Intel,и разрядные регистры.

Основы работы с сопроцессором. Сегментация памяти в реальном режиме. Прямая работа с видеоадаптером. Управление клавиатурой на уровне прерываний. Работа с дисками, каталогами и файлами.

Не обойдем стороной и технический английский язык. Кому можно задать вопросы, касаемые материала из данной книги? На все ваши вопросы по ассемблеру, а также по многим другим темам, ответят наши эксперты на портале профессионалов Стоит отметить, что на упомянутом портале вы сможете: Зарегистрируйтесь прямо сейчас на портале и вступайте в наш клуб профессионалов!

В главе 1 мы рассмотрим шестнадцатеричную систему счисления и пример простейшей программы на ассемблере, традиционно называемой "Hello, world! Шестнадцатеричная система счисления Для написания программ на ассемблере необходимо разобраться с шестнадцатеричной системой счисления. Ничего сложного в ней. Мы используем в жизни десятичную систему.

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

В этой системе мы используем цифры от 0 до 9. В шестнадцатеричной системе мы используем, соответственно, шестнадцать "цифр". Слово "цифр" специально написано в кавычках. От 0 до 9 мы считаем так же, как и в десятичной, а вот дальше таким образом: Число F, как не трудно посчитать, будет равно 15 в десятичной системе табл.

Вы смогли отличить в примере 1. А из этого ряда: Это могут быть как шестнадцатеричные числа, так и десятичные. Для того чтобы не было путаницы, а компьютер и программист смогли бы однозначно отличить одни числа от других, в ассемблере принято после шестнадцатеричного числа ставить символ h или H от англ. После десятичного числа, как правило, ничего не ставят.

Так как числа от 0 до 9 в обеих системах имеют одинаковые значения, то числа, записанные как 5 и 5h, одно и то. Таким образом, корректная запись чисел из примера 1 будет следующей примеры 1. Первая программа 11 Пример 1. А в данный момент для нашего примера программы, который будет рассмотрен далее, нам необходимо знать о существовании шестнадцатеричных чисел. Итак, настала пора подвести промежуточный итог. Если к какому-нибудь числу в шестнадцатеричной системе добавить справа ноль, то это число увеличится в 16.

Очень важно уяснить принцип шестнадцатеричной системы счисления. Теперь немного о том, как будут строиться примеры на ассемблере в данной книге. Не совсем удобно приводить их сплошным текстом, поэтому сперва будет идти сам код программы с пронумерованными строками, а сразу же после него объяснения и примечания.

Примерно так, как показано в листинге 1. Пример записи ассемблерных инструкций, применяемой в книге 01 mov ah,9 02 mov al,8 15 mov dl,5ah Обратите внимание, что номера строк ставятся только в книге, и при наборе программ в текстовом редакторе эти номера ставить НЕ нужно! Номера строк ставятся для того, чтобы удобно было давать объяснения к каждой строке: Несмотря на то, что на компакт-диске, прилагаемом к книге, имеются набранные и готовые для ассемблирования программы, мы рекомендуем все-таки первое время набирать их самостоятельно.

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

Прежде чем пытаться ассемблировать, прочтите данную главу до конца! Для того чтобы объяснить все операторы из листинга 1. Поэтому описание некоторых команд мы на данном этапе опустим. Просто считайте, что так должно. В ближайшее время мы рассмотрим эти операторы подробно.

Итак, строки с номерами 0102 и 13 вы игнорируете.

Урок 5. Пишем Авто Ассемблер [часть 2 из 4]

Строки 030509 и 11 остаются пустыми. Это делается для наглядности и удобства программиста при просмотре и анализе кода. Программа-ассемблер пустые строки опускает.

Олег Калашников. Санкт-Петербург - PDF

Теперь перейдем к рассмотрению остальных операторов. Со строки 04 начинается код программы. Это метка, указывающая ассемблеру на начало кода. В строке 14 стоят операторы end Begin Begin начало; end конец. Вообще вместо слова Begin можно было бы использовать любое 19 Глава 1. Первая программа 13 другое. В таком случае, нам пришлось бы и завершать программу оператором End Start Строки 06 08 выводят на экран сообщение "Hello, world!

Здесь придется вкратце рассказать о регистрах процессора более подробно эту тему мы рассмотрим в последующих главах. Регистр процессора это специально отведенная память для хранения какогонибудь числа. Например, если мы хотим сложить два числа, то в математике запишем так: Для присвоения регистру какого-нибудь значения в ассемблере существует оператор mov от англ. Строку 06 следует читать так: Далее рассмотрим, зачем это необходимо.

В строке 07 загружаем в регистр dx адрес сообщения для вывода в данном примере это будет строка "Hello, world! Прерывания будут подробно рассматриваться в последующих главах, мы же пока коснемся только самых элементарных вещей Введение в прерывания Прерывание MS-DOS это своего рода подпрограмма часть MS-DOSкоторая находится постоянно в памяти и может вызываться в любое время из любой программы.

Рассмотрим вышесказанное на примере листинг 1. Сразу стоит отметить, что в ассемблере после точки с запятой располагаются комментарии. Результат математического действия сохраняется в переменной С. Когда вызывается подпрограмма, компьютер запоминает, с какого места она была вызвана, и после того, как процедура отработала, возвращается в то место, откуда она вызывалась. Таким образом, можно вызывать подпрограммы неопределенное количество раз с любого участка основной программы.

При выполнении строки 08 см. Для этого мы, собственно, и помещаем нужные значения в регистры. Всю работу вывод строки, перемещение курсора берет на себя эта процедура. Строку 08 следует читать так: Обратите внимание, что после числа 21 стоит буква h. Это, как мы уже знаем, шестнадцатеричное число 33 в десятичной системе. Конечно, нам ничего не мешает заменить строку int 21h строкой int Программа будет работать корректно.

Но в ассемблере принято указывать номера прерываний в шестнадцатеричной системе, да и все отладчики работают с этой системой. В строке 10 мы, как вы уже догадались, вызываем прерывание 20h. Для его вызова не нужно указывать какие-либо значения в регистрах. Оно выполняет только одну задачу выход из программы выход в DOS. В результате выполнения прерывания 20h программа вернется туда, откуда ее запускали загружали, вызывали. Это что-то вроде оператора exit в некоторых языках высокого уровня.

Строка 12 содержит сообщение для вывода. Первое слово message сообщение название этого сообщения. Оно может быть любым например, mess или string и пр. Обратите внимание на строку 07в которой мы загружаем в регистр dx адрес этого сообщения.

Программы из Примера № 3 в отладчике CodeView

Первая программа 15 Можно создать еще одну строку, которую назовем Mess2. Затем, начиная со строки 09вставим в нашу программу следующие команды: Он указывает на конец выводимой строки. На экране, помимо нашей строки, мы увидим "мусор" разные символы, которых в строке вовсе.

Как это сделать написано в приложении 1. Это поможет вам лучше понять структуру и принцип работы ассемблера, а также продемонстрирует реальную работу написанной нами программы.

Рис Ассемблирование и результат выполнения программы Prog Пока не обращайте особого внимания на различие между реальным кодом, набранным руками, и тем, как эта программа отображается в отладчике.

Подробно работу отладчика мы рассмотрим в последующих главах Резюме Целью данной главы не было разобраться подробно с каждым оператором. Это невозможно, если вы не обладаете базовыми знаниями.

Но, прочитав 3 4 главы, вы поймете принцип и структуру программы на ассемблере. Может быть, ассемблер вам показался чрезвычайно сложным, но это, поверьте, только с первого взгляда. Вы должны научиться строить алгоритм программы на ассемблере в голове, а для этого нужно будет самостоятельно написать несколько программ, опираясь на информацию из данной книги.

Будем постепенно учиться мыслить структурой ассемблера, составлять алгоритмы, программы, используя операторы языка. После изучения очередной главы вы будете чувствовать, что постепенно начинаете осваивать ассемблер, будет становиться все проще и проще. Вы строите определенный алгоритм программы из этих операторов, который в какой-то степени применим только к Бейсику.

То же самое и с ассемблером. При постановке задачи написать ту или иную программу вы мысленно создаете алгоритм, который применим к ассемблеру и только.

Наша задача научить вас создавать в уме алгоритмы, применимые к ассемблеру. Введение в регистры микропроцессоров Регистр, как мы уже говорили ранее, это специально отведенная память для временного хранения каких-то данных. Микропроцессоры имеют 14 регистров. В главе 1 мы познакомились с двумя из них: В них можно хранить любые данные: В верхнем ряду табл.

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

Это так называемые половинки старшая или младшая разрядных регистров. Чтобы присвоить, к примеру, регистру al число 35h, нам необходимо записать так: Например, следующие записи будут ошибочны: Это необходимо для того, чтобы программа-ассемблер могла отличить, где шестнадцатеричное число, а где название переменной или метки.

знакомьтесь ассемблер часть 2

Далее мы рассмотрим это на примере. Допустим, процессор выполняет команду mov ax,h. В этом случае в регистр ah загружается число 12h, а в регистр al 34h. То есть ah, al, bh, bl, ch, cl, dh и dl это младшие Low или старшие High половинки разрядных регистров табл. Регистры bp и sp задействуются при работе со стеком табл. Мы подробно их рассмотрим на примерах в следующих главах. Регистры-указатели Индекс источника Индекс приемника Регистры для работы со стеком Сегментные регистры Сегментные регистры табл.

Сегментация памяти довольно сложная и объемная тема, которую также будем рассматривать в следующих главах. Регистры процессора Команды сложения и вычитания Для выполнения арифметических операций сложения и вычитания в ассемблере существуют следующие операторы: В столбце Команда будет описана новая команда и ее применение. В столбце Назначение что выполняет или для чего служит данная команда, а в столбце Процессор модель тип процессора, начиная с которой команда поддерживается.

В столбце Перевод будет указано, от какого английского слова образовано название оператора, и дан перевод этого слова. Оператор add Команда Перевод Назначение Процессор add приемник, источник Addition сложение Сложение В данном примере оператор поддерживается процессоромно работать команда будет, естественно, и на более современных процессорах,Pentium и.

Команда add производит сложение двух чисел листинг 2. Можно посчитать, сколько раз за одну секунду процессор сможет сложить два любых числа от 0 до Каждая команда процессора выполняется определенное количество тактов. Когда говорят, что тактовая частота процессора МГц, то это значит, что за секунду проходит миллионов тактов. Чтобы компьютер сложил два числа, ему нужно выполнить следующие команды: Оператор inc Формат оператора inc представлен в табл Таблица 2.

Оператор inc Команда Перевод Назначение Процессор inc приемник Increment инкремент Увеличение на единицу Команда inc увеличивает на единицу содержимое приемника регистра или ячейки памяти. Регистры процессора 21 Листинг 2. Оператор dec Команда Перевод Назначение Процессор dec приемник Decrement декремент Уменьшение на единицу Команда dec уменьшает на единицу содержимое приемника листинг 2. Программа для практики Рассмотрим одну небольшую программу, которая выводит на экран сообщение и ждет, когда пользователь нажмет любую клавишу.

После чего возвращается в DOS. Работать с клавиатурой позволяет прерывание BIOS ПЗУ 16h, которое можно вызывать даже до загрузки операционной системы, в то время как прерывания 20h, 21h и пр.

Чтобы заставить программу ждать нажатия пользователем любой клавиши, следует вызвать функцию 10h прерывания 16h. Вот как это выглядит на практике: В строках 05 07как вы уже знаете, производится вывод строки на экран.

Программы из Примера № 3 в отладчике CodeView

Затем строки 0910 программа ждет нажатия клавиши. И наконец, строка 12 завершает работу нашей программы. Мы уже изучили операторы inc, dec, add и sub.

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

Мы также рассмотрим операторы ассемблера, которые не затрагивали в примерах из предыдущих глав. Сразу отмечу, что это одна из самых сложных глав данной книги. Автор попытался объяснить все как можно проще, избегая сложных определений и терминов. Если что-то не поняли не пугайтесь!

Со временем все станет на свои места. Если вы полностью разберетесь с материалом данной главы, то считайте, что базу ассемблера вы изучили. Начиная с главы 4, будем изучать язык намного интенсивней. Для того чтобы лучше понять сегментацию памяти, нам нужно воспользоваться отладчиком. Лучше использовать в работе два отладчика: Допустим, вы написали программу на ассемблере и назвали ее prog Сассемблировав, вы получили файл prog Бит и байт Рассмотрим, как в памяти компьютера хранятся данные.

Вообще, как компьютер может хранить, например, слово "диск"? Главный принцип намагничивание и размагничивание одной дорожки назовем это. Одна микросхема памяти это, грубо говоря, огромное количество дорожек примерно как на магнитофонной кассете. Ноль будет обозначаться как четыре нуляОдинДва. Один бит, как вы уже заметили, может иметь только два значения 0 или 1.

Если внимательно посмотреть, то можно обнаружить, что каждый следующий установленный бит, начиная справа, увеличивает число в два раза: Это и есть двоичная форма представления данных.

Чтобы обозначить числа от 0 до 9, нам нужно четыре бита хоть они и не будут до конца использованы; можно было бы продолжить: Компьютер хранит данные в памяти именно. Для обозначения какогонибудь символа цифры, буквы, запятой, точки и др. Компьютер "распознает" от 0 до различных символов по их коду. Этого достаточно, чтобы вместить все цифры 0 9буквы латинского алфавита a z, A Zрусского а я, А Я и др.

Для представления символа с максимально возможным кодом нужно 8 бит. Эти 8 бит называются байтом. Таким образом, один любой символ это всегда 1 байт табл. Если вы посмотрите его размер, то файл будет равен 1 байту. Если ваш редактор позволяет смотреть файлы в шестнадцатеричном формате, то вы сможете узнать и код сохраненного символа. В данном случае большая буква "М" имеет код 4Dh в шестнадцатеричной системе, которую мы уже знаем, или в двоичной. Как вы уже поняли, компьютер хранит в памяти не сами буквы символы этого слова, а последовательность "единичек" и "ноликов".

Сегментация памяти в реальном режиме 25 "В таком случае, почему на экране мы видим набор символов текст, предложения, словаа не "единички-нолики"? Чтобы удовлетворить ваше любопытство, забежим немного вперед и отметим, что всю работу по выводу самого символа а не битов на экран выполняет видеокарта видеоадаптеркоторая находится в вашем компьютере. И если бы ее не было, то мы, естественно, на экране ничего бы не увидели. В ассемблере после двоичного числа всегда должен стоять символ b. Это нужно для того, чтобы в процессе обработки нашего файла ассемблер-программа смогла различать десятичные, шестнадцатеричные и двоичные числа.

Таким образом, в регистры можно загружать двоичные, десятичные и шестнадцатеричные числа. В компьютере же оно будет храниться в двоичном формате как в регистре bh. В компьютере вся информация хранится в двоичном формате двоичной системе примерно в таком виде: Восемь бит это один байт. Один символ занимает один байт. По идее, ничего сложного. Очень важно уяснить данную тему. В принципе, даже если что-то не совсем понятно, то не отчаивайтесь! Со временем все станет на свои места Как перевести двоичное число в десятичное Чтобы перевести двоичное число в десятичное, надо сложить двойки в степенях, показатели которых соответствуют позициям единиц в двоичном числе.

Например, возьмем число В двоичной системе оно имеет следующий вид: Итак, начнем слева направо, считая от 4 до 0. Число в нулевой степени всегда равно единице: В настоящий момент существует множество калькуляторов, которые могут считать и переводить числа в разных системах счисления.

Например, программа Калькулятор в инженерном виде в Windows. Очень удобен калькулятор и в DOS Navigator. Если он у вас есть, то отпадает необходимость в ручном переводе одной системы в другую, что, естественно, упростит работу. Однако знать этот принцип крайне важно! Сегментация памяти в реальном режиме Возьмем следующее предложение: Теперь давайте посчитаем, на каком месте стоит буква "ы" в слове "сегменты" от начала предложения, включая пробелы На шестнадцатом.

Подчеркнем, что мы считали от начала предложения. Теперь немного усложним задачу и разобьем предложение, как показано в примере 3. В слове "Изучаем" символ "И" стоит на нулевом месте; символ "з" на первом, "у" на втором и.

В данном случае мы считаем буквы, начиная с нулевой позиции и используя два числа. Назовем их сегментом и смещением. Тогда символ "ч" будет иметь следующий адрес: Тогда символ "н" будет иметь следующий адрес: В слове "память" считаем буквы, начиная с сегмента и также с нулевой позиции. Таким образом, символ "а" будет иметь адрес Сегментация памяти в реальном режиме 27 Итак, мы выяснили, что для того, чтобы найти адрес нужного символа, необходимы два числа: В ассемблере сегменты хранятся в сегментных регистрах: Давайте попробуем загрузить в пару регистров es: Вот как это будет выглядеть на ассемблере пример 3.

Проверьте, пожалуйста В этом месте стоит отметить, что загрузка числа номера любого сегмента напрямую в сегментный регистр запрещена. Поэтому мы в строке 1 сперва загрузили номер сегмента в ax, а в строке 2 поместили число 20 из регистра ax в es.

Когда мы загружаем программу в память, она автоматически располагается в первом свободном сегменте. В файлах типа COM все сегментные регистры по умолчанию инициализируются для этого сегмента устанавливаются значения, равные тому сегменту, в который загружена программа. Это можно проверить при помощи отладчика. Если, например, мы загружаем программу типа COM в память, и компьютер находит первый свободный сегмент с номером h, то сегментные регистры будут иметь следующие значения: Код программы типа COM должен начинаться со смещения h.

Для этого мы, собственно, и ставили в наших прошлых примерах программ оператор org h, 34 28 Часть I.

Часть 3. Знакомьтесь с процессором SPU

Сегментные регистры, как уже упоминалось, автоматически принимают значение того сегмента, в который загрузилась наша программа. Строка 02 сообщает о том, что код программы будет располагаться, начиная со смещения h. По этому адресу в память всегда загружаются программы типа COM. Запускаем программу из листинга 3.

Допустим, она загрузилась в свободный сегмент 1DF1h рис. Первая команда в строке 04 будет располагаться по такому адресу: Перейдем к следующей команде.