Question

Learning NASM Assembly in 32-bit Ubuntu. I am somewhat confused:

In .bss, I reserve a byte for a variable:

num resb 1

Later I decided to give it a value of 5:

mov byte [num],5

And at some point print it out:

mov EAX,4
mov EBX,0
mov ECX,num
add ECX,'0'   ; From decimal to ASCII
mov EDX,1
int 0x80

But it isn't printing anything.

I'm guessing that the problem is when I give num its value of 5. I originally wanted to do this:

mov byte num,5

As I thought that num refers to a position in memory, and so mov would copy 5 to such position. But I got an error saying

invalid combination of opcode and operands

So basically, why is the program not printing 5? And also, why was my suggestion above invalid?

Was it helpful?

Solution

To print using int 0x80 and code 4 you need ECX to be the address of the byte to print. You added '0' to the address of num that was in ECX before you called the print routine, so it was the address of something else out in memory somewhere.

You may want something like this. I created a separate area, numout to hold the ASCII version of num:

numout resb 1
....

mov EAX,4
mov EBX,0
mov CL,[num]
add CL,'0'
mov [numout],CL
mov ECX,numout
mov EDX,1
int 0x80
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top