Решение математического примера - Assembler
Формулировка задачи:
Нужно решить пример, и что бы он в регистрах показал ответ, без вывода на екран, именно в регистр.
Сделал свои наброски, но не могу никак закончить код, все работает, кроме последнего дроба и также сумы, но это уже после деление последнего дроба. Код писался в EMU8086 (здесь и нужно вывести). Заранее спасибо.
Листинг программы
- use16
- org 100h
- mov al,[a] ; a = 5
- mul al ; a^2 =19
- mov bl,[x] ; x = 3
- mul bl ; a^2*x=4B
- mov cl,3 ;
- mul cl ; 3*a^2*x = E1
- mov cl,al ; cl=al
- mov bl,[b] ; b = 4
- sub cl,bl ; E1-4 = DD
- mov al,[a] ; a
- mov bl,[x] ; x
- ;mov cl,cl
- add al,bl
- div al ; 1
- mov cl,al
- mov al,[x] ; 3
- mul al ; 9
- dec al ; 8
- mov dl,3
- mul dl
- sub cl,dl
- mov al,[a]
- mov bl,[b]
- mul bl
- mul bl
- mov dl,al
- mov al,[x]
- mul al
- mov ah,al
- div dl
- add bh,al
- mov [y],ax
- ;----- End of the program-----
- mov ax, 4C00H
- int 21h
- ;----- initialize variable
- a db 5
- x db 3
- b db 4
- y dw ?
- ret
Решение задачи: «Решение математического примера»
textual
Листинг программы
- .model small
- .data
- a db 5
- x db 3
- b db 4
- y db ?
- .stack 100h
- .code
- start:
- mov ax,@data
- mov ds,ax
- mov al,[a] ;al=a=5
- mul al ;ax=a^2=19
- mov bl,[x] ;bl=x=3
- mul bl ;ax=a^2*x=4B
- mov cl,3 ;cl=3
- mul cl ;ax=3*a^2*x=E1
- mov cl,al ;cl=al=3*a^2*x=E1
- mov bl,[b] ;bl=b=4
- sub cl,bl ;cl=3*a^2*x-b=E1-4=DD
- mov al,[a] ;al=a
- mov bl,[x] ;bl=x
- add al,bl ;al=a+x=8
- xchg al,cl ;al=3*a^2*x-b=E1-4=DD
- ;cl=a+x=5+3=8
- xor ah,ah ;ax=al
- idiv cl ;ax/cl=(3*a^2*x-b)/(a+x)=1B
- mov cl,al ;cl=(3*a^2*x-b)/(a+x)=1B
- mov al,[x] ;al=x=3
- mul al ;ax=x^2=9
- dec al ;al=x^2-1=8
- mov dl,3 ;dl=3
- mul dl ;al=3*(x^2-1)=18
- sub cl,al ;cl=((3*a^2*x-b)/(a+x))-3*(x^2-1)=3
- mov al,[a] ;al=a=5
- mov bl,[b] ;bl=b=4
- mul bl ;ax=a*b=14
- shl ax,2 ;ax=4*a*b=50
- xchg ax,bx ;bx=4*a*b=50
- mov al,[x] ;al=x=3
- mul al ;ax=x*x=9
- xchg ax,bx ;ax=4*a*b=50
- ;bx=x*x=9
- div bl ;al=(4*a*b)/(x*x)=50/9=8
- add al,cl ;al=((3*a^2*x-b)/(a+x))-3*(x^2-1)+(4*a*b)/(x*x)=3+8=0B
- mov [y],al ;y=al=0B
- mov ah,4Ch
- mov al,00h
- int 21h
- end start
Объяснение кода листинга программы
Список действий:
- Задаются начальные значения переменных a, x, b, y.
- Переменная a^2 (19) умножается на переменную x (3), результат (4B) сохраняется в переменной ax.
- Переменная a^2*x-b (E1-4=DD) сохраняется в переменной cl.
- Переменная a (5) и x (3) складываются, результат (8) сохраняется в переменной al.
- Значение al (8) меняется на значение cl (DD), а значение cl (8) меняется на значение al (DD).
- Переменная b (4) вычитается из значения cl (DD), результат (DD-4=DB) сохраняется в переменной cl.
- Переменная x (3) умножается на себя (9), результат (8) вычитается из значения cl (DB), результат (DB-8=D3) сохраняется в переменной cl.
- Переменные a (5) и b (4) умножаются, результат (14) сохраняется в переменной ax.
- Значение ax (14) умножается на 2, результат (28) сохраняется в переменной ax.
- Переменные ax (28) и bx (9) меняются местами, теперь bx (9).
- Переменная x (3) умножается на себя (9), результат (8) вычитается из значения bx (9), результат (9-8=1) сохраняется в переменной bl.
- Переменные a (5) и b (4) делятся, результат (8) добавляется к значению cl (D3), результат (D3+8=C0) сохраняется в переменной al.
- Значение al (C0) меняется на значение bl (1), а значение bl (1) меняется на значение al (C0).
- Значение y (0B) сохраняется в переменной y.
- Выполняется завершающий вывод на экран с помощью функции 4Ch.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д