Физические типы данных ЦП Pentium (по размеру)

Данные, обрабатывамые, к примеру, ЦП Pentium и родственными ему, можно классифицировать по размеру:

 

Иная классификация обрабатываемых данных может быть сделана, если рассматривать данные не с точки зрения их размера, а по способу их использования процесором:

ИТОГИ РАЗДЕЛА

  1. Программная модель – это ПРЕДСТАВЛЕНИЕ ПРОГРАММИСТА о среде, в которой он будет программировать.
  2. Мы изучаем программирование в среде из 1) процессора и 2) оперативной памяти.
  3. Процессор имеет в своем составе такие главные ресурсы: 1) регистры 2) исполнительные автоматы.
  4. Оперативная память доступна процессору практически напрямую (насколько это так, позднее узнаем подробнее).
  5. Память линейна и делится на биты, байты и кратные им единицы.
  6. Данные, которые способен обрабатывать процесор, можно классифицировать по размеру (физически) и по способу их использования (логически). И в том и в другом случае для процессора они бессмысленны и обрабатываются как цепочки битов.

 

 


Раздел 03. ЖИЗНЕННЫЙ ЦИКЛ ПРОСТОЙ ПРОГРАММЫ
НА АССЕМБЛЕРЕ

ПЛАН РАЗДЕЛА

1. Что такое жизненный цикл.

2. Написание исходного текста программы.

3. Компиляция исходного текста.

4. Что такое «Объектный файл».

5. Компоновка объектных файлов.

6. Построение исполняемого модуля (файла типа ЕХЕ).

7. Загрузка программы в память и ее исполнение.

8. Освобождение памяти после завершения программы.

Что такое «ЖИЗНЕННЫЙ ЦИКЛ»

ЖИЗНЕННЫЙ ЦИКЛ – это последовательность состояний (ФАЗ ЖИЗНЕННОГО ЦИКЛА), через которые проходит любая сущность от её зарождения до полного исчезновения. Например, жизненный цикл растения пшеницы:

ШАГ 1. ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ на АССЕМБЛЕРЕ (1/2)

.model small ; Директива «компилировать в малой (small) модели памяти»,

; т.е. с короткими адресами

.stack 100h ; создавать сегмент стека объёмом 100h байт

.data ;=============== СЕГМЕНТ ДАННЫХ ========================

Num dw 0 ; поле для двоичного представления введённого числа

buf db 3, ? , 5 dup (0Dh) ; буфер ввода максимум на 3 символа

expl db "Ввести точно 3 цифры. Программа вычислит",13,10,\

" по ним число и поместит его по метке Num. ",13,10,\

"Итак, вводите:",13,10,"$"

.code ;===================== СЕГМЕНТ КОДА ========================

start:

mov ax, @data

mov ds, ax ; инициализация сегмента данных

mov ah, 9 ; вывод приглашения

lea dx, expl

int 21h

 

mov ah, 0ah ; ввод строки – символьного представления числа (Ну, к примеру, ‘437’)

lea dx, buf

int 21h

; поразрядное превращение строки символов в двоичное представление числа

; сначала обрабатываем разряд сотен (первая цифра символьной строки)

mov bl,100 ; вес разряда сотен

mov al, [buf+2] ; читаем цифру, её смещение от начала буфера = 2

sub al, '0' ; цифру в число ( ‘4’ --à 4)

mul bl ;ах=сколько единиц в сотнях (в АХ в нашем примере получится 400)

add Num, ax ; накапливаем в Num (0+400=400)

mov bl, 10 ; вес разряда десятков

mov al, buf[3] ; читаем вторую цифру ‘3’ (десятки), её смещение от начала буфера - 3

sub al, '0‘ ; ‘3’ -à 3

mul bl ; ах=сколько единиц содержится в десятках ( у нас в АХ здесь окажется 30)

add Num, ax ; 400 + 30 = 430

mov al, [buf+4] ; читаем число единиц. Вес этого разряда = 1, поэтому умножать не надо. AL=‘7’

sub al, '0‘ ; ‘7’ à 7

mov ah, 0 ; ах=сколько просто единиц

add Num, ax ; 430 + 7 = 437

;.....................................................

; Готово. Число в двоичном виде - в данных, метка Num.

; Смотреть отладчиком. Выводить научимся чуть позже...

mov ah, 4ch

int 21h ; выход в ДОС

end start ; закончить компиляцию. Точка входа на метке start.

Эту часть файла компилятор tasm.exe вообще не читает.

Здесь можно писать любые пояснения и комментарии

безо всякого специального оформления.

ШАГ 2. КОМПИЛЯЦИЯ

Компиляция – (упрощённо) это перевод машинных команд из ТЕКСТОВОГО представления на языке ассемблера, понятное человеку в ЧИСЛОВОЕ представление (коды команд), понятное процессору.

 

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

 

TASM.EXE /la PROG1.ASM Командная строка вызова компилятора.

 

Экранный протокол компиляции.

 

Результат успешной компиляции – появились объектный файл и файл листинга.

Один из вариантов структуры объектного файла (упрощённо):

В байт-редакторе структура объектного файла выглядит как показано ниже . Отдельные секции этого файла выдеоены цветом.

 

Режимы компиляции у TASM.EXE

Исторически первым компилятором асеемблерных программ для ПК был компилятор Microsoft Macro Assembler (MASM).

Borland International Inc. создала свой компилятор Borland Turbo Assembler (TASM) позже. Чтобы обеспечить совместимость с MASM, придумали РЕЖИМ КОМПИЛЯЦИИ “MASM”, в котором tasm.exe нормально обрабатывает все директивы Macro Assembler.

Но, желая усовершенствовать свой продукт, Borland ввела еще один режим компиляции - “IDEAL”.

Этот режим отличается несколько более широкими возможностями программирования (числа с плавающей точкой, структуры, объединения…) , более простым синтаксисом и более строгой проверкой типов операндов команд и операций.

Tasm.exe версий 4.01 и выше различает директивы обоих режимов контекстуально и, в большинстве случаев, даже не требует явного указания режима компиляции. Именно поэтому можно, к примеру, с одинаковым успехом использовать директиву «.286» или «Р286», разницы нет.

ШАГ 3. КОМПОНОВКА

Компоновка – (упрощённо) это связывание обращений и входных точек данных и кода одного или нескольких объектных файлов для создания работоспособной программы.

 

Компоновщик – это утилита TLINK.EXE . Командная строка её вызова:

TLINK.EXE prog1.obj

 

Вид каталога до компоновки.     Видкаталога после компоновки. Появились исполняемый файл и файл-карта загрузочного модуля.

Как строится ИСПОЛНЯЕМЫЙ МОДУЛЬ (exe-файл)

 

ШАГ 4. ЗАГРУЗКА ПЕРЕД ИСПОЛНЕНИЕМ

  НАЧАЛЬНОЕ СОСТОЯНИЕ  

 

  СОЗДАНИЕ ПРЕФИКСА ПРОГРАММНОГО СЕГМЕНТА  

 

ПЕРЕНОС В ПАМЯТЬ СЕГМЕНТОВ КОДА и ДАННЫХ  

 

ПОСТРОЕНИЕ В ПАМЯТИ СЕГМЕНТА СТЕКА  

 

ИНИЦИАЛИЗАЦИЯ РЕГИСТРОВ  

 

…и со следующего такта ПОШЕЛ ПРОЦЕСС ИСПОЛНЕНИЯ ЗАГРУЖЕННОЙ ПРОГРАММЫ.

 

  СОСТОЯНИЕ ПАМЯТИ ПОСЛЕ ЗАВЕРШЕНИЯ ПРОГРАММЫ

 

ПОДВОДЯ ИТОГ…

Жизненный цикл ассемблерной программы показан ниже.

Итоги раздела

1. Основные фазы ЖЦ программы – сочинение исходного текста, компиляция, компоновка, загрузка в память и исполнение.