Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

epd627

.pdf
Скачиваний:
22
Добавлен:
02.05.2015
Размер:
816.97 Кб
Скачать

2.2.7. Проверка действия команд очистки экрана (выполнение необязательно). Редактирование программы l#pr1fio.asm (в сегменте кода добавить команды), т.е. после строки 28 (mov ds,ax) вставить следующие строки:

mov ax,0600h

;\

| ah=06(прокрутка),al=00(весь экран)

mov bh,07 ; \

 

| нормальный атрибут (черно-белый)

mov cx,0000 ;

очистка экрана | верхняя левая позиция

mov dx,314fh

; /

| нижняя правая позиция

int 10h

;/

| передача управления в BIOS.

Сохранение полученного файла под этим же именем: l#pr1fio.asm.

2.2.8. Ассемблирование, компоновка и выполнение полученной программы (l#pr1fio.asm). Убедиться, что перед выдачей сообщений экран очищается.

2.2.9.Проверка действия команд установки курсора. Редактирование программы l#pr1fio.asm (в сегменте кода добавить команды), т.е. перед командами вывода сообщения msg (строка 33 и далее) вставить следующие

строки:

 

mov ah,02 ;\

| 02 = установка курсора

mov bh,00 ; \

| экран 0

mov dh,01 ; управление курсором | строка 01

mov dl,00 ; /

| столбец 00

int 10h ;/

| передача упр. в BIOS

и после команд вывода сообщения msg вставить следующие строки:

mov ah,02

;\

| установка курсора

mov bh,00

; \

| экран 0

mov dh,24

; управление курсором | строка 24

mov dl,00

; /

| столбец 00

int 10h ;/

 

| передача упр. в BIOS

2.2.10.Ассемблирование, компоновка и выполнение полученной программы (l#pr1fio.asm). Убедиться, что сообщение msg «Привет, уважаемый пользователь» выдается в первую строку экрана, а сообщение «Для выхода нажмите любую клавишу» выдается в 24-ю строку экрана.

2.2.11.Сегмент данных сформировать аналогично примерам 1.1 (файл lab1pr1.asm) – 1.8 (файл lab1pr8.asm), определив данные для заданной формулы. Например:

datasg segment para 'Data'

b1db 1 ; определение байта (директива db) b2db 2 ; определение байта (директива db)

w1

dw

10

; определение слова (директива dw)

w2

dw

20

; определение слова (директива dw)

d1dd

100 ; определение двойного слова (директива dd)

d2dd

200 ; определение двойного слова (директива dd)

s_1

db

‘Привет’,’$’;определение константы (db)

s_2

db

datasg ends

2.2.12. Отредактировать lab1pr1.asm таким образом, чтобы выдавалось сообщение «Привет», а затем две строки:

s_000

db

‘Вывожу информацию, ’

s_0000

db

‘пока не встретится символ ‘$’, и прекращаю вывод’, ‘$’

 

 

11

; символ $ в базовой версии DOS означает конец строки (закончить вывод).

Отредактировать lab1pr1.asm таким образом, чтобы выдавалось сообщение s_b0, а затем – val_b0, т.е. две строки, между которыми нет перевода строки:

s_b0

db

‘b0= ’

val_b0

db

‘10’, ‘$’

Аналогично, чтобы выдавалось сообщение s_w0, а затем – val_w0,

s_w0

db

‘w0= ’,0ah, 0dh

val_w0

db

‘100’,0ah, 0dh, ‘$’

2.2.13. Добавить в сегмент кода команды вывода на экран значений символьных констант (val_b00, val_w00, val_d00 добавить в сегмент данных):

val_b00

db

‘127’, 0ah, 0dh, ‘$’

val_w00

db

‘65536’,0ah, 0dh, ‘$’

val_d00

db

‘1048536’,0ah, 0dh, ‘$’

2.2.14.Добавить в сегмент кода команды вывода на экран значений символьных констант (val_b000, val_w000, val_d000 добавить в сегмент данных):

val_b000 db ‘1’, 0ah, 0dh, ‘$’ val_w000 db ‘10000’,0ah, 0dh, ‘$’ val_d000 db ‘100000’,0ah, 0dh, ‘$’

2.2.15.Добавить в сегмент кода команды преобразования и вывода на экран констант, определенных директивами db, dw, dd:

val_b0_d db 15 val_w0_d dw 345 val_d0_d dd 1234567

Преобразование выполнять, вызывая процедуру bin_ascii. С клавиатуры вводить только положительные числа.

2.2.16.Используя lab1pr6.asm, создать исходный текст программы l#1fio6.asm. Для этого отредактировать сегмент данных, вставить строки:

b1

db

100

b2

db

15

w1

dw

300

w2

dw

4

d1

dd

100480

2.2.17. Используя примеры lab1pr6.asm, lab1pr7.asm и lab1pr8.asm,

запрограммировать вычисление по формуле y=d1-(b1+w1/b2)*w2, т.е. добавить в сегмент кода команды:

1)деления слова на байт (w1/b2): mov ax,w1

div b2 ; al := w1/b2

mov byte ptr rezult,al ;мл.байт переменной rezult := w1/b2

____________

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

xor dx,dx ;\ xor bx,bx ; \

mov ax,w1; |w1/b2

12

mov bl,b2 ; / div bx ;/

mov word ptr rezult,ax

Нужно учитывать, что для деления чисел со знаком ни один из этих вариантов не годится (см. уч. пос. «Языки программирования», ч.3).

____________

2) сложения с полученным результатом (значения переменных для примера подобраны так, что результат деления (частное) вмещается в байт (т.е. оно не превышает число 127), а результат сложения вмещается в слово, т.е. не превышает число 65535):

Вариант реализации 1:

 

 

xor ah,ah

; зануляет регистр ah, но сохраняет регистр al

 

add al,b1

 

 

 

adc ah,0

; ax := b1+w1/b2

 

mov word ptr rezult,ax ;мл.слово переменной rezult := b1+w1/b2

Вариант реализации 2:

 

 

xor ax,ax

; зануляет весь регистр ax (в т.ч. и регистр al)

 

mov al, byte ptr rezult

; al := w1/b2

 

add al,b1

 

 

 

adc ah,0

; ax := b1+w1/b2

 

mov word ptr rezult,ax

;мл.слово переменной rezult := b1+w1/b2

 

В примере lab1pr6.asm это показано следующим образом:

 

xor ax,ax

;\

 

 

mov al,b1

; | b1+b2

 

 

add al,b2

; |

 

 

adc ah,0 ;

ax := b1+b2

 

 

mov word ptr rezult,ax ; rezult= ax := b1+b2

В варианте 1 отступили от приведенного в примере набора команд, чтобы сохранить регистр al.

3) умножения полученного результата на слово («слова на слово»):

; ax := b1+w1/b2

mul w2 ;(dx:ax) := ax*w2 = (b1+w1/b2)*w2

mov word ptr rezult,ax ;мл.слово произведения (rezult и rezult+1) mov word ptr rezult+2,dx ;ст.слово произвед. (rezult+2 и rezult+3)

4) вычисления разности двойного слова (d1) и полученного результата (он также размещается в двойном слове – в двух регистрах):

; (dx:ax) := ax*w2 = (b1+w1/b2)*w2 mov bx,word ptr d1

mov cx,word ptr d1+2

sub bx,ax ;мл.слово разн. := bx-ax:=

;мл.слово d1 - мл.слово (b1+w1/b2)*w2

sbb cx,dx

;ст.слово разн. := bx-ax-cf:=

;ст.слово d1 - ст.слово (b1+w1/b2)*w2 – cf

13

; Таким образом, y = (cx:bx) := d1-(b1+w1/b2)*w2

mov word ptr rezult,bx;мл. слово разности (rezult и rezult+1)

mov word ptr rezult+2,cx ;ст.слово разности (rezult+2 и rezult+3) ; rezult := d1-(b1+w1/b2)*w2

В примере lab1pr6.asm: mov ax,word ptr d1 mov dx,word ptr d1+2 sub ax,word ptr d2

sbb dx,word ptr d2+2;/ d1d2

mov word ptr rezult,ax ; мл. слово разности (в rezult и rezult+1) mov word ptr rezult+2,dx ; ст. слово разности (в rezult+2 и rezult+3)

5)вывода на экран вычисленного значения y. Для этого использовать процедуру bin_ascii (скопировать ее из примера lab1pr5.asm в текст программы l#1fio6.asm). Ассемблирование, компоновка, выполнение программы;

6)ввода с клавиатуры значений b1, b2, w1, w2 и d1 и преобразования их из символьного вида в двоичный. Преобразование выполнять, вызывая процедуры ascii_bin_b, ascii_bin_w и ascii_bin_d. (скопировать их из примеров lab1pr2.asm, lab1pr3.asm и lab1pr4.asm в текст программы l#1fio6.asm). Копировать после «маркирования фрагмента», Ctrl+Insert (в буфер обмена), Shift+Insert (из буфера обмена).

Примечание. Для ассемблирования программы необходимо файл с исходным текстом программы (то есть файл с расширением .asm) поместить в каталог с ассемблером (то есть с файлом tasm.exe), набрать в командной строке команду:

tasm.exe <имя файла>.asm /l

инажать клавишу Enter. В результате будет получен файл с расширением .obj (полное его имя: <имя файла>.obj). Затем с помощью программы tlink.exe необходимо получить загрузочный модуль. Для этого необходимо, чтобы в каталоге с ассемблером был файл tlink.exe и нужно в командной строке набрать команду:

tlink.exe <имя файла>.obj

Врезультате будет получен файл с расширением .exe (полное его имя: <имя файла>.exe). Чтобы запустить программу, следует навести курсор на полученный файл

инажать клавишу Enter.

2.3. Подготовка к выполнению индивидуального задания

(создание заготовки l_1_fio.asm)

До ввода команд ввести комментарий, который показывает очередность выполнения операций: выдача сообщений, ввод данных, преобразование из символьного вида в двоичный, вычисления, преобразование из двоичного вида в символьный и т.п. (прил. 1.2) и файлы lab1pr3.asm или lab1_sa_.asm (прил. 1.3).

14

3. ЗАДАНИЕ НА ПРОГРАММИРОВАНИЕ (ОБЩАЯ ЧАСТЬ)

3.1. Составить EXE-программу для МП Intel 8086 для вычисления по формуле, содержащей арифметические операции сложения, вычитания, умножения и деления. Формулы вычислений – индивидуальны; вариант (номер формулы) взять у преподавателя, а при самостоятельном изучении

– в прил. 1.1.

 

 

 

Таблица 3.1

Варианты используемых арифметических операций

 

 

 

 

Сложение

b1+b2

w1+w2

d1+d2

 

b1+w1

b1+d1

w1+d1

Вычитание

b1-b2

w1-w2

d1-d2

 

b1-w1

w1-b1

b1-d1

 

d1-b1

w1-d1

d1-w1

Умножение

b1*b2

w1*w2

d1*d2

 

b1*w1

w1*b1

b1*d1

 

d1*b1

w1*d1

d1*w1

Деление

b1/b2

w1/w2

d1/d2

 

b1/w1

w1/b1

b1/d1

 

d1/b1

w1/d1

d1/w1

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

Таблица 3.2

Полный текст задания к лабораторной работе №1

Ассемблер для микропроцессора – Intel 8086

Операционная система – MS-DOS [1, с.127-128]

Режим работы процессора – реальный [1, с.20-60]

Тип программы – EXE [2, с.37-39; 1, с.130-131; 3, с.57-58]

Назначение программы – вычисление по формуле (арифметические операции, т.е. команды двоичной арифметики)

Модель памяти – малая [1, с.112], т.е. один сегмент стека, один сегмент данных и один сегмент кода, что соответствует директиве определения модели памяти

.small [1, с.112; 4, с.45-46]

Модули – lab1_fio.asm (один сегмент стека, один сегмент данных и один сегмент кода). Файл lab1_fio.asm получается из файла lab1_sa_.asm (см. прил. 1.3; в нем предусматриваются: ввод байта и слова с клавиатуры, процедуры перевода из символьного вида в двоичное представление для байта, слова и двойного слова, процедура перевода из двоичного представления в символьный вид и вывод на экран)

Директивы:

определения сегментов стандартные (полные): segment, ends и assume [1,

с.110-112; 4, с.43, 47-51];

15

Продолжение табл. 3.2

--позже: упрощенные директивы определения сегментов – – в уч. пос., ч.4; определения процедур: proc и endp [2, с.43; 1, с.115; 6, с.89];

завершения программы end [1, с.115];

определения данных: байта (db), слова (dw), двойного слова (dd);

--позже: директивы dq и dt – в уч. пос., ч.2;

префиксы переопределения типов byte ptr, word ptr [1, с.121]

--позже: префикс переопределения типов dword ptr [1, с.121] – в уч. пос.,ч.7

Команды непривилегированные:

передачи данных: mov, lea [2, с.15-17; 6, с.138];

-- позже: команды lahf, lds, les, sahf, xchg, xlat – в уч. пос., ч.7;

арифметические (команды двоичной арифметики): сложения (add и adc), вычитания (sub и sbb), увеличения на единицу (inc), уменьшения на единицу (dec), умножения (mul и imul), деления (div и idiv), преобразования байта в слово (cbw) и слова в двойное слово - cwd [1, с.225; 4, с.63-67];

--позже: команды cwde и cdq [1, с.32] –в уч. пос., ч.7;

сравнения cmp [1, с.37; 2, с.19];

безусловного (jmp) и условного (jz, jnz, js, jns) перехода [2, с.27-28];

--позже самостоятельно: jc, jnc jcxz – в уч. пос., ч.4; jp, jnp, ja, jna, jg, jge, jl, jle, jcxz [2, с.27-28] – в уч. пос., ч.7;

организации цикла loop [1, с.47-51; 2, с.28; 7, с.74];

 

--

позже самостоятельно: loopz, loopnz, loope, loopne [2, с.28] – в уч. пос., ч.7;

передачи управления (вызова процедур пользователя (call) и функций операционной системы DOS (int) и возврата из процедур – ret [2, с.27-31];

--позже самостоятельно: iret - выход из обработчика прерываний [2, с.29] – в уч. пос., ч.8;

--позже: операторы short (8), small (16), large (32) [1, с.120] – в уч. пос., ч.7;

работы со стеком: push, pop [2, с.27-31];

--позже самостоятельно: pushf, popf [2, с.26] – в уч. пос., ч.6;

Адресация

регистр-регистр:

mov ax,bx ; занести (скопировать) в ax содержимое bx [4, с.34]

--позже: mov ax,[bx] ; занести в регистр ax содержимое памяти по адресу из регистра bx [4, с.34-40] в уч. пос., ч.6

mov ax,[25] ; занести (скопировать) в регистр ax содержимое ячейки по смещению 25

mov al,bl ; занести (скопировать) в регистр al содержимое bl

mov bx,cx ; занести (скопировать) в регистр bx содержимое cx

регистр-память:

mov ax,worda ; занести в регистр ax значение переменной (слова) worda

mov al,bytea; занести в регистр al значение переменной (байта) bytea

mov dx,worda ; занести в регистр dx значение переменной (слова) worda

память-регистр:

mov worda,ax ; занести в ячейку worda содержимое регистра ax (слово)

16

mov bytea,al ; занести в ячейку bytea содержимое регистра al (байт)

Продолжение табл. 3.2

mov worda,cx ; занести в ячейку worda содержимое регистра cx (слово)

регистр-непосредственный операнд:

mov ax,25 ; занести в регистр ax значение 25

mov bx,2 ; занести в регистр bx значение 2

mov al,25 ; занести в регистр al значение 25

память-непосредственный операнд:

mov worda,25 ; занести в ячейку worda значение 25

mov bytea,25 ; занести в ячейку bytea значение 25

Использование процедур операционной системы:

ввод с клавиатуры [2, с.57-62]; вывод на экран. [2, с.63-67].

Дополнительная информация (рассматривается на практических занятиях):

-процессоры Intel в реальном режиме [1, с.20-60];

-последовательность выполнения команд [2, с.12-13];

-структура процессора 8086 [2, с.9, рис. 1.1.2];

-сегментная адресация [2, с.9, рис.1.1.3];

-представление данных в компьютерах [1, с.14-19];

-логика и организация программ;

-условные и безусловные переходы [6, с.156, 162];

-дисковая память: функции базовой версии DOS [3, гл.16].

Примеры программ: lab1pr1.asm, lab1pr2.asm, lab1pr3.asm, lab1pr4.asm, lab1pr5.asm, lab1pr6.asm, lab1pr7.asm, lab1pr8.asm, lab1_sa_.asm

Используемое ПО: tasm.exe, tlink.exe, td.exe, rtm.exe, dpmiload.exe, dpmimem.dll

Формируемые файлы: lab1_fio.asm, lab1_fio.obj, lab1_fio.lst, lab1_fio.exe

Литература: 1. Зубков С.В. Assembler для DOS, Windows и UNIX. 3-е изд.,

стер. М.: ДМК Пресс; СПб.: Питер, 2005. 608с.

2.Бурдаев О.В., Иванов М.А., Тетерин И.И. Ассемблер в задачах защиты информации/ Под ред. И.Ю.Жукова. – М.: КУДИЦ-ОБРАЗ, 2002. – 320с.

3.Абель Питер. Язык ассемблера для IBM PC и программирования: Пер. с англ. М.: Высшая школа. – 1992. 447 с.

4.Олейник Л.Е. Язык ассемблера для микропроцессора 8086: Курс лекций. Омск: Сибирская региональная школа бизнеса, 2000

5.Дао Л. Программирование микропроцессора 8088. М.: Мир, 1988. 356 с.

6.Абель Питер. Ассемблер. Язык и программирование для IBM PC: Пер. с англ., изд.5-е стереот. Киев.: Век; М.: Энтроп; Киев: НТИ, 2003. 736 с.

Задание (З_ЛР_1): Составить EXEпрограмму для МП Intel 8086 для вычисления по формуле, содержащей арифметические операции сложения, вычитания, умножения и деления (в соответствии с заданным вариантом)

Использовать в качестве аргументов b1,b2,...,w1,w2,...,d1,d2,...– байты, слова и двойные слова

Вари- А. Все данные (b1,b2,b3,...,w1, w2,w3,...d1,d2,d3,....) вводятся c

анты: клавиатуры после запроса (прокрутка снизу вверх)

Б. Данные (b2, b4,...,w1, w3,...,d2, d4,....) вводятся c клавиатуры после запроса (прокрутка снизу вверх), все остальные – из сегмента данных

17

Окончание табл. 3.2

Применяется перевод из ASCII-формата в двоичный код (для данных, введенных с клавиатуры) и перевод из двоичного кода в ASCII-формат (для данных, выдаваемых на экран)

Результат вывести на экран по формату:

Вари- А. "Вычисление по формуле:____, Y=____ для b1=__;b2=__;b3=__; анты: b4=__;w1=___и т.д." (после очистки – в свободную строку)

Б. "Вычисление по формуле:____, Y=___ (после очистки – в строку №10)

Лабораторная считается сданной, если:

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

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

-при ассемблировании и компоновке не обнаружено ошибок;

-результат совпадает с результатом ручного просчета для контрольных примеров (составить самостоятельно по аналогии с пп.2.1.16, 2.1.17 и 2.1.18, а также использовать произвольно заданные преподавателем. При этом разрешается подбирать исходные данные таким образом, чтобы результат получался не отрицательным)

Типичные ошибки: см. подраздел 5

Задание повышенной сложности (ЗПС_ЛР_1): Составить EXE-программу МП Intel 8086 для вычисления по формуле, содержащей арифметические операции сложения, вычитания, умножения и деления (в соответствии с заданным вариантом, но дополнить программу таким образом, чтобы на экран правильно выводился отрицательный результат вычисления).

4.СВЕДЕНИЯ, НЕОБХОДИМЫЕ ДЛЯ ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ

4.1. Язык ассемблера и архитектура компьютера

Язык ассемблера является ориентированной на человека формой набора инструкций процессора. Машинный язык (т.е. набор инструкций процессора) и язык ассемблера функционально эквивалентны, но на языке ассемблера намного проще программировать. При этом ассемблер транслирует инструкции из мнемонического вида в их машинный эквивалент. В дальнейшем и язык ассемблера и компилятор с этого языка будем называть ассемблером.

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

18

ассемблере программа позволит получить код с наименьшим временем выполнения.

Процессор Intel 8086 представляет собой основание всей ветви процессоров серии iAPx86, и язык ассемблера, используемый для его программирования, известен как язык ассемблера процессора 8086. Программы, написанные на этом языке, могут выполняться на любом процессоре серии iAPx86. В первой главе пособия не рассматриваются инструкции, выполняемые не на всех компьютерах этого семейства. Например, не рассматриваются инструкции cwde и cdq, используемые в процессоре Intel 80386, а рассматриваются только cbw и cwd.

Кроме того, рассмотрение инструкций ограничивается архитектурой процессора 8086, и в связи с этим, например, при обсуждении инструкции mov не применяются варианты с регистрами eax, ebx, ecx и т.п.

Электронно-вычислительная машина (ЭВМ), или, по-другому, компьютер система, состоящая из пяти функциональных подсистем:

1)арифметической (сложение, вычитание, умножение, деление, операции "И", "ИЛИ", "исключающее ИЛИ" и т.д.);

2)ввода (клавиатура, "мышь", диск и т.д.);

3)управления (координация всех функций);

4)памяти (с прямым доступом для чтения и записи – ОЗУ и диск и доступной только по чтению ПЗУ);

5)вывода (дисплей, принтер, графопостроитель, диск).

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

4.2. Язык ассемблера

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

Значение каждой инструкции имеет для процессора строго определенный смысл. Например, значение инструкции 4 говорит процессору 8086, что нужно сложить значение, хранящееся в следующей ячейке памяти, с регистром al.

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

19

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

4.3. Процессоры 8086 и 80386

Процессор Intel 8086 представляет собой только один процессор из серии процессоров, известных как серия iAPx86. Другие процессоры данной серии: Intel 80286, Intel 80386 и т.д. Все они в дальнейшем будут обозначаться как процессоры 8086, 80286, 80386 и т.п.

4.4. Возможности процессора 8086

Процессор 8086 может адресоваться к большому объему памяти, имеет мощный набор инструкций, при соответствующем программировании может обеспечивать работу высокоэффективных программ. Его тактовая частота – 4,77…8 мегагерц (МГц).

Тактовая частота процессора 80286 – 6…16 МГц; процессора 80386 – 16…35 МГц, и современных процессоров этой серии – более 4000 МГц, т.е. 4 ГГц.

4.5. Память

Основной единицей памяти компьютера является бит. В бите может храниться значение 0 или 1. Процессоры 8086, 80386 и др. работают с байтами, которые состоят из 8 битов.

Байт – это наименьшая единица адресации процессора. В нем может храниться 1 символ, 1 беззнаковое значение от 0 до 255 или одно значение со знаком в диапазоне от -128 до +127. Байт не подходит для хранения значений с плавающей точкой и указателей на память.

Процессор 8086 может адресоваться к памяти объемом 1 мегабайт (это 1 048 576 ячеек памяти, каждая размером 8 битов). Первый байт памяти имеет адрес 0, а последний – адрес 0fffffh.

Адрес 0fffffh – это шестнадцатеричная форма записи, о чем говорит суффикс h. В десятичном виде это эквивалентно значению 1 048 575.

В любой момент программа процессора 8086 может считать или изменить содержимое любого из 1 048 576 байтов памяти (один мегабайт – Мб). Процессор 80386 может обращаться к памяти в 4 000 раз большей. Хотя процессор 8086 может адресоваться к памяти объемом 1 Мб, но доступно для общего использования только 640 Кб (килобайт). Остальное пространство предназначено для использования системными программами, а также занято памятью, используемой для работы с дисплеем (видеопамять).

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]