Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Команды арифметических операций - файл 1.doc


Команды арифметических операций
скачать (58.5 kb.)

Доступные файлы (1):

1.doc59kb.09.12.2011 02:33скачать

содержание
Загрузка...

1.doc

Реклама MarketGid:
Загрузка...




ЛАБОРАТОРНАЯ РАБОТА №3



ТЕМА: Команды арифметических операций.
ЦЕЛЬ: Рассмотреть набор команд арифметических операций и изучить особенности их применения.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
ADDWF f,d - Сложение W и f;

INCF f,d - Прибавить 1 к f;

INCFSZ f,d - Прибавить 1 к f и пропустить если 0;

DECF f,d - Вычесть 1 из f;

DECFSZ f,d - Вычесть 1 из f и пропустить если 0;

SUBWF f,d - Вычесть W из f;

ADDLW k - Сложить константу с W;

SUBLW k - Вычесть W из константы.
ADDWF - Сложение W и f

Синтаксис: [label] ADDWF f,d

Операнды: 0 ≤ f ≤ 127

d ∈ [0,1]

Операция: (W) + (f) → (dest)

Измен. флаги: C, DC, Z

Код: 00 0111 dfff ffff

Описание:

Сложить содержимое регистров W и 'f'. Если d=0,

результат сохраняется в регистре W. Если d=1, результат

сохраняется в регистре 'f'.

Слов: 1

Циклов: 1

Пример: ADDWF FSR,0

До выполнения команды

W = 0x17

FSR = 0xC2

После выполнения команды

W = 0xD9

FSR = 0xC2.
^ DECF - Вычесть 1 из f

Синтаксис: [label] DECF f,d

Операнды: 0 ≤ f ≤ 127

d ∈ [0,1]

Операция: (f) - 1 → (dest)

Измен. флаги: Z

Код: 00 0011 dfff ffff

Описание:

Декрементировать содержимое регистра 'f'. Если d=0,

результат сохраняется в регистре W. Если d=1, результат

сохраняется в регистре 'f'.

Слов: 1

Циклов: 1

Пример: DECF CNT,1

До выполнения команды

CNT = 0x01

Z = 0

После выполнения команды

CNT = 0x00

Z = 1.
^ DECFSZ Вычесть 1 из f и пропустить если 0

Синтаксис: [label] DECFSZ f,d

Операнды: 0 ≤ f ≤ 127

d ∈ [0,1]

Операция: (f) - 1 → (dest); пропустить если результат равен 0

Измен. флаги: Нет

Код: 00 1011 dfff ffff

Описание:

Декрементировать содержимое регистра 'f'. Если d=0,

результат сохраняется в регистре W. Если d=1, результат

сохраняется в регистре 'f'.

Если результат не равен '0' , то исполняется следующая

инструкция. Если результат равен '0' , то следующая

инструкция не выполняется, команда выполняется за два

цикла. Во втором цикле выполняется NOP.

Слов: 1

Циклов: 1(2)

Пример: HERE DECFSZ CNT,1

GOTO LOOP

CONTINUE •



До выполнения команды

PC = адрес HERE

После выполнения команды

CNT = CNT - 1

Если CNT = 0,

PC = адрес CONTINUE

Если CNT ≠ 0,

PC = адрес HERE + 1
INCF Прибавить 1 к f

Синтаксис: [label] INCF f,d

Операнды: 0 ≤ f ≤ 127

d ∈ [0,1]

Операция: (f) + 1 → (dest)

Измен. флаги: Z

Код: 00 1010 dfff ffff

Описание:

Инкрементировать содержимое регистра 'f'. Если d=0,

результат сохраняется в регистре W. Если d=1, результат

сохраняется в регистре 'f'.

Слов: 1

Циклов: 1

Пример: INCF CNT,1

До выполнения команды

CNT = 0xFF

Z = 0

После выполнения команды

CNT = 0x00

Z = 1.
^ INCFSZ Прибавить 1 к f и пропустить если 0

Синтаксис: [label] INCFSZ f,d

Операнды: 0 ≤ f ≤ 127

d ∈ [0,1]

Операция: (f) + 1 → (dest); пропустить если результат равен 0

Измен. флаги: Нет

Код: 00 1111 dfff ffff

Описание:

Инкрементировать содержимое регистра 'f'. Если d=0,

результат сохраняется в регистре W. Если d=1, результат

сохраняется в регистре 'f'.

Если результат не равен '0' , то исполняется следующая

инструкция. Если результат равен '0' , то следующая

инструкция не выполняется, команда выполняется за два

цикла. Во втором цикле выполняется NOP.

Слов: 1

Циклов: 1(2)

Пример: HERE INCFSZ CNT,1

GOTO LOOP

CONTINUE •



До выполнения команды

PC = адрес HERE

После выполнения команды

CNT = CNT - 1

Если CNT = 0,

PC = адрес CONTINUE

Если CNT ≠ 0,

PC = адрес HERE + 1.
^ SUBLW Вычесть W из константы

Синтаксис: [label] SUBLW k

Операнды: 0 ≤ k ≤ 255

Операция: k - (W) → (W)

Измен. флаги: C, DC, Z

Код: 11 110x kkkk kkkk

Описание: Вычесть содержимое регистра W из 8-разрядной

константы 'k'. Результат сохраняется в регистре W.

Слов: 1

Циклов: 1

Пример 1: SUBLW 0x02

До выполнения команды

W = 1

C = ?

Z = ?

После выполнения команды

W = 1

C = 1 ; результат положительный

Z = 0

Пример 2: До выполнения команды

W = 2

C = ?

Z = ?

После выполнения команды

W = 0

C = 1 ; результат нулевой

Z = 1

Пример 3: До выполнения команды

W = 3

C = ?

Z = ?

После выполнения команды

W = 0xFF

C = 0 ; результат отрицательный

Z = 0.
SUBWF Вычесть W из f

Синтаксис: [label] SUBWF f,d

Операнды: 0 ≤ f ≤ 127

d ∈ [0,1]

Операция: (f) - (W) → (dest)

Измен. флаги: C, DC, Z

Код: 00 0010 dfff ffff

Описание:

Вычесть содержимое регистра W из регистра 'f'. Если d=0,

результат сохраняется в регистре W. Если d=1, результат

сохраняется в регистре 'f'.

Слов: 1

Циклов: 1

Пример 1: SUBWF REG1,1

До выполнения команды

REG1 = 3

W = 2

C = ?

Z = ?

После выполнения команды

REG1 = 1

W = 2

C =1 ; результат положительный

Z = 0

Пример 2: До выполнения команды

REG1 = 2

W = 2

C = ?

Z = ?

После выполнения команды

REG1 = 0

W = 2

C =1 ; результат нулевой

Z = 1

Пример 3: До выполнения команды

REG1 = 1

W = 2

C = ?

Z = ?

После выполнения команды

REG1 = 0xFF

W = 2

C =0 ; результат отрицательный

Z = 0.
ЗАДАНИЕ:

Преобразование двоичного в двоично-кодированный код и наоборот. Двоичное число находится по адресу 20h. Двоично-кодированное число находится по адресу 30h.


ВЫПОЛНЕНИЕ РАБОТЫ:

Код программы:
processor PIC16F627

#include P16f627.inc

radix dec
temp equ 0x20

org 0x00

goto main

org 0x04

goto services
main

clrf 21h

clrf 22h

movlw 100

sub_hun

subwf 20h, f

btfss STATUS, C

goto dub_dec

incf 22h, f

goto sub_hun

dub_dec

addwf 20h, f

movlw 10

sub_dec

subwf 20h, f

btfss STATUS, C

goto move

incf 21h, f

goto sub_dec

move

addwf 20h, f

movf 22h, w

movwf 31h

swapf 21h, w

iorwf 20h, w

movwf 30h
movlw b'11110000'

andwf 30h, w

movwf 32h

swapf 32h, f

movlw b'00001111'

andwf 30h, f

clrf 20h

movlw 10

movf 32h, f

btfsc STATUS, Z

goto sot

plus_des

addwf 20h, f

decfsz 32h, f

goto plus_des

sot

movlw 100

movf 31h, f

btfsc STATUS, Z

goto sum

plus_sot

addwf 20h, f

decfsz 31h, f

goto plus_sot

sum

movf 30h, w

addwf 20h, f
goto main

services

retfie
end
Вывод: в ходе лабораторной работы мы ознакомились c рядом арифметических операций и изучили особенности их применения. Была написана программа реализующая преобразование двоичного кода в двоично-кодированный. Проверка показала правильное кодирование, следовательно, программа удовлетворяет поставленному заданию.






Скачать файл (58.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru