.text .global readchar # local long result # local char ch # result = read(0, &ch, 1) # if result != 0 # return ch # else # return -1 # endif readchar: oldBP = 0 retAddr = oldBP + 4 result = oldBP - 4 ch = result - 2 pushl %ebp movl %esp,%ebp addl $ch,%esp # result = read(0, &ch, 1) movl $0,%ebx movl $3,%eax movl $1,%edx movl %ebp,%ecx addl $ch,%ecx int $0x80 movl %eax,result(%ebp) #if result != 0 cmpl $0,result(%ebp) jz eof movw $0,%ax movb ch(%ebp),%al jmp end_of_sub # result != 0 eof: movw $-1,%ax end_of_sub: subl $ch,%esp popl %ebp ret