Reputation: 11
I have a university task to write a simple program in FASM win64 Assembler, which should calculate the following expression:
Where:
- S - result;
- A - constant 20 020 426;
- B - some variable
The result of the program should be the message: "S is less/more than A"
We now work with float point numbers
I just can't understand how to divide and than subtract...
entry Start
include 'win64a.inc'
section '.data' data readable writeable
A dd 20022604;
B dd 1;
mem1 dd 0
log2 dd 1.1443;
NULL = 0
mes1 db 'S is greater than A', 0dh, 0ah, 0
mes1Len = $ - mes1
mes2 db 'S is less or equal to A', 0dh, 0ah, 0
mes2Len = $ - mes2
resStr db 'Result: %d', 0
contitle db 'Results', 0
hStdIn dd 0
hStdOut dd 0
chrsRead dd 0
chrsWritten dd 0
STD_INP_HNDL dd -10
STD_OUTP_HNDL dd -11
section '.bss' readable writeable
readBuf db ?
section '.idata' import data readable
library kernel,'KERNEL32.DLL',\
msvcrt, 'msvcrt.dll'
import kernel,\
SetConsoleTitleA, 'SetConsoleTitleA',\
GetStdHandle, 'GetStdHandle',\
WriteConsoleA, 'WriteConsoleA',\
ReadConsoleA, 'ReadConsoleA',\
ExitProcess, 'ExitProcess'
import msvcrt,\
puts,'puts',\
scanf,'scanf',\
printf,'printf',\
exit,'exit',\
getch, '_getch'
section '.code' code readable executable
Start:
mov edx, 0
mov eax, [A]
mov ebx, 4
div ebx
mov [mem1], edx
mov edi, [log2];
sub eax, edi;
mov ebx, [B]
mul ebx
mov ebx, A
cmp eax, ebx
jg greater
invoke GetStdHandle, [STD_OUTP_HNDL]
mov [hStdOut], eax
invoke GetStdHandle, [STD_INP_HNDL]
mov [hStdIn], eax
invoke WriteConsoleA, [hStdOut], mes2, mes2Len, chrsWritten, 0
invoke ReadConsoleA, [hStdIn], readBuf, 1, chrsRead, 0
jmp exit
greater:
invoke GetStdHandle, [STD_OUTP_HNDL]
mov [hStdOut], eax
invoke GetStdHandle, [STD_INP_HNDL]
mov [hStdIn], eax
invoke WriteConsoleA, [hStdOut], mes1, mes1Len, chrsWritten, 0
invoke ReadConsoleA, [hStdIn], readBuf, 1, chrsRead, 0
Exit:
invoke ReadConsoleA, [hStdIn], readBuf, 1, chrsRead, 0
invoke ExitProcess, 0 ```
What is the mistake?
Upvotes: 1
Views: 147