Homework 0
This commit is contained in:
commit
49bca7f856
2 changed files with 78 additions and 0 deletions
5
HW0/Makefile
Normal file
5
HW0/Makefile
Normal file
|
@ -0,0 +1,5 @@
|
|||
all:
|
||||
gcc -m32 -o read-write read-write.s
|
||||
|
||||
clean:
|
||||
rm -f read-write
|
73
HW0/read-write.s
Normal file
73
HW0/read-write.s
Normal file
|
@ -0,0 +1,73 @@
|
|||
.section .data
|
||||
inp_buf: .byte 0
|
||||
|
||||
.section .text
|
||||
|
||||
.globl main
|
||||
# /*; System call to read from standard input into buffer
|
||||
# ; eax= code of syscall (read = 3)
|
||||
# ; Arguments: ebx= file descriptor (0 is stdin)
|
||||
# ; ecx= pointer to buffer
|
||||
# ; edx= maximum number of bytes to read
|
||||
# ; Return value: eax= number of bytes read*/
|
||||
main:
|
||||
# Read into buffer
|
||||
mov $3, %eax
|
||||
mov $0, %ebx
|
||||
mov $inp_buf, %ecx
|
||||
mov $1, %edx
|
||||
int $0x80
|
||||
|
||||
# Transform from ascii to int
|
||||
sub $0x30, (inp_buf)
|
||||
|
||||
mov (inp_buf), %esi
|
||||
|
||||
loop:
|
||||
# Read new value
|
||||
mov $3, %eax
|
||||
mov $0, %ebx
|
||||
mov $inp_buf, %ecx
|
||||
mov $1, %edx
|
||||
int $0x80
|
||||
# if non number, jump to end
|
||||
cmp $0xA, (inp_buf)
|
||||
je end
|
||||
# Substract 0x30
|
||||
sub $0x30, (inp_buf)
|
||||
# Multiply esi by 10
|
||||
imul $10, %esi
|
||||
# Add value to esi
|
||||
add (inp_buf), %esi
|
||||
jmp loop
|
||||
end:# Print result
|
||||
|
||||
add $1, %esi
|
||||
mov %esi, %eax
|
||||
|
||||
xorl %esi, %esi
|
||||
|
||||
loop2:
|
||||
movl $0, %edx
|
||||
movl $10, %ebx
|
||||
divl %ebx
|
||||
addl $48, %edx
|
||||
push %edx
|
||||
incl %esi
|
||||
cmpl $0, %eax
|
||||
jz next
|
||||
jmp loop2
|
||||
|
||||
next:
|
||||
cmpl $0, %esi
|
||||
jz exit
|
||||
decl %esi
|
||||
movl $4, %eax
|
||||
movl %esp, %ecx
|
||||
movl $1, %ebx
|
||||
movl $1, %edx
|
||||
int $0x80
|
||||
addl $4, %esp
|
||||
jmp next
|
||||
|
||||
exit:
|
Loading…
Reference in a new issue