Что на самом деле делает инструкция sxt в MSP430? - PullRequest
1 голос
/ 11 января 2020

Я понимаю, что sxt - это инструкция по расширению знака. Но я не понимаю, как это действительно работает. Например, если мой r15 регистр хранит байт 0045, то что sxt r15 сделает с ним?

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Я работал над проблемами, которые часто используют эту инструкцию. Чтобы сжать его до одной функции, я бы написал (используя синтаксис Pythoni c) как:

def sxt(x):
    if x % 256 > 127:    # if top bit of low byte is set
        x |= 0xff00
    else:
        x &= 0x00ff

Это можно было бы написать более компактно и, возможно, более эффективно. Эта версия предназначена для того, чтобы быть наиболее интуитивно понятной для не-asm-natives.

Обратите также внимание, что функция предполагает, что вы передаете входные данные в виде двух байтовых слов, как работает инструкция sxt, 0xhhhh где h - шестнадцатеричный ди git, который вы можете сделать в Python.

1 голос
/ 11 января 2020

Знак инструкции sxt расширяет байт в 16-битное слово, то есть он копирует бит 7 в биты с 8 по 15 и затем соответствующим образом обновляет флаги.

Для вашего примера, sxt будет иметь не влияет, так как для байта 0045 не установлен самый старший бит, поэтому старший байт r15 остается равным нулю.

...