2012-05-22 2 views
-4

Вот мой код:x86 сборка Какие регистры участвуют в умножение и деление

.data 
     ans1 db 0 
     ans2 db 0 
.data? 
     in1 db 100 dup(?) ; first input value 
     in2 db 100 dup(?) ; second input value 
.code 
start: 
     ; here I have code for input 
     ; I get 2 nums, and I want to multiply and divide them 
     ; here is what I already have to mul/div them: 
     lea eax, in1 
     lea edx, in2 
     imul eax ; multiply in1 and in2 
     mov ans1, eax ; move result to ans1 
     xor eax, eax ; clear register 
     xor edx, edx ; " " 
     lea eax, in1 
     lea edx, in2 
     idiv eax ; divide in1 by in2 
     mov ans2, eax ; move result to ans2 
     lea eax, ans1 
     push eax 
     call StdOut ; print ans1 (I have include instructions at the start) 
     lea ebx, ans2 
     push ebx 
     call StdOut ; print ans2 ("") 

Мой вопрос: 1. Конкретную регистр я помещаю in1 и in2 умножить их? 2. «Разделить их? 3. Где остаток хранится в делении?

И не беспокойтесь об общем заявлении, не могли бы вы просто сказать мне, какие регистры обязательно (как можно ближе) работают в умножении и делении.

ПРИМЕЧАНИЕ: Некоторые может сказать, что этот пост является повторением x86 assembly - masm32: absolute breakdown of multiplication and division, но (поправьте меня, если я ошибаюсь) это уважающее форум сообщества, чтобы сделать новую запись, а не добавлять комментарии к старому и сделать это вне темы.

+2

Правильный ответ на этот вопрос будет таким же, как ответ на связанный вопрос, [RTFM] (http://www.intel.com/content/www/us/en/processors/architectures-software-developer- manuals.html) ... – DCoder

ответ

1

Если вы пишете сборку, вы никогда не должны быть слишком далеко от the reference spec:

Unsigned multiply (AX ← AL ∗ r/m8). 

Сообщает вам все, что вам нужно знать. Результат будет помещен в AX. Источниками являются AL и любой 8-битный регистр или ячейка памяти.

EDIT

Ваш вопрос не/не был отформатирован правильно, ваши вопросы были на одной линии.

Отдел DIV:

Unsigned divide AX by r/m8, with result stored in AL ← Quotient, AH ← Remainder 

серьезно: прочитайте инструкцию.

+0

Как насчет синтаксиса? – Progrmr

+1

@Progrmr Это все в документации. Если вы знакомы с x86, выдержки, которые я опубликовал, - это все, что вам нужно. Если вы этого не сделаете, вам нужно провести некоторое исследование, чтение и обучение, прежде чем публиковать на SO. –

+0

Проблема в том, что программа продолжает закрываться в результате умножения и деления. Я провел исследования и тестирование, я прочитал раздел руководства по 'mul' и' div', я бы не стал публиковать на SO, если бы мог, и если бы я не читал, не исследовал и не тестировал. – Progrmr