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



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

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

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

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

Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри: Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

Шов первичный, первично отсроченный, вторичный (показания) В зависимости от времени и условий наложения выделяют швы: 1) первичные...

Разработка товарной и ценовой стратегии фирмы на российском рынке хлебопродуктов В начале 1994 г. английская фирма МОНО совместно с бельгийской ПЮРАТОС приняла решение о начале совместного проекта на российском рынке. Эти фирмы ведут деятельность в сопредельных сферах производства хлебопродуктов. МОНО – крупнейший в Великобритании...

ОПРЕДЕЛЕНИЕ ЦЕНТРА ТЯЖЕСТИ ПЛОСКОЙ ФИГУРЫ Сила, с которой тело притягивается к Земле, называется силой тяжести...

СПИД: морально-этические проблемы Среди тысяч заболеваний совершенно особое, даже исключительное, место занимает ВИЧ-инфекция...

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