Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

П.1.2. Демонстрационные файлы





В данном приложении приводятся файлы, используемые при выполнении заданий к лабораторной работе № 1. Файл hello.exe может быть запущен на исполнение для отработки простого диалога с программой, так и загружен в отладчик TD, для изучения возможностей последнего при отладке ассемблерных программ. Файлы из группы – Mov.asm, Arithmet.asm Logical.asm, LoopCall.asm – демонстрируют применение соответствующей группы команд с использованием различных видов адресации. Поэтому после трансляции их загружают только в TD с целью просмотра форматов машинных команд процессора при изучении принципов их кодирования.

%TITLE " Демонстрационный файл Hello.asm "

IDEAL

MODEL small

STACK 256

DATASEG

Promt DB 'Это время после полудня? (Да/Нет – y/n)$'

GoodMorning DB 13, 10, 'Доброе утро! ', 13, 10, '$'

GoodAfternoon DB 13, 10, 'Здравствуйте! ', 13, 10, '$'

CODESEG

Start: mov ax, @data; Установка в ds адреса сегмента

mov ds, ax; данных

mov dx, OFFSET Promt; Сообщение-запрос

mov ah, 9; Функция Dos вывода сообщения

int 21h; на экран

mov ah, 1; Функция Dos ввода символа с

int 21h; клавиатуры

cmp al, 'y'; y?

jz IsAfternoon; да, время после полудня

cmp al, 'n'; n?

jz IsMorning; нет, до полудня

IsAfternoon: mov dx, OFFSET GoodAfternoon; Указание на " Здравствуйте"

jmp SHORT Disp

IsMorning: mov dx, OFFSET GoodMorning; Указание на " Доброе утро"

Disp: mov ah, 9; Функция Dos вывода сообщения на

int 21h; экран

Exit: mov ax, 4C00h; Функция DOS- выход из программы

int 21h; Вызов DOS. Останов программы.

END Start; Конец программы/точка входа

%TITLE " Команды MOV и режимы адресации. Файл mov.asm "

IDEAL

MODEL small

STACK 256

value = 528

DATASEG

b_x DB 1, 2, 4

w_x DW 8, 16, 32, 64

Label b_var byte

w_var DW 1234h; Число в памяти: 34h(мл. байт): 12h(ст. байт)

CODESEG

Start: mov ax, @data; Установка в ds адреса

mov ds, ax; сегмента данных.

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

mov al, 255; 255=0FFh-беззнаковое число

mov ah, -1; [4]; -1=0FFh-отрицательное число

mov ax, value/5+20; [5]; Загрузка в ах константного выражения

mov bx, offset w_x;; [6]; Адрес переменной w_x в bx (bx=0003h)

; Регистровая и прямая адресации. Символьная переменная, заключённая в квадратные

; скобки (например [b_x]), – выполняет роль адреса этой переменной в памяти

mov dl, al; [7]

mov al, [b_x]; В al занести содержимое переменной b_x, т. е. al=b_x[0]=01h.

mov dx, [w_x]; dx=w_x[0]=0008h.

mov si, [w_var]; si=1234h

mov al, [b_var]; al=[b_var]=34h

mov ah, [b_var+1]; ah=[b_var+1]=12h

; Косвенная регистровая.

mov cx, [bx]; [13]; cx=w_x[0]=0008h, т.к. bx=offset w_x

mov [word bx], -2; [14]; w_x[0]= -2=0FFFEh.

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

mov ax, [bx+2]; [15]; ax=w_x[1]=16=0010h.

mov [word bx+2], 24; [16]; w_x[1]=24=0018h.

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

mov si, 1

mov al, [si+b_x]; [18]; al=[b_x+1]=02h.

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

inc si; si=2

mov bx, 1; bx=2

mov ax, [bx+si+w_x]; [21]; ax=[4+w_x]=32=0020h.

mov [word bx+si+w_x], 128; [22]; w_x[2]=128=0080h.

; Применение команды lea

lea bx, [w_x+si]; [23]; bx=offset w_x+si=offset w_x[1]=005h.

Exit: mov ax, 4C00h; Функция DOS- выход из программы.

int 21h; Вызов DOS. Останов

END Start; Конец программы/точка входа.

%TITLE " Команды сложения, умножения и деления. Файл arithmet.asm "

IDEAL

MODEL small

STACK 256

DATASEG

op_1 DD 11112222h

op_2 DD 3333DDDEh

b_dst DB 32; 20h

b_src DB 64; 40h

w_src DW 512; 200h

CODESEG

Start: mov ax, @data; Установка в ds адреса

mov ds, ax; сегмента данных.

; Сложение операндов из двойных слов.

mov di, offset op_1

mov si, offset op_2

mov ax, [di]; Low(op_1)®ax.

add ax, [si]; [6]; Low(op_1)+Low(op_2)=Low(sum).

mov [di], ax; Сохранение Low(sum).

mov ax, [di+2]; High(op_1)®ax.

adc ax, [si+2]; [9]; High(op_1)+High(op_2)+cf=High(sum).

mov [di+2], ax; Сохранение High(sum).

; Умножение и деление.

mov al, [b_dst]; al=32=20h.

Push al

mul [b_src]; [13]; ax al*[b_src]- беззнаковое умножение: " 8*8=16"

neg [b_src]; [14]; [b_src]0-[b_src]

pop al

imul [b_src]; [16]; ax al*[b_src]- знаковое умножение: " 8*8=16"

idiv [b_src]; [17]; {al= Quot (ax/[b_src]), ah=Rem (ax/[b_src])} – знако-

; вое деление: " 16: 8=8"

cbw; al®ax (со знаком). В данном случае ax> 0

mul [w_src]; [19 ]; dx: axax*[w_src]- беззнаковое умножение: " 16*16=32"

idiv [w_src]; [20 ]; {axQuot (dx.ax/w_src), dxRem (dx.ax/w_src)} –

; знаковое деление в формате: " 32: 16=16". Так как операнды положительные, то такой же

; результат можно было бы получить и с помощью команды div

Exit: mov ax, 4C00h; Функция DOS -выход из программы.

int 21h; Вызов DOS. Останов.

END Start; Конец программы/точка входа.

%TITLE " Логические команды и команды сдвига. Файл logical.asm "

IDEAL

MODEL small

STACK 256

DATASEG

source DW 0ABh

w_mask DW 0F0h

oper DB 0AAh; 176

CODESEG

Start: mov ax, @data; Установка в ds адреса сегмента

mov ds, ax; данных.

mov ax, [source]; Занести в ax, bx, cx, [source]=0ABh

mov bx, ax

mov cx, ax

; Стандартное применение логических команд

and ax, [w_mask]; [6]; Стирание соответствующих битов

or bx, [w_mask]; [7]; Установка соответствующих битов в " 1"

xor cx, [w_mask]; Инвертирование соответствующих битов

xor bx, bx; bx=0. Гашение регистра

; Циклические сдвиги.

rol [oper], 1; [10]; [oper]=55, cf=1.

ror [oper], 1; [oper]=AA, cf=1.

rcl [oper], 1; [12]; [oper]=55, cf=1.

rcr [oper], 1; [oper]=AA, cf=1.

; Нестандартное применение – быстрое деление положительного числа сдвигами вправо.

mov al, 0Eh; al=0Eh=14

sar al, 1; [15]; al=07, cf=0,

sar al, 1; al=03, cf=1,

sar al, 1; al=01, cf=1,

sar al, 1; al=00, cf=1.

; Быстрое умножение сдвигами влево положительного числа: A=10*x=(4+1)*2*x; x=al.

mov al, 2; al=2

mov bl, al

sal al, 1; [21]; *2,

shl al, 1; *4,

add al, bl; *(4+1),

shl al, 1; *10, al=10*x=20=14h.

Exit: mov ax, 4C00h; Функция DOS -выход из программы.

int 21h; Вызов DOS. Останов.

END Start; Конец программы/точка входа.

%TITLE " Цикл с подпрограммой. Файл LoopCall.asm "

; В программе демонстрируется организация цикла на основе команды Loop в процессе деле-

; ния каждого элемента массива Array на постоянное число с использованием соответствую-

; щей процедуры Divide

IDEAL

MODEL small

STACK 256

DATASEG

Array DB 20, 25, 30, 35, 40

LengArray = $-Array; длина строки

CODESEG

Start: mov ax, @data; Установка в ds адреса сегмента

mov ds, ax; данных.

mov si, offset Array

mov cx, LengArray

L1: mov al, [si]; alтекущий элемент строки.

call Divide; [6]; Выполнение процедуры деления на 5.

mov [si], al

inc si

loop L1; [9]; Повторить сх раз

Exit: mov ax, 4C00h; Функция DOS -выход из программы.

int 21h; Вызов DOS. Останов.

; Подпрограмма деления Divide на 5. Вход: al-значение, предназначенное для деления.

; Выход: al-результат деления.

PROC Divide near; Оператор near можно не указывать, т.к. модель

; памяти Small предполагает все переходы близкими

push bx

xor ah, ah; Подготовка ah: al как 16-битовое

mov bl, 5; делимое, а bl- 8-битовый делитель.

div bl; al< quot(ax/bl), ah< -rem(ax/bl)

pop bx

ret; [18]; Возврат из процедуры

ENDP Divide

END Start; Конец программы/точка входа.







Дата добавления: 2014-11-10; просмотров: 609. Нарушение авторских прав; Мы поможем в написании вашей работы!




Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


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


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Растягивание костей и хрящей. Данные способы применимы в случае закрытых зон роста. Врачи-хирурги выяснили...

ФАКТОРЫ, ВЛИЯЮЩИЕ НА ИЗНОС ДЕТАЛЕЙ, И МЕТОДЫ СНИЖЕНИИ СКОРОСТИ ИЗНАШИВАНИЯ Кроме названных причин разрушений и износов, знание которых можно использовать в системе технического обслуживания и ремонта машин для повышения их долговечности, немаловажное значение имеют знания о причинах разрушения деталей в результате старения...

Различие эмпиризма и рационализма Родоначальником эмпиризма стал английский философ Ф. Бэкон. Основной тезис эмпиризма гласит: в разуме нет ничего такого...

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

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

Ведение учета результатов боевой подготовки в роте и во взводе Содержание журнала учета боевой подготовки во взводе. Учет результатов боевой подготовки - есть отражение количественных и качественных показателей выполнения планов подготовки соединений...

Studopedia.info - Студопедия - 2014-2025 год . (0.01 сек.) русская версия | украинская версия