These two lines are your problem:
sub eax,my1337Sk1LLz ;subtracts 1337h from usPop in eax mov Difference, eax ;stores eax into Difference
eax is 32 bits, but both my1337Sk1LLz and Difference are 16 bits.
There are two ways you might get around this:
- Changing the size of
my1337Sk1LLzandDifference. Right now you have the types asWORDandSWORD, respectively. You can change those toDWORDandSDWORDto make them 32-bit. - Zero-extending and truncating. You’ll need another register. I’ll use
edxsince you don’t seem to be using it there. First, you’ll need to sign-extendmy1337Sk1LLz:movzx edx, my1337Sk1LLz ; move, zero-extended, my1337Sk1LLz into EDXThen you can do the subtraction:sub eax, edx ; they're the same size now so we can do thisThen you can store the low word ofeaxintoDifference, discarding the high word:mov Difference, ax