Арифметические действия на Ассемблере - 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
Объяснение кода листинга программы
- mov ax, d — данная команда переносит значение из регистра d в регистр ax.
- mov bx, x — данная команда переносит значение из регистра x в регистр bx.
- cwd — данная команда изменяет направление переноса (по умолчанию в младший байт).
- div bx — данная команда выполняет целочисленное деление регистра ax на значение в регистре bx.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д