ASCII print to stdout (console) in NASM/Linux

Hi, I'm trying to write an assembly programming which multiplies the values stored in two registers, and converts the result to ASCII. I need to know what exactly what it is that I'm doing wrong, as I keep getting segmentation faults and/or floating point exceptions. The comments in the code should explain in detail how I'm trying to accomplish this, but I find that most of my issues keep happening when I try do div edx by eax :/

Any thoughts? I think I have to actually *initialize* the registers, though I don't quite know how to do that. Thanks.


section .data
counter: db 0xA ;store value 10 in 'counter', while allocating only one byte. This will be used for decrementing purposes
section .bss
valueToPrint: resb 4 ;alloc 4 bytes of data in 'valueToPrint'

section .text

global _start

add eax, '0' ;convert to ascii
mov [valueToPrint], eax ;store contents of 'eax' in valueToPrint
mov eax, 4 ;syswrite
mov ebx, 1 ;stdout
mov ecx, valueToPrint ;machine will take whatever value exists in 'ecx' and print
mov edx, 1 ;print only a single byte's worth of data
int 0x80 ;invoke kernel to perfrom instruction

mov edx, 0xA ;dividing eax by 10, which will lower its tens place
div edx ;do division: remainder SHOULD be stored in edx
mov byte [edx], 0x0 ;zero out edx
call _print_char ;do printing for latest character
dec byte [counter] ;decrement counter
mov dword [eax], counter ;store counter in eax
jnz _convert_values ;while eax > 0 continue process

mov eax, '
' ;store newline character in eax to be printed
call _print_char ;print value

mov eax, 0x2A ;store 42 in eax
mov edx, 0x2B ;store 43 in edx
mul edx ;multiply [eax] * [edx]

mov eax, 1 ;initiate 'exit' syscall
mov ebx, 0 ;exit with error code 0
int 0x80 ;invoke kernel to do its bidding

nop ;used to keep gdb from complaining

call _mul ;multiply the values
call _convert_values ;do hex to ascii conversion

jmp _safe_exit ;use jmp as opposed to call since it technically doesn't 'ret'

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!