Арифметические действия на Ассемблере - Assembler

Узнай цену своей работы

Формулировка задачи:

Вот пример A*X^3+B*X^2+C div X + (D div X) div X Ошибка в нижнем блоке. При делении 1/2 он обнуляет регистр а потом ах становится 32 768 ---------------------------------------------------------------------------
var
B, A, Z, C, D, X: Smallint;
begin
WriteLn('Введите целые числа A,X,B,C,D: ');
Read(A,X,B,C,D); // A=1; X=1; B=2; C=2; D=2;
asm
pusha
mov ax,x
mul ax
mul x
mov bx,a
mul ax,bx
push ax
 
mov ax,x
mul ax
mov bx,b
mul ax,bx
mov cx,ax
add cx,ax
push cx
 
mov ax, c
mov bx,x
div ax,bx
add cx,ax
push cx
 
mov ax, d
mov bx,x
div ax,bx// Ошибка в этом блоке при делении 
div ax,x
mov dx,ax
add cx, dx
mov z,cx
popa
end;
WriteLn('Y= ',Z);
ReadLn;
ReadLn;
end.

Решение задачи: «Арифметические действия на Ассемблере»

textual
Листинг программы
mov  ax,d
mov  bx,x
cwd
div  bx

Объяснение кода листинга программы

  1. mov ax, d — данная команда переносит значение из регистра d в регистр ax.
  2. mov bx, x — данная команда переносит значение из регистра x в регистр bx.
  3. cwd — данная команда изменяет направление переноса (по умолчанию в младший байт).
  4. div bx — данная команда выполняет целочисленное деление регистра ax на значение в регистре bx.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5
Похожие ответы