Система уравнений. Реализовать код, как можно меньшим количеством команд - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д