Нижегородский Государственный Технический Университет

им.

Лабораторная работа№1

по дисциплине «Системное программное обеспечение»

Тема: Программная модель процессора и программирование в кодах

Выполнил:

студент 10-В-1

Проверил:

               

       

Нижний Новгород

2012 г.

Задание.

Подготовить средствами отладчика TD в памяти таблицу

кодов {a(1),a(2),...,a(n)}.  Написать программу в кодах, выполняющую

преобразование по заданному условию и перезапись таблицы кодов

из сегмента данных в дополнительный сегмент.

Заданное условие: Перестановка  a(n),a(n-1),a(n-2),...,a(n/2),a(1),a(2),...,a(n/2-1).

Алгоритм решения задачи.

Организуем два цикла, каждый с количеством итераций равным n/2. В первом цикле перемещаем данные из исходных, начиная с конца. Это возможно сделать уменьшая смещение на 1 при каждой итерации. Во втором цикле перемещаем данные, начиная с первого знака, но продолжая заполнять массив выходных данных.

Код программы:

  cs:0100BF3001  mov  di,0130  ;позиция исходных данных 

  cs:0103 BE4001  mov  si,0140  ;позиция выходных данных 

  cs:0106 BD0F00  mov  bx,000F  ;в указатель базы  уууууууууууууууууууууууууууууууууууууууууу;записывае F 

  cs:0109 B90800  mov  cx,0008  ;увеличиваем кол-во уууууууууууууууууууууууууууууууууууууууууу;итераций цикла до 8 

  cs:010C 8A03  mov  al,[bx+di];загрузка в аккумулятор уууууууууууууууууууууууууууууууууууууууууу;данных из смещения bp+di 

НЕ нашли? Не то? Что вы ищете?

  cs:010E 8804  mov  [si],al  ;загрузка из аккумулятора уууууууууууууууууууууууууууууууууууууууууу;данных по смещению 

  cs:0110 4D  dec  bx  ;уменьшение значения в bp 

  cs:0111 46  inc  si  ;увеличение значения в si 

  cs:0112 E2F8  loop  010C  ;цикл с переходом на 010C 

  cs:0114 B90700  mov  cx,0008  ;увеличиваем кол-во уууууууууууууууууууууууууууууууууууууууууу;итераций цикла до 8 

  cs:0117 8A05  mov  al,[di]  ;загрузка в аккумулятор уууууууууууууууууууууууууууууууууууууууууу;данных из смещения di 

  cs:0119 8804  mov  [si],al  ; загрузка из аккумулятора уууууууууууууууууууууууууууууууууууууууууу;данных по смещению 

  cs:011B 46  inc  si  ;увеличение значения в si 

  cs:011C 47  inc  di  ;увеличение значения в di 

  cs:011D E2F8  loop  0117  ;цикл с переходом на 0117

Состояние дампа памяти до выполнения программы:


CPU 80486

  ds:0130 01 02 03 04 05 06 07 08

  ds:0138 09 10 11 12 13 14 15 16

  ds:0140 00 00 00 00 00 00 00 00 

  ds:0148 00 00 00 00 00 00 00 00


CPU 80486

  ax 0000 

  bx 0000 

  cx 0000 

  dx 0000 

  si 0000 

  di 0000 

  bp 0000 

  sp 0080 

  ds 5AF6 

  es 5AF6 

  ss 5AF6 

  cs 5AF6 

  ip 0100 


CPU 80486

c=0

z=0

s=0

o=0

p=0

a=0

i=1

d=0



Состояние дампа памяти после выполнения программы:


CPU 80486

  ds:0130 01 02 03 04 05 06 07 08

  ds:0138 09 10 11 12 13 14 15 16

  ds:0140 16 15 14 13 12 11 10 09 

  ds:0148 01 02 03 04 05 06 07 08

CPU 80486

  ax 0008 

  bx 0007 

  cx 0008 

  dx 0000 

  si 0150 

  di 0138 

  bp 0000 

  sp 0080 

  ds 5AF6 

  es 5AF6 

  ss 5AF6 

  cs 5AF6 

  ip 011D

CPU 80486

c=0

z=0

s=0

o=0

p=0

a=0

i=1

d=0



Методы адресации:

1.Непосредственная адресация – значение операнда располагается в байтах самой программы

  mov ax, 27h  010 111 (значение8)

2.Регистровая адресация – операнд находится в регистре

  mov ds, ax

3.Прямая адресация – адрес операнда является частью команды в виде байтов смещения

  mov ax, [2100]

4.Косвенная адресация. Адрес операнда находится в одном из регистров BX, SI или DI.

  mov dl,[si]

5.Неявная адресация – адресуемый объект указывается с помощью 1-го байта команды вместе с кодом операции без выделения специального кода

  cbw

  mul al

Команда CBW всегда работает с регистрами AX и AL, а у команды MUL фиксировано положение первого множителя и результата.

6. Косвенная регистровая (базовая) адресация со смещением

Адрес операнда вычисляется как сумма содержимого регистра BX, BP, SI или DI и 8- или 16-разрядного смещения

  add ax,[bx+2]

  mov dx,[array1+si]

Режим адресации в памяти и микропроцессоре Intel 86.

Режимом или способом адресации называют процедуру нахождения операндов.

Операнды в программе могут задаваться в:

РОНах Непосредственно в коде программы Ячейках памяти (прямо или косвенно) В портах ввода/вывода

Режим

адресации

Обозначение в

ассемблере

Регистр. сегмент.

по умолчанию

Пример использования

регистровый

AX/AL (16/8)

-----

Mov AX, CX;

Mov AL, BH

Непосредственная адресация

Const (16/8)

-----

Mov AX,100H;

Mov BL,-24H

Прямая адресация

Метка, задающая смещение относительно данных.

DS

Mov Ax, TAB (обычно используется для задания статических переменных)

Косвенная адресация

[BX], [BP]

[DI], [SI]

(>i386 можно исп.

все регистры)

DS, SS

DS (ES), SS

Mov AL,[DI]

Mov AX, ES:[BX]

Базовая адресация

[BX]+смещение

[BP]+ смещение

DS

ES

Mov AX, 4[BP] (означает 4+BP)

Mov CX, [BP]+2

Mov AX, CS:[BX]+4

Индексная адресация

[SI]+смещение

[Di]+ смщение

DS

DS (ES)

Mov AL, B, TAB

(исп. для строк или массивов)

Базово – индексная адресация

[BX]:[DI]+смещение

[BX]:[SI]+смещение

[BX]:[BP]+смещение

DS, SS

DS, SS

Mov AX, ES:VALUE [BX]:[DI] (VALUE+BX+DI)

Базово – индексная с масштабированием (начиная с i386)

[EAX][ESX*m]+смещение

m=1, 2, 4, 8

Mov Ax,4*[BP]

Mov CX,[BP]*2+2

Операнды могут располагаться в любых РОНах и сегментных регистрах. В тексте программы указывается название соответствующего регистра. Все арифметические команды (кроме деления) позволяют указывать один из операндов непосредственно в тексте программы. Если известен адрес операнда в памяти, можно использовать этот адрес. Прямая адресация иногда называется адресацией по смещению (Mov AX, ES:2CH – из ячейки с адресом 2СН сегмента EXTRA содержимое пересылается в AX). Адрес операнда в памяти можно хранить в любом из указанных регистрах ([BX]:[BP]; [DI]:[SI]). После i386 в любых регистрах.

Mov AX, ES:[DI] – из регистра [DI] выбирается адрес операнда, ищем его в сегменте EXTRA и пересылаем в AX.

Базовую адресацию используем, когда в регистре находится адрес начала структуры данных (вектора, строки и т. д.), а доступ надо осуществить к какому либо элементу этой структуры (Mov AX,4[BP] – содержимое является адресом операнда в AX). Другое применение – это доступ из подпрограмм к параметрам, переданных в STACK. Для нахождения элементов массива Для двумерных массивов и массивов записи Расширенный режим (используется в процессорах выше i386).