Hello I got My Code Working But i do have some mirror error about the output and also i wanted to know which is the remainder or the quotient is eax or edx this two seems to confused me alot.
this the original OUPUT:
Number 3 & 8 : 0.375 Number 5 & 6 : 0.833
but my OUPUT IS THIS :
Number 3 & 8 : 375 Number 5 &6 : 833 ; how do i show the zero or show 0.375
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
Message3 db "Enter Number 3 & 8: ", 0
Message5 db "Enter Number 5 & 6: ", 0
Message13 db " Number 3 & 8 div: ", 0
Message15 db " Number 5 & 6 div: ", 0
.data?
Number5 dword ?
Number6 dword ?
Number9 dword ?
Number10 dword ?
UserInput5 db 10 DUP(?)
UserInput6 db 10 DUP(?)
UserInput9 db 10 DUP(?)
UserInput10 db 10 DUP(?)
DivString db 20 DUP(?)
DivideString db 20 DUP(?)
NumDiv dword ?
NumDivide dword ?
.code
start:
; Take the user inputs first
invoke StdOut, addr Message3
invoke StdIn, addr UserInput5, 10
invoke StdIn, addr UserInput6, 10
invoke StdOut, addr Message5
invoke StdIn, addr UserInput9, 10
invoke StdIn, addr UserInput10, 10
; Remove the CRLF
invoke StripLF, addr UserInput5
invoke StripLF, addr UserInput6
invoke StripLF, addr UserInput9
invoke StripLF, addr UserInput10
; convert them to numbers from strings
; first user input
invoke atodw, addr UserInput5
mov Number5, eax
invoke atodw, addr UserInput9
mov Number9, eax
; second user input
invoke atodw, addr UserInput6
mov Number6, eax
invoke atodw, addr UserInput10
mov Number10, eax
; divided the numbers
xor edx,edx
mov eax,Number5
mov ebx, Number6
idiv ebx
push ebx
push edx
pop edx
mov eax,edx
mov ebx,1000
mul ebx
xor ebx,ebx
pop ebx
div ebx
mov NumDiv,eax
xor edx,edx
mov eax,Number9
mov ebx, Number10
idiv ebx
push ebx
push edx
pop edx
mov eax,edx
mov ebx,1000
mul ebx
xor ebx,ebx
pop ebx
div ebx
mov NumDivide,eax
; convert the sum and sub to strings and display it
invoke dwtoa, NumDiv, addr DivString
invoke dwtoa, NumDivide, addr DivideString
; Print the sum and sub on the screen
invoke StdOut, addr Message13
invoke StdOut, addr DivString
invoke StdOut, addr Message15
invoke StdOut, addr DivideString
invoke ExitProcess, NULL
end start
- Move to the .data section:
Div0String db "0."
DivString db 20 DUP(?)
Div1String db "0."
DivideString db 20 DUP(?)
- change as follows:
invoke StdOut, addr Message13
invoke StdOut, addr Div0String
invoke StdOut, addr Message15
invoke StdOut, addr Div1String
:P
In case that your results are bigger than 1.000, you need to look into lstrcpy and lstrcat