MASM question

sluthy

Member
Sep 25, 2005
77
0
0
Hey, I need a little help with a particluar point in my MASM uni assignment (well, I actually need a lot of help, but one problem at a time) please.

I've got a BYTE array 20 bytes long which I'm using as a input string buffer, and it's going to recieve two numbers sepatared by a comma (i.e. 512,43 - it's a pixel reference on a screen).
I've also got two SDWORD variables that need those two numbers in them (xOrigin, yOrigin). How can I get this to properly divide the two into the SDWORD values? I could probably manage it in C++, but it's my first time with ASM.
 

itachi

Senior member
Aug 17, 2004
390
0
0
you need to convert it explicitly.

while buf(i) != ',' =>
accumulator *= 10
accumulator += buf(i)
end-while
num = accumulator

when you allocate the 2 dword vars, their addresses will be 4 apart.. so you can increment the dest address by 4, if it's over, break out.. otherwise convert another.
 

sluthy

Member
Sep 25, 2005
77
0
0
Okay, cool, got that problem out - but now I have tw more urgent problems (assignment's due in about 6 hours):

1. I just realised I need to be using Real-address mode, so instead of using 'make32' I need to use 'make16'. But when I do that, I get:


C:\Masm615\LIB\Irvine16.lib(D:\Kip\AsmBook4\Examples\Lib16\Irvine16.asm) : fatal error L1123: _TEXT : segment defined both 16- and 32- bit

...help!

2. How do you get the square root of a number? I know add, sub, mul, imul etc., how do I find the hypotenuse of a Pythagoras triangle?
 

sluthy

Member
Sep 25, 2005
77
0
0
Okay, never mind that first one, it was a line in my code, now it compiles, now when I run it I get garbage (under XP). How do I run it in MS-DOS?

Second question still applies though.
 

itachi

Senior member
Aug 17, 2004
390
0
0
only time you'd need to run it in real-mode is if you need to call bios functions.

to get the square root.. use x87 instructions.

(nasm syntax)
fild dword ptr[ num ]
fsqrt
fistp dword ptr[root]
; root = (int) sqrt(num)