I'm trying to print out value from register EDX on the screen. The program should find the maximum depth of paranthesis e.g for ((x)) EDX = 2
And I can't use stdlib. My program using stdlib
.intel_syntax noprefix
.globl main
.text
main:
pop eax #return address
pop eax #return argc
pop eax #return argv
mov eax,[eax+4] #argv[1]
sub esp,12 #return stack to the right position
lea ebx,[eax]
xor eax,eax
xor ecx,ecx
xor edx,edx
loop:
mov al,[ebx]
or al,al
jz print
cmp al,'('
je increase
cmp al,')'
je decrease
inc ebx
jmp loop
increase:
inc ecx
cmp edx,ecx
js changeMax
inc ebx
jmp loop
changeMax:
mov edx,ecx
inc ebx
jmp loop
decrease:
dec ecx
inc ebx
jmp loop
print:
push edx
mov edx, offset mesg
push edx
call printf
add esp,8
ret
mov edx,0
ret
data:
mesg: .asciz "%d\n"
I read, that I need to use modulo, and push remainder into stack. Is it another way to do this (proffesor said something about shifting hexadecimal value)
Update
This should work, but I got segmentation fault
.intel_syntax noprefix
.text
.globl _start
_start:
op eax #return address
pop eax #return argc
pop eax #return argv
mov eax,[eax+4] #argv[1]
sub esp,12 #return stack to right position
lea ebx,[eax]
xor eax,eax
xor ecx,ecx
xor edx,edx
loop:
mov al,[ebx]
or al,al
jz result
cmp al,'('
je increase
cmp al,')'
je decrease
inc ebx
jmp loop
increase:
inc ecx
cmp edx,ecx
js changeMax
inc ebx
jmp loop
changeMax:
mov edx,ecx
inc ebx
jmp loop
decrease:
dec ecx
inc ebx
jmp loop
result:
mov eax, edx # moving result into eax, because of div operation
conv:
mov ecx, 10
xor ebx, ebx
divide:
xor edx, edx
div ecx
push edx
inc ebx
test eax, eax
jnz divide
next_digit:
pop eax
add eax, '0'
mov [sum], eax
dec ebx
cmp ebx, 0
je final
pop eax
add eax, '0'
mov [sum+1], eax
dec ebx
cmp ebx, 0
je final
pop eax
add eax, '0'
mov [sum+2], eax
dec ebx
cmp ebx, 0
je final
final:
mov edx, 3 #length of string
mov ecx, offset sum
mov ebx, 1
mov eax, 4
int 0x80
mov edx, 1
mov ecx, offset msg
mov ebx, 1
mov eax, 4
int 0x80
mov eax, 1
int 0x80
.data
msg: .ascii "\n"
sum: .byte 0, 0, 0, 0
Ok, it's my solution.