Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > деление


Автор: fuckingniger 15.3.2011, 21:28
знаю, что при помощи оператора div
но не понимаю как.
где должно быть делимое , как его туда перенести , где делитель, как его туда перенести. в общем ничего не получается(
На данный момент делимое в регистре dx:ax
Оно является результатом умножения числа на слово.
Делитель находится в стеке(в виде двух слов). является результатом умножения двух слов.
помогите пожалуйста

Автор: Cheloveck 15.3.2011, 22:01
div  <делитель>
Если делитель
  • байт: делимое: ax, частное - al, остаток - ah
  • слово: делимое - dx (старшие биты) ax (младшие биты), частное - ax, остаток - dx
  • двойное слово: делимое - edx (старшие биты), eax (младшие биты), частное - eax, остаток - edx

Автор: fuckingniger 15.3.2011, 23:17
Цитата(Cheloveck @  15.3.2011,  22:01 Найти цитируемый пост)
двойное слово: делимое - edx (старшие биты), eax (младшие биты), частное - eax, остаток - edx

как из стека туда достать данные ???они размером в слово туда запиханы.То есть 2 записи в стеке.

я так  понимаю , что делимое должно быть в 2 раза больше делителя.Как мне расширить делимое из пары ax:dx в два раза больше?

Автор: fuckingniger 16.3.2011, 01:34
задание вообще такое:

посчитать математическое выражение

4D/((A-C)(B-1))

A B C D - слова (word)

Автор: fuckingniger 16.3.2011, 09:32
у меня ругается на команду mozvx - говорит, что illegal comand for current processor
а также не знает регистров eax и ebx.

ассемблер для 8086 

Автор: iff 16.3.2011, 16:20
1. процессор 8086 не имеет регистров eax и ebx.
2. процессор 8086 не исполняет инструкцию movzx
(используйте директиву процессора, который поддерживает эти регистры и инструкции, например 80386, директива процессора соответственно записывается как .386)

Цитата(fuckingniger @  16.3.2011,  01:34 Найти цитируемый пост)
задание вообще такое:
посчитать математическое выражение
4D/((A-C)(B-1))
A B C D - слова (word) 

Если нужно именно для 8086:
Код

a dw 10
b dw 3
c dw 4
d dw 144
resultat dw ?
...

push ax bx cx dx
mov ax, a
sub ax, c
mov bx, b
dec bx
mul bx
mov bx, ax
mov ax, d
mov cl,4
shl ax, cl
xor dx, dx
div bx
mov resultat, ax
pop dx cx bx ax

П.С. для некоторых чисел работать будет некорректно: результат (A-C)(B-1) должен не превосходить слово.

Автор: fuckingniger 16.3.2011, 20:28
ну я примерно так и сделал)

а для всех слов это сделать нельзя получается?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)