Skip to content

Instantly share code, notes, and snippets.

@spellancer
Created March 12, 2012 15:54
Show Gist options
  • Save spellancer/2022929 to your computer and use it in GitHub Desktop.
Save spellancer/2022929 to your computer and use it in GitHub Desktop.
laba3
.DATA
usl DB 13,10,'### B=(a*a-b*b) + a if a*a/g<8, else b=8 ',13,10,0
error DB 13,10,' Error! division by zero! Enter correct #g!',13,10,0
zapa DB 13,10,'Enter value #a:',13,10,0
zapb DB 13,10,'Enter value #b:',13,10,0
zapg DB 13,10,'Enter value #g (g<>0 !):',13,10,0
ots db 13,10,'---------------------',13,10,0
result DB 13,10,'Result:',13,10,0
res db " ",0
.DATA?
inbuf DB 100 DUP (?)
Buffer DB 10 DUP (?)
a sdword ?
b sdword ?
g sdword ?
.CODE
Start:
;ввод исходных данных
Invoke StdOut,ADDR usl
Invoke StdOut,ADDR zapa
Invoke StdIn,ADDR Buffer,LengthOf Buffer
Invoke StripLF,ADDR Buffer
; Преобразование в SDWORD
Invoke atol,ADDR Buffer
mov a,EAX
Invoke StdOut,ADDR zapb
Invoke StdIn,ADDR Buffer,LengthOf Buffer
Invoke StripLF,ADDR Buffer
; Преобразование в SDWORD
Invoke atol,ADDR Buffer
mov b,eax
begin:
Invoke StdOut,ADDR zapg
Invoke StdIn,ADDR Buffer,LengthOf Buffer
Invoke StripLF,ADDR Buffer
; Преобразование в SDWORD
Invoke atol,ADDR Buffer
mov g,eax
;начало
mov eax,a
imul eax
;проверка деления на ноль
cmp g,0
JNE neravno
; при g=0 выдаем ошибку, и возвращаемся к вводу значения g
Invoke StdOut,ADDR error
jmp begin
;g<>0, выполняем вычисления
neravno:
mov ecx,g
cdq
idiv ecx
cmp eax,8
;проверка a*a/g < 8
JL inache
;при больше или равно
mov ebx,8
mov b,ebx
jmp next
;при меньше
inache: ;
mov eax,a
imul eax
mov ebx,eax
mov eax,b
imul eax
sub ebx,eax
add ebx,a
mov b,ebx
next:
;вывод результатов
Invoke StdOut,ADDR ots
Invoke StdOut,ADDR result
Invoke dwtoa,b,ADDR res
Invoke StdOut,ADDR res
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment