Работа 4. Арифметические операции — КиберПедия 

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Работа 4. Арифметические операции

2022-10-05 44
Работа 4. Арифметические операции 0.00 из 5.00 0 оценок
Заказать работу

Целью данной работы является изучение основных команд языка Assembler для выполнения целочисленных арифметических операций процессором Intel.

Форматы и назначение команд

Сложение двоичных чисел (ADD)

Действие. Производит сложение двух операндов. Операнды могут быть однобайтовыми или двухбайтовыми. Результат помещается по адресу первого операнда.

Формат команды.

  Код Операнд1 Операнд2
<метка>: add r r,m
<метка>: add r,m v

Флаги. Команда воздействует на флаги A, C, O, P, S, Z.

Примеры:

add AX,10

add BX,AX

add AX,[DI]

add AL,AH

add MEMX,25

Вычитание двоичных чисел (SUB)

Действие. Производит вычитание двух операндов. В остальном команда sub аналогична команде сложения add.

 

Сложение с переносом (ADC)

Действие. Используется при сложении многословных величин для учета бита переноса в последующих фазах операции. Если флаг C установлен в 1 (например, был перенос из старшего бита в результате предыдущей операции сложения), то перед выполнением сложения к первому операнду предварительно добавляется 1.

В остальном команда adc аналогична команде сложения add.

Вычитание с заемом (SBB)

Действие. Используется при вычитании многословных величин для учета бита переноса в последующих фазах операции. Если флаг C установлен в 1 (например, был перенос из старшего бита в результате предыдущей операции вычитания), то перед выполнением вычитания из первого операнда предварительно вычитается 1.

В остальном команда sbb аналогична команде сложения sub.

Умножение (MUL)

Действие. Выполняет умножение беззнакового множимого (8 или 16 бит) на беззнаковый множитель (8 или 16 бит). Для 8-битового умножения множимое предварительно должно быть загружено в регистр AL, а множитель возможен в однобайтовом регистре или в байте памяти, на которые указывает единственный операнд команды. Произведение получается в регистре AX. Для 16-битового умножения множимое должно находиться в регистре AX, а множитель возможен в двухбайтовом регистре или в слове памяти. Произведение получается в регистровой паре DX:AX.

Формат команды.

  Код Операнд
<метка>: mul r,m

Флаги. Команда воздействует на флаги C, O (флаги A, P, S, Z не определены).

Деление (DIV)

Действие. Выполняет деление беззнакового делимого (16 или 32 бит) на беззнаковый делитель (8 или 16 бит). Для 16-битового деления делимое должно быть предварительно помещено в регистр AX, а 8-битовый делитель - в однобайтовом регистре или байте памяти, на которые указывает единственный операнд команды. Частное от деления получается в регистре AL, а остаток - в регистре AH. Для 32-битового деления делимое должно находиться в регистровой паре DX:AX, а 16-битовый делитель возможен в двухбайтовом регистре или в слове памяти. Частное от деления получается в регистре AX, а остаток - в регистре DX.

Формат команды.

  Код Операнд
<метка>: div r,m

Флаги. Команда воздействует на флаги A, C, O, P, S, Z.

Примеры:

;16-битное деление

mov AX,223

mov CL,27

div CL

;32-битное деление

mov DX,0Fh;старшие разряды делимого

mov AX,1C20h;младшие разряды делимого

mov BX,1Fh;делитель

div BX

Знаковое умножение и знаковое деление (IMUL и IDIV)

Операции полностью аналогичны командам mul и div, за исключением того, что старшие биты в операндах рассматриваются как знаковые.

Инкремент (INC)

Действие. Прибавляет 1 к байту или слову в регистре или в памяти.

Формат команды.

  Код Операнд
<метка>: inc r,m

Флаги. Команда воздействует на флаги A, O, P, S, Z..

Декремент (DEC)

Действие. Вычитает 1 из байта или слова в регистре или в памяти.

Формат команды.

  Код Операнд
<метка>: dec r,m

Флаги. Команда воздействует на флаги A, O, P, S, Z..

Сравнение (CMP)

Действие. Сравнивает содержимое двух полей данных. Фактически команда вычитает второй операнд из первого, но содержимое полей не изменяет. Операнды должны иметь одинаковую длину: байт или слово.

Форматы команды.

  Код Операнд1 Операнд2
<метка>: cmp r r,m
<метка>: cmp r,m v

Флаги. Команда воздействует на флаги A, C, O, P, S, Z.

4.2. Отображение арифметических значений (пример программы)

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

Процедура toascii (листинг 4.1) позволяет преобразовывать беззнаковое целое число, заданное в слове, в символьное его представление с любым основанием .

Листинг 4.1

sgascii segment para public 'code'
toascii proc far
;====входные параметры======
;ES:DI - адрес конца поля, куда будет записано символьное представление
;AX - число, представление которого нужно получить
;CX - в какой системе счисления
;=========================

              public toascii;процедура доступна в
                                                      ;других модулях
              assume cs:sgascii,ds:sgascii;данные
                                                                    ;здесь же
              jmp start;обойдем их               
digs      db '0123456789ABCDEF'
start:   push ds;сохраним DS в стеке
              push bx;сохраним BX в стеке
              push si;сохраним SI в стеке
              mov bx,sgascii;загрузим адрес сегмента
              mov ds,bx;в регистр DX
rpl:      dec di   ;позиция для очередного разряда
                xor dx,dx         ;обнулим регистр DX
              div cx                 ;остаток будет смещением
              mov si,dx       ;в таблице символов digs
              mov bl,digs[si];зашлем очередной символ
              mov es:[di],bl;в нужную позицию
                                                      ;представления числа
              cmp ax,0          ;если частное не ноль
              jne rpl  ;продолжим деление
              pop si   ;деление закончили
                   pop bx   ; восстановим регистры
              pop ds
              ret
toascii endp
sgascii ends
   end

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

Листинг 4.2

ds0 segment para public 'data0'
scr0 db 16 dup(' '),'$'
digt dw 45345
ds0 ends
;---------------------------------------
ss0  segment para stack 'stack'
   db 50 dup(?)
ss0 ends
cs0 segment para 'code'
main proc far
   assume cs:cs0,ds:ds0,ss:ss0
   extrn toascii:far
   push ds
   sub ax,ax
   push ax
   mov ax,ds0
   mov ds,ax
;==подготовка и вызов процедуры преобразования

   mov es,ax;в ES адрес сегмента
   lea di,digt;в DI указатель на
   dec di         ;конец строки scr0
   mov ax,digt;в AX - преобразуемое число
   mov cx,10;в CX - основание системы счисления
   call toascii;вызываем процедуру

;==========Вывод строки scr0======
   mov ah,09h
   lea dx,scr0
   int 21h
   ret
main endp
cs0 ends
   end main

4.3. Задания для самостоятельной работы

1. Откомпилируйте и выполните представленную выше программу преобразования числа в символьное представление (листинг 4.1 и листинг 4.2). Попробуйте вывести это же число в различных системах счисления.

2. Напишите программу вычисления целого частного и остатка от деления , используя 8-битный делитель.

3. Выполните ту же программу для делителя, равного 2. Каков результат, почему?

4. Напишите программу вычисления целого частного и остатка от деления , используя 16-битный делитель.

5. Выполните программу из задания 4 для делителя, равного 2. Каков результат, почему? Предложите алгоритм правильного решения этой задачи.

6. Напишите программу вычисления целочисленного выражения с выводом результата на экран:

Выражение x y z
1 25 12 15
2 9616 4B16 0F16
3 0F16 45 1
4 6 E16 -16
5 2 3 20
6 120 2 1016
7 3 10 5
8 7D16 F16 1
9 27116 1916 5
10 265 12 75
11 2E916 1916 5
12 E116 F16 5
13 1916 D16 9
14 2 F16 -10
15 1E16 5 3

 


Поделиться с друзьями:

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

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

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.016 с.