Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
asm.doc
Скачиваний:
6
Добавлен:
09.11.2019
Размер:
913.41 Кб
Скачать

Команда зміни знаку операнда neg

Схема команди: NEG джерело Алгоритм роботи:

  • виконати віднімання 0 – джерело і помістити результат на місце джерела;

  • якщо джерело=0, те його значення не міняється.

Призначення: зміна знака (одержання двійкового доповнення) джерела.

Стан ознак після виконання команди: якщо результат нуль CF встановлюються 0 та 1 в противному випадку, значення OF, SF, ZF, AF та PF – залежить від результату роботи команди .

Команда порівняння – СМР.

Схема команди :СМР приймач, джерело

Призначення: порівняння операндів.

Алгоритм роботи: від операнда приймач віднімається операнд джерело, без збереження результату віднімання.

Стан ознак після виконання команди: За результатами команда змінює ознаки(в регістрі ознак) CF, PF, AF, ZF, SF та OF.

8. Обчислення цілих арифметичних виразів.

Програмування обчислення арифметичний виразів мовою асемблера у порівнянні з програмуванням виразів мовами вищого рівня є достатньо рутинним. З іншої сторони найбільш ефективний та оптимальний код обчислення арифметичний виразів можна запрограмувати за допомогою мови асемблера.

Розглянемо особливості програмування арифметичних виразів мовою асемблера:

  • По-перше, правильно задати формат команди та операнди приймач , та джерело якщо вони присутні. Формат визначає яким типами операндів можна користуватися в програмі, а також в який з операндів записується результат.

  • По-друге, задати тип операнда, який може бути визначений явно або неявно. Виникає необхідність визначати тип операнди, які знаходяться в пам’яті, а також тип безпосередніх операндів (сталих). Для операцій з двома операндами тип одного з операндів можна визначатися іншим. Явне завдання типу задається за допомогою операцій :

BYTE PTR – перетворення до типу байт

WORD PTR – перетворення до типу слово

DWORD PTR – перетворення до типу подвійне слово.

Наприклад.

inc WORD PTR a ; де a – комірка в сегменті даних.

dec BYTE PTR [SI] ; SI – зміщення в сегменті даних.

  • По-третє, при програмуванні арифметичних виразів необхідно враховувати стан ознак після виконання команд. Так яка при виконання арифметичних операцій можливе переповнення або зникнення порядку.

Розв’язування задач за тематикою заняття

Задача 1. Описати символьний рядок “Hello world !“.

Розв’язування. Описати символьний рядок можна такими способами

mystring db ‘ Hello world !‘

або

mystring db ‘ ‘,’H’,’e’,’l’,’l’,’o’,’ ‘,‘w’,’o’,’r’,’l’,’d’,’ ! ‘

Задача 2. Описати вектор, який складається з n (n=100) елементів розміром у подвійне слово із заданим початковим значенням A (A=250h).

Розв’язування.

N = 100 ; або N equ 100

A equ 250h ; або A = 250h

vector dd N Dup( A ).

Задача 3. Описати матрицю M (n*n), яка складається з елементів розміром у 8 байтів із заданим початковим значенням.

Розв’язування.

N = 10

ELEMENT = 12.45e4 ; або ELEMENT = 124500

M dq N * N Dup( ELEMENT ).

Задача 4. Знайти об’єктний код фрагмента сегмента даних у шістнацяткові системі числення

a dw 403fh

c dw 256

d dd 300

Розв’язування. Сталі 256 та 300 переведемо у шістнацяткову систему числення тобто

a dw 403fh

c dw 256 ; = 0100h

d dd 300 ; =0000012ch

В пам'яті ЕОМ дані розміром в слово і більше розміщуються по байтам в порядку зростання адресів та розрядів даних, об'єктний код у має вигляд :

3f 40 00 01 2c 01 00 00.

Задача 5. Написати процедуру для обчислення виразу :

a = ((a+1)+(c-d)+(d-1))+5-b,

де a= 657, b=265, c=738, d= 273.

Розв’язування.

Data Segment para 'code'

a dw 657

b dw 265

c dw 738

d dw 273

Data Ends

Code Segment para 'code'

Main Proc far

;.................... Основна програма.....................................

Main Endp

Calc Proc near ; Процедура обчислення виразу.

mov AX,a ; Записати в регістр AX число а.

inc AX ; Збільшити вміст регістра AX на 1.

mov CX,c ; Записати в регістр CX число с.

sub CX,d ; Відняти d від вмісту регістра CX

mov DX,d ; Записати в регістр DX число d.

dec DX ; Зменшити вміст регістра DX на 1.

add AX,CX ; Додати до вмісту регістра AX

add AX,DX ; вміст регістрів CX і DX.

add AX,5 ; Додати 5 до вмісту регістра AX.

sub AX,b ; Відняти b від вмісту регістра AX.

mov a,AX ; Записати вміст регістру AX в а.

ret ; Повернення з процедури.

Calc Endp ; Директива кінця процедури.

Code Ends Main

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]