Практикум для изучения дисциплины «Основы программирования»



Pdf көрінісі
бет63/81
Дата08.07.2020
өлшемі1,55 Mb.
#74978
түріПрактикум
1   ...   59   60   61   62   63   64   65   66   ...   81
Байланысты:
А.А. Тюгашев
А.А. Тюгашев, А.А. Тюгашев, А.А. Тюгашев
ЗАМЕЧАНИЕ 
В некоторых архитектурах могут реализовываться и другие более экзотические 
способы адресации операндов. 
Обычно  процессор  помимо  УУ,  АЛУ  и  СК  имеет  встроенные  так 
называемые  регистры.  Они  представляют  собой  сверхоперативную 
память —  команды  могут  обрабатывать  данные  без  необходимости 
обращения к ОЗУ ЭВМ, что значительно ускоряет вычисления. Регистры 
могут указываться в командах вместо адресов данных в памяти. 
В  архитектуре  x86  имеется  несколько  регистров,  которые  можно 
использовать  произвольным  образом  (почти),  или  регистров  общего 
назначения. Они имеют обозначения AX, BX, CX, DX, SI и DI. Несмотря на 
универсальность,  в  программах  регистры  зачастую  используются  в 
определенных  целях  и  поэтому  имеют  дополнительные  имена:  AX — 
аккумулятор,  BX —  база,  CX —  счетчик,  DX —  данные,  SI —  индекс 
источника, DI — индекс результата. 
Определив  подходы  к  представлению  команд  в  памяти  ЭВМ,  поговорим 
немного  о  представлении  данных.  Компьютер  имеет  базовый  параметр, 
называемый  разрядностью,  определяющий  размер  машинного  слова — 
порции  данных,  обрабатываемой  процессором  при  выполнении  одной 
команды.  Сегодня  разрядность  у  массовых  компьютеров —  16, 32, 64 
бит — два, четыре или восемь байт соответственно. Тем не менее обычно 
минимально адресуемой единицей памяти является байт, и у 16-разрядной 
ЭВМ,  например,  адреса  соседних  ячеек  (слов)  различаются  на  2.  При 
представлении дробных чисел в современных ЭВМ обычно производится 
нормализация и хранятся мантисса и порядок числа. 
Важным  является  представление  знака  для  чисел.  Не  вдаваясь  в 
подробности, отметим, что обычно допустима обработка как беззнаковых 
чисел,  так  и  чисел  со  знаком.  При  этом,  если  число  рассматривается  как 
число  со  знаком,  обычно  крайний  старший  разряд  слова  принимается 
носителем  знака  по  следующей  схеме:  ноль —  число  положительное, 
единица — отрицательное. 
Символы и строки хранятся в памяти ЭВМ с использованием той или иной 
системы  кодирования.  Наиболее  распространены  вариации  кода  ASCII  и 
Unicod.  В  кодировке  ASCII  (American  Standard  Code  for  Information 
Interchange — 
увы,  кодировка  американская,  и  с  русскими  буквами  мы 
имеем массу проблем...) для кодирования одного символа используется 1 
байт (фактически, изначально 7 бит, именно это позволило при создании 
основанных на ней русскоязычных кодировок добавить кириллицу, но для 
простоты можно считать, что 8 бит). 
Программа  на  ассемблере  может  включать  несколько  секций  (некоторые 


128 
 
не  являются  обязательными),  или  разделов  (например,  в  ассемблерах 
MASM и Flat Assembler): 
 
заголовок; 
 
описание интерфейса и подключаемых библиотек; 
 
описание данных (констант и переменных); 
 
собственно команды. 
Правила  записи  заголовка  и  интерфейса  программы  могут  различаться  в 
разных версиях программы-переводчика (также называемой ассемблером). 
Автор  рекомендует  для  программ  на  ассемблере  x86  использовать 
свободно  распространяемый  Flat  Assembler,  снабженный  довольно 
солидным  набором  библиотек,  включающих,  в  частности,  неплохую 
поддержку компьютерной графики. 
Основная  часть  программы  на  языке  ассемблера  состоит  из  выражений. 
Все выражения могут быть записаны в следующем условном виде: 
[
Метка:] [Оператор] [Операнды] [; Комментарий
Выражения  могут  быть  директивами  ассемблера  и  мнемоническими 
обозначениями  команд.  Различие  между  ними  следующее.  Мнемоника 
команды  ассемблером  превращается  в  машинный  код,  кототрый  затем 
записывается в память программы и в ходе ее исполнения обрабатывается 
процессором. Директивы называются также псевдокомандами — это некие 
предписания ассемблеру, предназначенные для программы-переводчика, а 
не  процессора.  Набор  команд  специфичен  для  каждого  процессора 
(архитектуры).  Директивы  определяются  реализацией  программы 
ассемблирования. 
Сначала  рассмотрим  запись  программы  на  языке  ассемблера  с  помощью 
команд: 
A1: 
mov 
 
ax,2 ; занесение в регистр AX процессора числа 2 
   mov    
bx,2 ; занесение в регистр BX процессора числа 2 
     add 
bx,ax; сложение содержимого BX и AX, результат → в BX   
Надеемся,  приведенный  фрагмент  не  вызвал  у  читателя  затруднений  .  В 
данном примере данные заносились и обрабатывались в регистрах общего 
назначения  процессора.  Если  данные  хранятся  в  памяти,  ячейке  обычно 
дается  мнемоническое  имя  с  помощью  соответствующих  директив 
ассемблера. Рассмотрим следующий пример (ассемблер MASM): 
; в разделе описания данных 
S1 dw 
2 ; занесение в ячейку числа 2 и ее обозначение как S1 
S2 dw 
3 ; занесение в ячейку числа 3 и ее обозначение как S2 
S3 dw 
? ; резервирование ячейки памяти с именем S3 
P  db 
? ; резервирование одного байта 


129 
 
MAS 
dw 1,2,-
4,11,25; начиная с адреса MAS занесены пять чисел 
STR 
db 
'Привет'; начиная с адреса STR идут байты строки символов 
 
; в разделе описания команд они обычно отделены друг от друга 
sub  
S2,S1; вычитание содержимого ячейки S1 из S2  


Достарыңызбен бөлісу:
1   ...   59   60   61   62   63   64   65   66   ...   81




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет