2012-03-07 2 views
0

Скажем, мы имеем следующее:MC68000 сборки умножение

MOVE.L #$1234ABCD,D0 
MOVE.L #$45670012,D1 
MULS D0,D1 

Что будет значение D1? Согласно симулятору mc68000, это будет FFFA146A. Согласно книге, два слова младшего порядка каждого регистра будут умножены, и результат будет сохранен как длинное слово. Следовательно, это будет 0xABCD * 0x0012 = 0xC146A. Согласно этому правилу, D1 должен быть 000C146A. Я замечаю, что значения 146A такие же, как в симуляторе, но откуда берется A, а Fs? Является ли симулятор неправильным?

Спасибо

ответ

2

Я знаю 0 о коде Motorola, но я думаю, что его что-то делать с тем фактом, вы используете подписанный мультипликатор? Попробуйте использовать множитель без знака.

+2

Это, и факт 0xABCD является отрицательным числом в 16-битном дополнении 2s –

+0

получил его, большое спасибо – jazzybazz

+0

Томас прав. MULS предназначен для умножения на подписку. MULU, возможно, неудивительно, мнемоника для беззнакового умножения и даст ожидаемый результат $ C146A. – sjs

 Смежные вопросы

  • Нет связанных вопросов^_^