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

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

П.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Р,где...

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

Методы анализа финансово-хозяйственной деятельности предприятия   Содержанием анализа финансово-хозяйственной деятельности предприятия является глубокое и всестороннее изучение экономической информации о функционировании анализируемого субъекта хозяйствования с целью принятия оптимальных управленческих...

Образование соседних чисел Фрагмент: Программная задача: показать образование числа 4 и числа 3 друг из друга...

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

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

Конституционно-правовые нормы, их особенности и виды Характеристика отрасли права немыслима без уяснения особенностей составляющих ее норм...

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