Система уравнений. Реализовать код, как можно меньшим количеством команд - Assembler

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

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

Дана система уравнений: Y=(A*X^4)+(B-C-D)*X^2 если B>C+D, иначе Y=(A*X^4)+(B+C+D)*X^2 Само задание: Реализовать код, как можно меньшим количеством команд. Тот, что получался у меня - выходит на несколько страниц, и работает некорректно, так что даже показывать стыдно. Прошу помощи у гуру этого форума.

Решение задачи: «Система уравнений. Реализовать код, как можно меньшим количеством команд»

textual
Листинг программы
;Y=A*X^4+(B-C-D)*X^2 , if B>C+D
;Y=A*X^4+(B+C+D)*X^2 , else
.model small
.stack 256
 
.data
txt_cap db "<- - - - - - - - - - ‡ ¤ *ВЁВҐ (‚ Г*ВЁ *Гў #10) - - - - - - - - - ->",10,10
db " ‚ëç¨á«ВЁГўВҐ §* ç¥*ВЁГЇ ГЎ«ВҐ¤ГЈГ®Г©ВЁГҐ ВўГ«Г* ¦ВҐ*ВЁ©:",10,13,10,"$"
txt_Y1 db ">> Y=A*X^4+(B-C-D)*X^2 ,ВҐГЎ«ВЁ B>C+D",10,"$"
txt_Y2 db ">> Y=A*X^4+(B+C+D)*X^2 ,¨* ç¥","$"
txt_result db 10," ВҐ§ГЈ«Г¬Гў Гў: $"
if_y1 db 10," ВҐГЁ ВҐ¬ ВЇВҐГ*Вў®ВҐ ВўГ«Г* ¦ВҐ*ВЁВҐ, Гў.ВЄ B > C+D ВўВҐГ**®.",10,"$"
if_y2 db 10," ВҐГЁ ВҐ¬ ВўГў®Г*®ВҐ ВўГ«Г* ¦ВҐ*ВЁВҐ, Гў.ВЄ B > C+D *ВҐВўВҐГ**®.",10,"$"
A dw 0 ;ВҐГ*ВҐ¬ВҐ**ë¥
B dw 0
C dw 0
D dw 0
X dw 0
Res_1 dw 0 ;ВҐГ*ВҐ¬ВҐ**ë¥ ¤«ГЇ ВЇГ*®¬ВҐ¦ГЈГў®Г§*ëå Г*ВҐ§ГЈ«Г¬Гў Гў®Вў:
Res_2 dw 0
Res_3 dw 0
mes_A db 0,"€ = $" ;ГўВЁ ГЎГўГ*®ВЄ®ВўГ«ВҐ ВЄ®*ГЎГў *ГўГ« ВЁГЎВЇ®«Г¬§ГЈГ®ГўГЎГЇ ВЇГ*ВЁ ВўВў®¤ВҐ §* ç¥*ВЁ© ВЇВҐГ*ВҐ¬ВҐ**ëå.
mes_B db "B = $" 
mes_C db "C = $" 
mes_D db "D = $" 
mes_X db "X = $" 
mes_faq db ,10," ‚ВўВҐ¤ВЁГўВҐ §* ç¥*ВЁГЇ ¤«ГЇ ВЇВҐГ*ВҐ¬ВҐ**ëå.",10,10,"$"
 
;< = = = = = = = = = = = = ‘ВҐВЈ¬ВҐ*Гў ВЄ®¤  = = = = = = = = = = = = >
.code
Main_Proc:
mov ax,@data ;“ГЎГў *®ВўВЁГўГ¬ DOS  ¤Г*ВҐГЎ
mov ds,ax ; ГЎВҐВЈ¬ВҐ*Гў  ¤ **ëå
xor ax,ax
;- - - - - - - - - - ‚뢮¤ ГўВҐВЄГЎГў  - - - - - - - - - - - - - - - - -
mov ah,9 ;Е*®¤ äã*ªæ¨¨ DOS ¤«ГЇ ¢ë¢®¤  ГЎГўГ*®ВЄВЁ. 
lea dx, txt_cap ;‡ *®ГЎВЁ¬ ГЎГўГ*®ВЄГЈ Вў *ГЈ¦*Г«© Г*ВҐВЈВЁГЎГўГ*.
int 21h ;‚Г«§Г«Вў ВҐ¬ DOS.
lea dx, txt_Y1
int 21h ;®ВЄ §Г«Вў ВҐ¬ ВўВЁ¤ 1-ВЈ® ГЈГ* Вў*ВҐ*ВЁГЇ.
lea dx, txt_Y2
int 21h ;®ВЄ §Г«Вў ВҐ¬ ВўВЁ¤ 2-ВЈ® ГЈГ* Вў*ВҐ*ВЁГЇ.
call Indent ;„ВҐ« ВҐ¬  ВЎ§ Г¦.
call Delay ;†¤Г±¬ ГЎВЁВЈ* «  ®Гў ВЄ« ВўВЁ ГўГЈГ*Г« ¤«ГЇ ВЇГ*®¤®«¦ВҐ*ВЁГЇ.
;- - - - - - - ‚Вў®¤ §* ç¥*ВЁ© ¤«ГЇ ВЇВҐГ*ВҐ¬ВҐ**ëå A,B,C,D,X - - - - - - - 
mov ah,09h 
lea dx,mes_faq 
int 21h ;‚뢮¤ВЁ¬ ГЎ®®ВЎГ©ВҐ*ВЁВҐ ® Гў®¬, çâ® *ГЈ¦*® ВўВўВҐГЎГўВЁ §* ç¥*ВЁГЇ.
;‚Вў®¤ §* ç¥*ВЁ© ¤«ГЇ A.
mov ah,09h 
lea dx,mes_A
int 21h 
call InputInt ;‚Г«§®Вў ВЇГ*®Г¦ВҐ¤ГЈГ*Г« ¤«ГЇ ВўВў®¤  §* ç¥*ВЁГЇ.
mov [A],di ;ВҐ§ГЈ«Г¬Гў Гў ВўВў®¤  ГЎ®ГҐГ* *ВҐ¬ Вў ВЇВҐГ*ВҐ¬ВҐ**ГЈГ® A.
;‚Вў®¤ §* ç¥*ВЁ© ¤«ГЇ B.
mov ah,09h 
lea dx,mes_B
int 21h
call InputInt ;‚Г«§®Вў ВЇГ*®Г¦ВҐ¤ГЈГ*Г« ¤«ГЇ ВўВў®¤  §* ç¥*ВЁГЇ.
mov [B],di ;ВҐ§ГЈ«Г¬Гў Гў ВўВў®¤  ГЎ®ГҐГ* *ГЇВҐ¬ Вў ВЇВҐГ*ВҐ¬ВҐ**ГЈГ® B.
mov ah,09h
;‚Вў®¤ §* ç¥*ВЁ© ¤«ГЇ C. 
lea dx,mes_C
int 21h
call InputInt ;‚Г«§®Вў ВЇГ*®Г¦ВҐ¤ГЈГ*Г« ¤«ГЇ ВўВў®¤  §* ç¥*ВЁГЇ.
mov [C],di ;ВҐ§ГЈ«Г¬Гў Гў ВўВў®¤  ГЎ®ГҐГ* *ГЇВҐ¬ Вў ВЇВҐГ*ВҐ¬ВҐ**ГЈГ® C.
;‚Вў®¤ §* ç¥*ВЁ© ¤«ГЇ D.
mov ah,09h 
lea dx,mes_D
int 21h
call InputInt ;‚Г«§®Вў ВЇГ*®Г¦ВҐ¤ГЈГ*Г« ¤«ГЇ ВўВў®¤  §* ç¥*ВЁГЇ.
mov [D],di ;ВҐ§ГЈ«Г¬Гў Гў ВўВў®¤  ГЎ®ГҐГ* *ГЇВҐ¬ Вў ВЇВҐГ*ВҐ¬ВҐ**ГЈГ® D.
;‚Вў®¤ §* ç¥*ВЁ© ¤«ГЇ X.
mov ah,09h 
lea dx,mes_X 
int 21h
call InputInt ;‚Г«§®Вў ВЇГ*®Г¦ВҐ¤ГЈГ*Г« ¤«ГЇ ВўВў®¤  §* ç¥*ВЁГЇ.
mov [X],di ;ВҐ§ГЈ«Г¬Гў Гў ВўВў®¤  ГЎ®ГҐГ* *ГЇВҐ¬ Вў ВЇВҐГ*ВҐ¬ВҐ**ГЈГ® X.
call Indent ;„ВҐ« ВҐ¬  ВЎ§ Г¦.
;- - - - - - - - - - - - Г*®ВўВҐГ*ВЄ  ГЈГЎ«®ВўВЁГЇ B>C - - - - - - - - - - - - - - - - -
mov ax,B
mov bx,C
cmp ax,bx ;‘Г* Вў*ВЁВў ВҐ¬ B ВЁ C+D.
jle @Y2 ; ВҐГ*ВҐГҐ®¤ ВЄ ¬ВҐГўВЄВҐ, ВҐГЎ«ВЁ B ¬ВҐ*ìè¥ ВЁ«ВЁ Г* Вў*® C+D.
;- - - - - - - - - - ВҐГЁВҐ*ВЁВҐ 1-ВЈ® ГЈГ* Вў*ВҐ*ВЁГЇ - - - - - - - - - - - - - - - - -
; Гў  Г§ ГЎГўГ¬ ВЄ®¤  ВўГ«ВЇ®«*ГЇВҐГўГЎГЇ ВЇГ*ВЁ B>C+D.
mov ah,9 ;Е*®¤ äã*ªæ¨¨ DOS ¤«ГЇ ¢ë¢®¤  ГЎГўГ*®ВЄВЁ. 
lea dx, if_y1 ;‡ *®ГЎВЁ¬ ГЎГўГ*®ВЄГЈ Вў *ГЈ¦*Г«© Г*ВҐВЈВЁГЎГўГ*.
int 21h ;‚Г«§Г«Вў ВҐ¬ DOS.
call Delay ;‡ ¤ВҐГ*¦ВЄ . ЕЅ¦ВЁ¤ *ВЁВҐ ГЎВЁВЈ* «  ГЎ ВЄ« ВўВЁ ГўГЈГ*Г«.
; ‚Г«Г* ¦ВҐ*ВЁВҐ A*X^4.
mov ax,X
mov bx,X 
mov bx,X
mov bx,X
mul bx
mov bx,A
mul bx
mov Res_1,ax
; ‚Г«Г* ¦ВҐ*ВЁВҐ (B-C-D)*X^2. 
mov ax,B
mov bx,C
sub ax, bx
mov Res_2,ax 
mov ax,X
mov bx,X
mul bx
mul bx
mov bx, Res_2
mul bx
mov Res_2,ax 
;‘ГЈ¬¬ВЁГ*ГЈВҐ¬ ВўГЎВҐ ВЇГ*®¬ВҐ¦ГЈГў®Г§*ë¥ Г*ВҐ§ГЈ«Г¬Гў ГўГ«. 
mov ax,Res_1
mov bx,Res_2
add ax,bx
add ax,D
jmp @Output ;ВҐГ*ВҐГҐ®¤ВЁ¬ ВЄ ¢ë¢®¤ГЈ ç¨á« , ¬ВЁ*ГЈГЇ ¢ëç¨á«ВҐ*ВЁВҐ 2-ВЈ® ВўГ«Г* ¦ВҐ*ВЁГЇ.
;- - - - - - - - - - ВҐГЁВҐ*ВЁВҐ 2-ВЈ® ГЈГ* Вў*ВҐ*ВЁГЇ - - - - - - - - - - - - - - - - -
@Y2: ; Гў  Г§ ГЎГўГ¬ ВЄ®¤  ВўГ«ВЇ®«*ГЇВҐГўГЎГЇ ВЇГ*ВЁ B<C+D.
mov ah,9 ;Е*®¤ äã*ªæ¨¨ DOS ¤«ГЇ ¢ë¢®¤  ГЎГўГ*®ВЄВЁ. 
lea dx, if_y2 ;‡ *®ГЎВЁ¬ ГЎГўГ*®ВЄГЈ Вў *ГЈ¦*Г«© Г*ВҐВЈВЁГЎГўГ*.
int 21h ;‚Г«§Г«Вў ВҐ¬ DOS.
call Delay
; ‚Г«Г* ¦ВҐ*ВЁВҐ A*X^4.
mov ax,X
mov bx,X 
mov bx,X
mov bx,X
mul bx
mov bx,A
mul bx
mov Res_1,ax
; ‚Г«Г* ¦ВҐ*ВЁВҐ (B+C+D)*X^2. 
mov ax,B
mov bx,C
sub ax, bx
mov Res_2,ax 
mov ax,X
mov bx,X
mul bx
mul bx
mov bx, Res_2
mul bx
mov Res_2,ax 
;‘ГЈ¬¬ВЁГ*ГЈВҐ¬ ВўГЎВҐ ВЇГ*®¬ВҐ¦ГЈГў®Г§*ë¥ Г*ВҐ§ГЈ«Г¬Гў ГўГ«. 
mov ax,Res_1
mov bx,Res_2
add ax,bx
add ax,D
;- - - - - - - - - - ‚뢮¤ Г*ВҐ§ГЈ«Г¬Гў Гў  - - - - - - - - - - - - - - - - -
@Output:
call OutInt ;‚Г«§®Вў ВЇГ*®Г¦ВҐ¤ГЈГ*Г« ¤«ГЇ ¢ë¢®¤  Г§ВЁГЎ«  Вў 10-© ГЎГЎ.
call Delay ;‡ ¤ВҐГ*¦ВЄ .
mov ax,4c00h ;Е*®¤ ¤«ГЇ § ВўВҐ®ГЁВҐ*ВЁГЇ ВЇГ*®ВЈГ* ¬¬Г«.
int 21h
;< = = = = = = = = = = = Г*®Г¦ВҐ¤ГЈГ*Г« = = = = = = = = = = = = = = >
;-------------------- ‚Вў®¤ 楫®ВЈ® ç¨á« ------------------------
InputInt proc
;di - * ВЄ®ВЇ«ВҐ** ГЇ Г§ ГЎГўГ¬ ç¨á« 
;si - *®¬ВҐГ* ⥪ã饩 ВЇ®§ВЁГ¦ВЁВЁ
;bp=10 - ¤ВҐ«ВЁГўВҐ«Г¬ ¤«ГЇ ВЇГ*®Г¦ВҐ¤ГЈГ* ВўВў®¤  ВЁ ¢ë¢®¤ 
;ax ВЁ dx - ГЎ«ГЈ¦ВҐВЎ*ë¥ Г*ВҐВЈВЁГЎГўГ*Г« (¡ãä¥Г*Г«)
mov di,0 ;®ВЄ  *¨ç¥£® *ВҐ ВўВўВҐ¤ВҐ*®, áç¨â ВҐ¬ çâ® 0
mov si,0 ;®¬ВҐГ* ВЇ®§ВЁГ¦ВЁВЁ Вў ç¨á«ВҐ
mov bp,10 ;®Гў®¬ ВЎГЈ¤ВҐ¬ ГЈ¬*®¦ ГўГ¬ *  10
@repeat:
mov ah,08h 
int 21h ;—ВЁГў ВҐ¬ ГЎВЁ¬Вў®«
cmp al,'0' ;…ГЎ«ВЁ Г*Гў® ГЎ«ГЈ¦ВҐВЎ*Г«© ГЎВЁ¬Вў®« -> @event
jb @event
cmp al,'9' ;…ГЎ«ВЁ Г*Гў® *ВҐ æ¨äГ*  -> @repeat
ja @repeat
mov bl,al ;‘®ГҐГ* *ВЁ¬ ГЎВЁ¬Вў®« Вў bl
mov ax,di
mul bp ;“¬*®¦ ВҐ¬ *  10
cmp dx,0
jne @event ;…ГЎ«ВЁ *ВҐ 0 Вў DX -> ВЇВҐГ*ВҐВЇ®«*ВҐ*ВЁВҐ 
mov dl,bl
sub dl,'0' ;Г*ВҐ®ВЎГ* §ГЈВҐ¬ ГЎВЁ¬Вў®« Вў æ¨äГ*ГЈ
mov dh,0 ;DX - æ¨äГ* 
add dx,ax
jc @repeat ;…ГЎ«ВЁ ВЇВҐГ*ВҐ*®ГЎ -> ВЇВҐГ*ВҐВЇ®«*ВҐ*ВЁВҐ
inc si
mov di,dx 
mov dl,bl
mov ah,02h
int 21h
jmp @repeat
@event: ;Г*®ВўВҐГ*ВЄ  *  * ¦ ГўВЁВҐ ВўВў®¤ .
cmp si,0
je @repeat
cmp al,13
je @enter ; ¦ «ВЁ ВўВў®¤
@enter: 
mov ah,2h
mov dl,0
int 21h ;„ВҐ« ВҐ¬ ВЇГ*®ВЎВҐ«.
mov dl,0
int 21h ;Л† ¥éñ ®¤ВЁ* ВЇГ*®ВЎВҐ«.
ret ;‚ë室 ВЁ§ ВЇГ*®Г¦ВҐ¤ГЈГ*Г«.
InputInt endp
;-------------------- ‚뢮¤ 楫®ВЈ® ç¨á« ----------------------
; —ВЁГЎ«® ¤«ГЇ ¢ë¢®¤  ¤®«¦*® * ГҐ®¤ВЁГўГ¬ГЎГЇ Вў Г*ВҐВЈВЁГЎГўГ*ВҐ ax.
OutInt proc 
push ax
mov ah,9 ;Е*®¤ äã*ªæ¨¨ DOS ¤«ГЇ ¢ë¢®¤  ГЎГўГ*®ВЄВЁ. 
lea dx, txt_result ;‡ *®ГЎВЁ¬ ГЎГўГ*®ВЄГЈ Вў *ГЈ¦*Г«© Г*ВҐВЈВЁГЎГўГ*.
int 21h
pop ax 
; Г*®ВўВҐГ*ГЇВҐ¬ ç¨á«® *  §* ВЄ.
test ax, ax
jns @mark1
; …ГЎ«ВЁ ®*® ®ГўГ*ВЁГ¦ ГўВҐ«Г¬*®ВҐ, ¢ë¢¥¤ВҐ¬ ¬ВЁ*ГЈГЎ ВЁ ®ГЎГў ВўВЁ¬ ВҐВЈ® ¬®¤ГЈ«Г¬.
mov cx, ax
mov ah, 02h
mov dl, '-'
int 21h
mov ax, cx
neg ax
; Е*®«ВЁГ§ВҐГЎГўВў® æ¨äГ* ВЎГЈ¤ВҐ¬ ¤ВҐГ*¦ ГўГ¬ Вў CX.
@mark1: 
xor cx, cx
mov bx, 10 ; ®ГЎ*®Вў *ВЁВҐ ГЎГЎ. 10 ¤«ГЇ ¤ВҐГЎГЇГўВҐГ*ВЁГ§*®© ВЁ Гў.ВЇ.
@mark2:
xor dx,dx
div bx
; „ВҐ«ВЁ¬ ç¨á«® *  ®ГЎ*®Вў *ВЁВҐ ГЎГЎ. ‚ ®ГЎГў ГўВЄВҐ ВЇ®«ГЈГ§ ВҐГўГЎГЇ ВЇ®ГЎ«ВҐ¤*ГЇГЇ æ¨äГ* .
; ‘Г* §ГЈ ¢ë¢®¤ВЁГўГ¬ ВҐГ± *ВҐ«Г¬§ГЇ, ВЇ®Г*Гў®¬ГЈ ГЎ®ГҐГ* *ВЁ¬ ВҐГ± Вў ГЎГўГ*ВЄВҐ.
push dx
inc cx
; € ГЎ Г§ ГЎГў*Г«¬ ВЇ®ВўГў®Г*ГЇВҐ¬ Гў® ¦ВҐ ГЎ ¬®ВҐ, ®Гў¤ВҐ«ГЇГЇ ®Гў *ВҐВЈ® ®Г§ВҐГ*ВҐ¤*ГЈГ®
; æ¨äГ*ГЈ ГЎВЇГ* Вў , ВЇ®ВЄ  *ВҐ ®ГЎГў *ВҐГўГЎГЇ *®«Г¬, çâ® §* ç¨â, çâ® ¤ «Г¬ГЁВҐ
; ГЎ«ВҐВў  Гў®«Г¬ВЄ® *ГЈ«ВЁ.
test ax, ax
jnz @mark2
; ’ВҐВЇВҐГ*Г¬ ВЇГ*ВЁГЎГўГЈВЇВЁ¬ ВЄ ¢ë¢®¤ГЈ.
mov ah, 02h
@mark3:
pop dx
; Л†§Вў«ВҐВЄ ВҐ¬ ®Г§ВҐГ*ВҐ¤*ГЈГ® æ¨äГ*ГЈ, ВЇВҐГ*ВҐВў®¤ВЁ¬ ВҐГ± Вў ГЎВЁ¬Вў®« ВЁ ¢ë¢®¤ВЁ¬.
add dl, '0'
int 21h
; ®ВўГў®Г*ВЁ¬ Г*®Вў*® ГЎГў®«Г¬ВЄ® Г* §, ГЎВЄ®«Г¬ВЄ® æ¨äГ* * áç¨â «ВЁ.
loop @mark3
mov dl,0Ah
mov ah,02
int 21h ; ВҐГ*ВҐВў®¤ ГЎГўГ*®ВЄВЁ (ВЇГ*®ГЎГў® Гў ВЄ)
ret
OutInt endp 
;------------------ ‡ ¤ВҐГ*¦ВЄ  ---------------------
Delay proc
mov ax,10h ;ЕЅ¦ВЁ¤ *ВЁВҐ ВўВў®¤  ГЎ ВЄ«ВЁВўВЁ ГўГЈГ*Г« (¤«ГЇ § ¤ВҐГ*¦ВЄВЁ).
int 16h ;‚Г«§®Вў BIOS-ГЎВҐГ*ВўВЁГЎ .
ret
Delay endp 
;------------------ €ВЎ§ Г¦ --------------------------
Indent proc
mov dl,0Ah ;Е*®¤ ВЇВҐГ*ВҐВў®¤  ГЎГўГ*®ВЄВЁ.
mov ah,02 ;Е*®¤ ¤«ГЇ ¢ë¢®¤  ГЎВЁ¬Вў®« .
int 21h ;ВҐГ*ВҐВў®¤ ГЎГўГ*®ВЄВЁ ГЎ ВЇ®¬®Г©Г¬Г® DOS-äã*ªæ¨¨.
ret
Indent endp 
end Main_Proc

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


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

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

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