Ошибка при вычитании в ассемблере
я попытался написать код для вычитания(12-23)в ассемблере ,но видимо чего то не хватает и результат 245.Подскажите пожалуйста чего не хватает ?Заранее благодарен. ПС.Я новичок в ассемблере .Прошу прошения если глупый вопрос.Но очень хочется разобраться.
list p=16f877a
#include <p16f877a.inc>
tempa EQU h'020'
tempb EQU h'021'
org 0x00
goto begin
org 0x100
begin
clrw
clrf tempa
clrf tempb
movlw d'12'
movwf tempa
movlw d'23'
movwf tempb
subwf tempa,1
nop
end
Ответы (1 шт):
Все ты делаешь так.
Все ты делаешь так. Просто
12 - 23 = -11Отрицательное число.А как представляются отрицательные числа в памяти современных процов ? В виде дополнения до двух, а такое представление очень удобно
потому что одна и та-же операция сложения или вычитания годится как
для знаковых, так и для беззнаковых чисел. От этого процессор не
знает знаковое число или беззнаковое. Различать их должен
программист.-11знаковое в двоичном виде в байте будет хранится
как11110101245беззнаковое в двоичном виде в байте будет
хранится тоже как11110101Ты должен их различать и никто иной.Т.е. смотришь на
11110101двоичное или что тоже самоеF5шестнавдцатеричное и говоришь себе - я понимаю это число как знаковое и тогда оно-11или я понимаю это число как беззнаковое и тогда оно245А процик оба варианта не различает, он с обоими вариантами работает одними и теми-же операциями ADDWF SUBWF. А отладчик мысли твои читать не умеет и показывает это число как245.Но для тебя, если ты в своей проге понимаешь это число как знаковое оно-11и ничто иное.