Вычисление выражения по формуле - Assembler (223942)

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

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

Задача: с клавиатуры читаем a,b,c, вычисляем уравнение Само уравнение: 2C+4AB+(a^2-b^2) Ввожу a=1,b=2,c=3, выдаёт 9,вместо 11, в чём ошибка? Вот сам участок кода:
mov al,c ;al=c
mov bl,2 ;bl=2
mul bl ;ax=2c
mov bx,ax ;bx=ax=2c
xor ax,ax ;ax=0
 
mov al,a ;al=a
mov bl,4 ;bl=4
mul bl ;ax=4a
mul b ; ax=4ab
add ax,bx ;ax=ax+bx=ax=2c+4ab
mov dx,ax ;dx=ax=2c+4ab
xor ax,ax ;ax=0
xor bx,bx ;bx=0
 
mov al,b ;al=b
mul b ;ax=b*b
mov cx,ax ;cx=ax=b*b
xor ax,ax ;ax=0
xor al,al ;al=0
mov al,a ;al=a
mul a   ;ax=a*a
sub ax,cx ;ax=ax-cx=a*a-b*b
 
add ax,dx
xor dx,dx
 
mov d,al ;ответ ax в d
ЗАРАНЕЕ СПАСИБО!

Решение задачи: «Вычисление выражения по формуле»

textual
Листинг программы
mov bx,ax ;bx=ax=2c ; ТУТ ВЫ СОХРАНЯЕТЕ 2С В РЕГ. ВХ ЧТО БЫ СЛОЖИТЬ ЕГО С 4АВ
xor ax,ax ;ax=0
mov al,a ;al=a
mov bl,4 ;bl=4  ; А ТУТ ВЫ ЗАТИРАЕТЕ СОХРАНЕННОЕ В BX ИСПОЛЬЗУЯ МЛАДШУЮ ПОЛОВИНУ РЕГИСТРА
mul bl ;ax=4a
mul b ; ax=4ab
add ax,bx ;ax=ax+bx=ax=2c+4ab ; И УЖЕ ТУТ ИДЁТ НЕ 6+8, А 4+8

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

  1. mov bx,ax — в регистре BX сохраняется значение регистра AX, равное 2C.
  2. xor ax,ax — в регистре AX устанавливается ноль.
  3. mov al,a — в регистре AL сохраняется значение регистра A.
  4. mov bl,4 — в регистре BL устанавливается значение 4.
  5. mul bl — результат умножения в регистре AX равен 4A.
  6. mul b — результат умножения в регистре AX равен 4AB.
  7. add ax,bx — результат сложения в регистре AX равен сумме 2C и 4AB, то есть 4AB + 2C.

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


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

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

15   голосов , оценка 3.933 из 5