Лабораторная работа 0. Необходимые пояснения




Лабораторная работа 0

Цель. Освоение четырёх этапов создания программы.

Работа осуществляется с использованием средств ассемблирования и средств отладки.

 

Необходимые пояснения

Этап 1. Создание текста исходного модуля программы. С помощью любого текстового редактора ввести текст исходного модуля программы, осуществляющей, во-первых, перемещение линейного массива цифр, отображаемого в виде одной n-байтной строки, в другой массив, отображаемый в виде другой строки и, во-вторых, выдающей на экран дисплея одну из перемещаемых цифр и ФИО автора программы. Перемещение адресуемых байтов, данных осуществить, последовательно, начиная с последнего байта исходной строки, содержимое которого перемещается в первый байт результирующей строки. Цифру, выводимую на экран, необходимо предварительно преобразовать в ASCII код. Для ввода текста программы необходимо вызвать программы-оболочки Total Commander или FAR и нажать сочетание клавиш SHIFT+F4. После нажатия этих клавиш нужно задать имя программы с расширением asm, например, nameprog.asm и нажать клавишу ENTER. Далее ввести текст исходного программного модуля и сохранить его в файле nameprog.asm.

Этап 2. Построение объектного модуля, обладающего возможностью дальнейшей отладки с помощью программы td.exe. Для достижения этой цели необходимо задать следующую командную строку.

>TASM/z/zi/l nameprog.asm

Можно не набирать.asm, используя правило умолчания. В результате выполнения этого этапа создается и сохраняется файл nameprog.obj.

Этап 3. Построение исполняемого модуля, обладающего возможностью дальнейшей отладки программы с помощью программы td.exe. Для достижения этой цели необходимо задать следующую командную строку.

>TLINK/i/m/l/s/v nameprog.obj

Можно не набирать .obj, используя правило умолчания. В результате выполнения этого этапа создается и сохраняется файл nameprog.exe.

Этап 4. Осуществить отладку созданной программы, используя программу td.exe, а при отладке использовать окно наблюдения WATCHES.

Возможный вариант исходного текста программы приводится ниже.

 

TITLE LAB2

data segment

a DB 0,1,2,3,4,5,6,7

b DB 8 dup(?)

auth DB 'IVAN','$'

message DB 'NAZMITE KNOPKU DLYA VIHODA $'

data ends

code segment

assume cs:code,ds:data

begin:

mov ax, data

mov ds, ax

mov cx, 8

lea si,a

lea di,b

label1:

mov al, [si]

mov [di], al

inc si

inc di

loop label1

mov dl,b+2

or dl,30h

mov ah,02h

int 21h

mov ah,09h

lea dx,auth

int 21h

lea dx,message

int 21h

mov ah,1

int 21h

mov ax, 4c00h

int 21h

code ends

END begin

 

Возможно упрощение описания сегментов. Для этого нужно определить модель используемой памяти. Пусть программа (код) располагается в одном сегменте, а данные и стек располагаются в другом сегменте. Такая модель памяти называется SMALL. Пример использования, упрощенного описания сегментов приведен ниже.

 

TITLE LAB2

.Model Small

.STACK 100h

.Data

a DB 0,1,2,3,4,5,6,7

b DB 8 dup(?)

auth DB 'IVAN','$'

message DB 'NAZMITE KNOPKU DLYA VIHODA $'

.Code

begin:

mov ax, data

mov ds, ax

mov cx, 8

lea si,a

lea di,b

label1:

mov al, [si]

mov [di], al

inc si

inc di

loop label1

mov dl,b+2

or dl,30h

mov ah,02h

int 21h

mov ah,09h

lea dx,auth

int 21h

lea dx,message

int 21h

mov ah,1

int 21h

mov ax, 4c00h

int 21h

END begin


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

 

ИЗУЧЕНИЕ АРИФМЕТИЧЕСКИХ КОМАНД

 

Краткие сведения

Состав арифметических команд микропроцессоров 80х86 представлен в таблице 1.1

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

 

Таблица 1.1

Название Мнемоника, формат Комментарий
Суммирование ADD DST,RST dst:= (DST)+(RST)
Суммирование с переносом ADC DST,RST dst:= (DST)+(RST)+(CF)
Вычитание SUB DST,RST dst:= (DST)-(RST)
Вычитание с переносом SBB DST,RST dst:= (DST)-(RST)-(CF)
Умножение со знаком IMUL SRS Если SRS байт, то AX:=(AL)´(SRS) если SRS слово, то {DX:AX}:=(AX) ´(SRS)
Умножение без знака MUL SRS То же, что IMUL для операндов без знака
Деление со знаком IDIV SRS AX:= ent { (DX:AX} / (SRS) }
Деление без знака DIV SRS То же, что IDIV для операндов без знака

 

 

    Таблица 1.2
Обозначение Определение Команды проверки
SF Старший бит результата (знак) JS <address>, JNS <address>
ZF “1” если результат равен нулю JZ <address>, JNZ <address>
CF “1” если есть перенос из старшего разряда при сложении или вычитании; изменяется в операциях сдвига JC <address>, JNC <address>
OF “1” если есть переполнение JO <address>, JNO <address>
PF “1” если сумма единиц в коде четная JP <address>, JNP <address>
AF “частичный перенос” (из младшей тетрады) автоматически учитывается в операциях десятичной коррекции

 


Команды оперируют со словами или байтами, причем ассемблер выбирает соответствующий код операции в зависимости от используемого имени регистра (AX - слово, AL либо AH - байт, B, C, D -аналогично). Однако используя команды сложения и вычитания, учитывающие переносы (ADC и SUBB) можно обеспечить обработки операндов произвольной длины.

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

Программист может принять слово как целое без знака в интервале [0...216-1] или как число со знаком в интервале [-215... + 215-1]. Аналогично для двойных слов без знака интервал составит [0...232-1], а для двойных слов со знаком [-231... + 231-1].

Пример программы сложения двух 32-битовых аргументов представлен на рис 1.1. В примере один из аргументов - двойное слово 0FAC8000h - задан непосредственно, другой аргумент и результат операции находятся в паре регистров AX и BX. Если суммы чисел, представленных младшими 16 битами, меньше чем 216, то перенос не возникает и младшие и старшие части двойных слов складываются независимо. В противном случае после сложения младших слов устанавливается флаг переноса, который учитывается при сложении старших слов в команде ADC.

ADD AX,8000h
ADC BX,0FACh
  Пример 1 Пример 2
Первый операнд 0FAC 8000h 0FAC 8 000h
Второй операнд   7505h   A524h
Перенос    
Результат   F505h 151E 2524h

 

Рис. 1.1

 

Умножение чисел, в большем диапазоне представления, выполняется за счет перемножения частей слов, представляющих аргументы и суммирования частичных произведение с учетом их относительных весов и возникающих переносов. на рис.1.2 представлена программа умножения 32-разрядных чисел и формированием 64-разрядного результата. Подобно можно организовать деление чисел в расширенном диапазоне представления.

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

В упакованном BCD - формате число записано по две цифры в байте. Десятичная цифра занимает четыре бита - тетраду. Сложение и вычитание, умножение и деление в арифметическом устройстве процессора выполняются так, что подразумевается двоичное кодирование. Однако команды десятичной коррекции, список которых приведен в таблице 1.3 позволяют на основе “частичных переносов” скорректировать результаты в соответствии с правилами десятичной арифметики.

 

; Умножение 32 битовых аргументов, находящихся в памяти
; первый сомножитель расположен с адреса DPX, второй с DPY
; Результат - 64 бита (4 слова), в памяти с адреса DPZ  
MOV AX, [DPX] ; (DPX)® AX
MUL [DPY]  
MOV [DPZ], AX ; Low [(DPX)´(DPY)] ® DPZ
    : младшее слово результата
MOV CX, DX ; High[(DPX)´(DPY)] ® CX
MOV AX, [DPX+2]  
MUL [DPY]  
MOV BX, DX ; High [(DPX+2) ´ (DPY)] ® BX
ADD CX, AX ; (CX) + Low[(DPX+2)´(DPY)] ® CX
ADC BX, 00 ; (BX) + (CF) ®BX
MOV AX, [DPX]  
MUL [DPY+2]  
ADD CX, AX ; (CX)+ Low[(DPX)´(DPY+2)] ® CX
ADC BX, DX ; (BX)+ High[(DPX)´(DPY+2)] ® BX
MOV [DPZ+2], CX ; второе слова результата
MOV CX, 00  
ADC CX,00 ; Запомнить перенос от сложения частичных сумм в регистре CX
MOV AX, [DPX+2]  
MUL [DPY+2] ; умножение старших слов сомножителей
ADD AX, BX  
MOV [DPZ+4], AX ; запись третьего слова результата
ADC DX, CX  
MOV [DPZ+6], DX ; запись четвертого слова результата
     
Рис.1.2. Умножение с двойной точностью; High и Low - соответственно старший и младший байты кода произведения

 

Таблица 1.3

Название Мнемоника Комментарий
Коррекция сложения для упакованного формата DAA Сумма, находящаяся в AL, корректируется до упакованного ВСD формата
Коррекция вычитания для упакованного формата DAS Разность, находящаяся в AL, корректируется до упакованного ВСD формата
Коррекция сложения для неупакованного формата AAA Сумма, находящаяся в AL, корректируется до не упакованного ВСD формата, бит коррекции переносится в АН
Коррекция сложения для неупакованного формата AAS Разность, находящаяся в AL, корректируется до не упакованного ВСD формата, бит коррекции переносится в АН
Коррекция умножения для неупакованного формата AAM Произведение, находящееся в AL, корректируется до не упакованного ВСD формата, старшая цифра переносится в АН
Коррекция деления для неупакованного формата AAD AL:= 10´(AL)+ AH; AH:=0

Пример программы сложения двух чисел в упакованном BCD-формате представлен на рис.1.3. Здесь же приведена таблица состояний изменений в процессе исполнения программы регистра AL и флагов для случая, когда первый аргумент равен 183410 и хранится в памяти в ячейках BCD1 - BCD1 + 1, а второй равен 278910 и хранится в памяти в ячейках BCD2 - BCD2+1. Результат заносится в память.

 

  КОМАНДА   Комментарий Состояния регистра AL и флагов в рассматриваемом примере
      AL CF AF
MOV AL,[BCD1]   34d - -
ADD AL,[BCD2] Low(BCD1) + Low(BCD2)® AL BDh    
DAA   коррекция 23d    
MOV [BCD3],AL AL® память 23d    
MOV AL,[BCD1+1]        
ADD AL,[BCD2+1] High(BCD1) + High(BCD2) + CF®AL 40h    
DAA   коррекция 46d    
MOV [BCD3],AL AL® память 46d    

 

Рис. 1.3 Сложение в упакованном формате

 

Умножение и деление в упакованном формате не определены.

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

Умножение в неупакованном формате выполняется путем вычисления частичных произведений цифр сомножителей и суммирование частичных сумм с учетом разрядных весов. Правило можно проиллюстрировать на примере умножения двузначных чисел:

 

    a1 a0
    b1 b0
____________________
  c02 c01 c00
c12 c11 c10  
____________________
c3 c2 c1 c0

 

Рис. 1.4 где сij- младшая цифра десятичного числа, вычисляемого по выражению

a i ´ bj + Ri-1, j, а Ri-1, j -старшая цифра произведения a i-1 ´ bj

 

Подготовка к работе

1.2.1. Изучить систему арифметических команд процессоров семейства 80х86.

1.2.2 Приготовить тексты программ и ручную прокрутку исполнения алгоритмов в соответствии с индивидуальными заданиями (см. п. 1.3.3, 1.3.8 и 1.3.9).

1.2.3. Приготовить таблицы для записи результатов выполнения работы.

Порядок выполнения работы

1.3.1 Запустить симулятор микропроцессора (программа симулятора может изменяться в зависимости от платформы, на которой выполняется работа).

1.3.2 Ознакомиться с основными функциями симулятора.

1.3.3 Ввести программу вычисления выражения по заданию преподавателя (одна из строк таблицы 1.5) в таблице приняты обозначения:

С и D - непосредственные операнды, A и B - содержимое регистров. Все аргументы - один байт. Обратите внимание на то, что произведение двух однобайтных чисел дает двухбайтный результат.

1.3.4 записать в таблицу результатов (форма таблицы соответствует таблице 1.4) адреса, мнемоники команд и их двоичные коды. Выделить основные поля кодов операций.

1.3.5 занести в регистры переменных данные в соответствии с колонкой П1 таблицы 1.5, предварительно преобразовав их в шестнадцатеричную форму.

1.3.6 Запустить программу в пошаговом режиме, занося в таблицу 1.4 состояния изменяющихся регистров и комментарий подобно приведенному образцу.

1.3.7 Выполнить п. п. 1.3.5 и 1.3.6, используя данные из колонки П2 индивидуального задания. Обратить внимание на возникающие эффекты переполнения.

1.3.8 Выполнить п. п. 1.3.3 - 1.3.6, используя данные из колонки П3 индивидуального задания. Исходная программа должна быть модифицирована так, чтобы обеспечить обработку операндов в более длинном формате.

1.3.9 Ввести программу вычисления выражения в соответствии с индивидуальным заданием из таблицы 1.6, используя команды десятичной коррекции. В таблице 1.6 принято: А и В - содержание регистров, D - непосредственный операнд.

Содержание отчета

В отчете должны быть представлены тексты программ и результаты их трассировки в форме табл.1.4.

Таблица 1.4 Таблица результатов исполнения программы

(ОБРАЗЕЦ)

 

Адрес Мнемокод Двоичный код Изменения регистров Комментарий
. . 0100H       ADD AX,7000     байт 1: 00000000 (опер. сложения) байт2:11010100 (рег АХ и непоср. операнд) Байты 3,4 - операнды   AX=5FFFh AX=CFFFh CF=OF=0     правильное исполнение
  ADD AX,4FFF то же АХ=1FFE CF=OF=1 переполнение

 

Индивидуальные задания

Таблица 1.5

 

Вычисляемое выражение Значения переменных
    П1 П2 П3
  A´ C + B´D В этом задании при выполнении п.1.3.8 можно ограничиться вычислением только младшего слова суммы A=16 B=-8 C=8 D=11 A=200 B=156 C=240 D=188 A=512 B=-100 C=640 D=44
  (A+B) ´(C+D) A=16 B=8 C=24 D=-7 A=100 B=56 C=7 D=20 A=100 B=2049 C=81028 D=8192
  A´ B - C´D в этом задании при выполнении п.1.3.8 можно ограничиться вычислением только младшего слова разности A=127 B=64 C=124 D=-18 A=200 B=240 C=-156 D=188 A=8192 B=16387 C=88193 D=16384
  (A + B - D) ´ C A=100 B=76 C=65 D=20 A=100 B=66 C=97 D=-30 A=2047 B=255 C=8193 D=1040
  A´ (B - D ´ C) A=96 B=127 C=5 D=9 A=96 B=96 C=-5 D=9 A=16397 B=4096 C=-5 D=1148

 

 

Таблица 1.6

 

Выражение Формат данных A B D
  длина значение длина значение длина значение
  A´B-D неупак. 2 цифры   1 цифра   3 цифры  
  A´D+B неупак. 2 цифры   3 цифры -438 1 цифра  
  A/D+B упак. 2 цифры   2 цифры   1 цифра  
  A+B-D упак. слово   слово   слово  
  A-B+D упак. слово -814 слово   слово  

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: