2010-07-18 2 views
3

В принципе, возведение в квадрате значения регистра не трудно:Intel 8086 Сборка - Возводя Реестр

mov ax, [var] 
mov cx, [var] 
mul cx   // square of answer is in DX:AX 

Но я начал думать - курс, который я учусь ассамблея для эффективности призов очень высоко; разница даже в одной строке меньше может стоить до 5 баллов.

Я понимаю, что это микро-оптимизации, но будет следующий код выполняет один и тот же путь ?:

mov ax, [var] 
mul ax   // is answer still in DX:AX ? 

Я полагаю гораздо более простой способ выразить свой вопрос: AX (или AL/AH) действительный параметр для команд mul и imul в сборке 8086?

+0

Спасибо за форматирование кода, GregS. Запамятовал. –

ответ

1

Вы можете использовать mul ax, это будет делать DX: AX = AX * AX , но обратите внимание, что в этом случае вы потеряете значение, которое у вас было в AX, поэтому, если вам нужно использовать это значение снова, то лучше использовать его опция mul bx, поскольку BX остается неповрежденным.

Кроме того, если вы используете мул аль или (мул ах) вы не будете делать AX = AX AX, но AX = AL AL (или AX = AL * AH), так что если значение в AX больше чем 255 вы Арен умножая AX, потому что вы полностью игнорируете и перезаписываете более высокую часть значения (вы игнорируете AH).

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