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

Уроки по ассемблеру

  Все выпуски  

Уроки по ассемблеру


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


Assembler. Уроки с сайта http://progs.biz

Рассылка №3

Assembler Урок 5. Сегментная организация программ.
Assembler Урок 6. Пример программы с сегментами команд, данных и стека.

Полные версии уроков (с картинками) можно найти по адресам
Урок 5. Сегментная организация программ.
Урок 6. Пример программы с сегментами команд, данных и стека.

Ассемблер. Урок 5. Сегментная организация программ

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

В сегменте команд записывается сама программа. Т. е. разные циклы, условные переходы и т. п.

Сегмент данных предназначен для хранения в нем данных программы - разных строк и т. п. Если таких данных нет, то сегмента данных может и не быть.

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

Все три основные сегмента где-то начинаются (имеют свой адрес). Где именно - это записывается в регистры CS, DS, SS процессора.

Наверх

Ассемблер. Урок 6. Пример программы с сегментами команд, данных и стека

На прошлом уроке мы говорили про то, что, как правило, в каждой программе есть три сегмента - сегмент команд, сегмент данных и сегмент кода. Но в примере программы из урока 3 у нас был только сегмент кода. Вот пример программы со всеми тремя сегментами:

;Сегмент команд
text segment
assume CS:text, DS:data

start: mov ax,data
    mov ds,ax
    mov ah,09h
    mov dx,offset mystr
    int 21h
    mov ah, 04Ch
    mov al, 0
    int 21h
text ends
;Сегмент данных
data segment
    mystr db 'Hello!$'
data ends
;Сегмент стека
st segment stack
    db 256 dub(0)
st ends
end start

Если вы откомпилируете эту программу и запустите (см. урок 3), то она просто выведет на экран слово "Hello!".

Как вы видите, здесь у нас имеется три сегмента - команд, данных и стека. Они называются text, data и st соответственно (имена произвольные - их мы даем сами). Каждый сегмент начинается со строки

имя_сегмента segment

а заканчивается строкой

имя_сегмента ends

Подробнее же текст этой программы мы рассмотрим на следующщем уроке.

Наверх
Рассылки Subscribe.Ru
Уроки по Visual C++ (MFC, платформа .NET)

Уроки по Visual C++.NET, MFC, ActiveX, COM-технологиям. Примеры программ. Каждый урок содержит информацию только по существу и расчитан на 10-20 минут. Уроки по каждой теме независимы.


Copyright Алексеев Игорь, 2002

Copyright сайт progs.biz, 2002


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

В избранное