Студопедия — П.1.2. Демонстрационные файлы
Студопедия Главная Случайная страница Обратная связь

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

П.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; просмотров: 586. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

Машины и механизмы для нарезки овощей В зависимости от назначения овощерезательные машины подразделяются на две группы: машины для нарезки сырых и вареных овощей...

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

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

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

ПРОФЕССИОНАЛЬНОЕ САМОВОСПИТАНИЕ И САМООБРАЗОВАНИЕ ПЕДАГОГА Воспитывать сегодня подрастающее поколение на со­временном уровне требований общества нельзя без по­стоянного обновления и обогащения своего профессио­нального педагогического потенциала...

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