📄 x86rtllinux.asm
字号:
.comm _print_buf, 320, 4write_syscall = 4read_syscall = 3max_int = 1000000000max_int1 = 100000000fd_out = 1fd_in = 0char_size = 1sys_call_id = 0x80read_buf_len = 319.text.globl _write_char .type _write_char, @function_write_char: pushl %ebp movl %esp, %ebp pushl %eax movl $write_syscall, %eax movl $fd_out, %ebx leal _print_buf, %ecx popl %edx movb %dl, (%ecx) movl $char_size, %edx int $sys_call_id leave ret .size _write_char, .-_write_char.globl _writeln_char .type _writeln_char, @function_writeln_char: pushl %ebp movl %esp, %ebp pushl %eax movl $write_syscall, %eax movl $fd_out, %ebx leal _print_buf, %ecx popl %edx movb %dl, (%ecx) movl $char_size, %edx int $sys_call_id movl $write_syscall, %eax movl $fd_out, %ebx leal _print_buf, %ecx movb $'\n', (%ecx) movl $char_size, %edx int $sys_call_id leave ret .size _writeln_char, .-_write_char.globl _write_digit .type _write_digit, @function_write_digit: pushl %ebp movl %esp, %ebp xorl %ebx, %ebx movb $'0', %bl addb %bl, %dl movb %dl, %al call _write_char leave ret .size _write_char, .-_write_char.globl _write_int .type _write_int, @function_write_int: pushl %ebp movl %esp,%ebp leal _print_buf, %ebx movl $0, %esi movl 12(%ebp), %eax cmpl $0, %eax jge k_positive negl %eax pushl %eax movl $'-', %eax call _write_char popl %eaxk_positive: movl $0, %ebx movl $max_int, %ecx pushl %eaxloop_again: popl %eax xorl %edx, %edx idiv %ecx pushl %edx cmpl $0, %eax jg k_d1000 cmpl $0, %esi jg k_d1000 jmp k_contk_d1000: incl %esi pushl %ecx movl %eax, %edx call _write_digit popl %ecxk_cont: movl %ecx, %eax movl $10, %ecx xorl %edx, %edx idiv %ecx movl %eax, %ecx cmp $0, %ecx jle write_loop_exit jmp loop_againwrite_loop_exit: cmpl $0, %esi jg real_leave movl $'0', %eax call _write_charreal_leave: leave ret .size _write_int, .-_write_int.globl _writeln_int .type _writeln_int, @function_writeln_int: pushl %ebp movl %esp, %ebp movl 12(%ebp), %esi pushl %esi movl 16(%ebp), %esi pushl %esi call _write_int addl $8, %esp movl $'\n', %eax call _write_char leave ret .size _writeln_int, .-_writeln_int.globl _writeln_string .type _writeln_strint, @function_writeln_string: pushl %ebp movl %esp, %ebp movl 12(%ebp), %esi pushl %esi movl 16(%ebp), %esi pushl %esi call _write_string addl $8, %esp movl $'\n', %eax call _write_char leave ret .size _writeln_string, .-_writeln_string.globl _write_string .type _write_string, @function_write_string: pushl %ebp movl %esp, %ebp movl $fd_out, %ebx movl $0, %edx movl 12(%ebp), %esi movl %esi, %ecx_cmp_zero: movb (%esi), %al cmpb $0, %al je _get_zero incl %edx incl %esi jmp _cmp_zero_get_zero: movl $write_syscall, %eax int $sys_call_id leave ret .size _write_string, .-_write_string.globl _read_char .type _read_char, @function_read_char: pushl %ebp movl %esp, %ebp movl $read_syscall, %eax movl $fd_in, %ebx leal _print_buf, %ecx movl $read_buf_len, %edx int $sys_call_id movl 12(%ebp), %ebx movl _print_buf, %eax movb %al, (%ebx) leave ret .size _read_char, .-_read_char.globl _read_int .type _read_int, @function_read_int: pushl %ebp movl %esp, %ebp movl $read_syscall, %eax movl $fd_in, %ebx leal _print_buf, %ecx movl $read_buf_len, %edx int $sys_call_id leal _print_buf, %esi xorl %ecx, %ecx xorl %edi, %edi movb (%esi), %al cmpb $'-', %al jne r_positive incl %edi incl %esir_positive: xorl %eax, %eax movb (%esi), %al cmpb $'0', %al jb r_exit cmpb $'9', %al jg r_exit subb $'0', %al cmpl $max_int1, %ecx jg r_exit pushl %eax movl %ecx, %eax xorl %edx, %edx movl $10, %ecx imull %ecx movl %eax, %ecx popl %eax addl %eax, %ecx incl %esi jmp r_positiver_exit: cmpl $0, %edi jbe r_ret negl %ecxr_ret: movl 12(%ebp), %eax movl %ecx, (%eax) leave ret .size _read_int, .-_read_int.globl _readln_int .type _readln_int, @function_readln_int: pushl %ebp movl %esp, %ebp movl 12(%ebp), %esi pushl %esi movl 16(%ebp), %esi pushl %esi call _read_int addl $8, %esp movl $'\n', %eax call _write_char leave ret .size _readln_int, .-_readln_int.globl _read_string .type _read_string, @function_read_string: pushl %ebp movl %esp, %ebp movl $read_syscall, %eax movl $fd_in, %ebx leal _print_buf, %ecx movl $read_buf_len, %edx int $sys_call_id movl 12(%ebp), %edi leal _print_buf, %esi movl $read_buf_len, %ecx xorl %edx, %edx movb $'\n', %dlread_next_char: movb (%esi), %al movb %al, (%edi) cmpb '\n', %al jz read_over incl %esi incl %edi jmp read_next_charread_over: leave ret .size _read_string, .-_read_string.globl _abs_int .type _abs_int, @function_abs_int: pushl %ebp movl %esp, %ebp movl 12(%ebp), %eax cmpl $0, %eax jg abs_out negl %eaxabs_out: leave ret .size _abs_int, .-_abs_int.globl _sqt_int .type _sqt_int, @function_sqt_int: pushl %ebp movl %esp, %ebp movl 12(%ebp), %eax movl %eax, %ecx xorl %edx, %edx imull %ecx leave ret .size _sqt_int, .-_sqt_int.globl _odd_int .type _odd_int, @function_odd_int: pushl %ebp movl %esp, %ebp movl 12(%ebp), %eax andl $1, %eax leave ret .size _odd_int, .-_odd_int.globl _sqrt_int .type _sqrt_int, @function_sqrt_int: pushl %ebp movl %esp, %ebp movl 12(%ebp), %eax movl $0, %ecx movl $1, %edxsssb: subl %edx, %eax cmpl $0, %eax jl sqrt_out incl %ecx addl $2, %edx jmp sssbsqrt_out: movl %ecx, %eax leave ret .size _sqrt_int, .-_sqrt_int
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -