0

I'm writing a little program in Assembly 8086 and I have to use variables.

So I have a variable that is defined in the data segment :

myVar BYTE 3,0

Afterwards in my code I have to acces the variable and use it's value. But the program did not work like expected. So I searched the error in my code and I found that when I acces "myVar", the value is different from the value I assigned to it.

When I print the contents of "myVar" it prints 173 instead of 3 :

xor dx, dx
mov dl, myVar
push dx
CALL tprint

"tprint" is a function I wrote, that will display the number passed as argument via the stack. So in this case it will print the content of the DX register.

When I put 3 in dx and then print it, it prints 3, so "tprint" works fine :

xor dx, dx
mov dl, 3
push dx
CALL tprint

So the problem is that when I move the contents of the variable "myVar" in the DL register, the wrong value is put in DL (another value than the value assigned to "myVar") :

xor dx, dx
mov dl, myVar ; DL != 3 --> why???

I really don't understand this behaviour, I searched a lot of sites and they all do it this way, why does it works fine for them and not for me?

Remark : The "tprint" function is a function for printing signed numbers using two's complement method.

Thanks for your help!

g00glen00b
  • 41,995
  • 13
  • 95
  • 133
Kevin
  • 2,813
  • 3
  • 20
  • 30

1 Answers1

0

When you move a value from a register, you want to use brackets to move the actual value and not the memory address. So for

mov dl, myVar

you're likely moving just the pointer instead of the value.

See this link

Community
  • 1
  • 1
cchapman
  • 3,269
  • 10
  • 50
  • 68