CMP и нести флаг

Процессор: MSP430 16 бит RISC

Может ли кто-нибудь объяснить инструкцию CMP с точки зрения того, когда на самом деле установлен флаг переноса ниже. Из мануала сказано,

CMP(.B) src,dst ..... dst - src

Если src не равно dst, будет ли установлен флаг переноса?

cmp    r15, r11
jnc    #1234

person John 41_    schedule 18.06.2017    source источник
comment
Зависит от того, что больше... если r11<r15, то r11-r15<0, следовательно, CF=1.   -  person Jester    schedule 19.06.2017
comment
В этом контексте устанавливается ли флаг переноса только тогда, когда вычитание ( dst - src ), также известное как ( r11 - r15 ), приводит к отрицательному значению?   -  person John 41_    schedule 19.06.2017
comment
Да, это правильно. Обратите внимание, беззнаковая арифметика.   -  person Jester    schedule 19.06.2017


Ответы (1)


Руководство пользователя говорит:

Описание
Операнд-источник вычитается из операнда-адресата. Это делается путем добавления дополнения 1 к источнику + 1 к месту назначения. Результат влияет только на биты состояния в SR.
[…]
Биты состояния
C: Установить, если есть перенос из MSB, в противном случае сбросить

Другими словами, C устанавливается, если есть беззнаковое переполнение.

Это также можно увидеть в инструкциях перехода: JC (прыжок, если перенос) и JHS (прыжок, если выше или такой же) — это одна и та же инструкция, как и JNC (прыжок, если нет переноса) и JLO (прыжок, если ниже).

Пример Если R5 ≥ R6 (без знака), программа продолжает работу с Label2.

CMP R6,R5        ; Is R5 >= R6? Info to C
JHS Label2       ; Yes, C = 1
...              ; No, R5 < R6. Continue
person CL.    schedule 19.06.2017