Сборка Intel 8086 - возведение в квадрат регистра - PullRequest
3 голосов
/ 19 июля 2010

В принципе, возведение в квадрат значения регистра не сложно:

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?

Ответы [ 2 ]

3 голосов
/ 19 июля 2010

Да, mul ax переводит ax*ax в dx:ax.

1 голос
/ 04 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...