Вычисление выражения по формуле - 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
Объяснение кода листинга программы
mov bx,ax
— в регистре BX сохраняется значение регистра AX, равное 2C.xor ax,ax
— в регистре AX устанавливается ноль.mov al,a
— в регистре AL сохраняется значение регистра A.mov bl,4
— в регистре BL устанавливается значение 4.mul bl
— результат умножения в регистре AX равен 4A.mul b
— результат умножения в регистре AX равен 4AB.add ax,bx
— результат сложения в регистре AX равен сумме 2C и 4AB, то есть 4AB + 2C.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д