Kargin Alexander p3206 lab 2
14 unresolved threads
first version lab 2
- Last updated by Даниил Садырин
1 ASMFLAGS = -f elf64 2 LD = ld 3 ASM = nasm 4 O = -o 5 6 prog: main.o lib.o dict.o 7 $(LD) $(O) $@ $^ 8 9 %.o: %.asm 1 import subprocess 2 3 file = "./prog" 4 5 strings = ["test", "Shakespeare", "problem", "Me:", "some word", "____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________"] 1 import subprocess 2 3 file = "./prog" 4 5 strings = ["test", "Shakespeare", "problem", "Me:", "some word", "____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________"] 6 7 dicts = ["very cool test! WOW! AMAZING!", "to be or not to be", "What problems do you have? Share with me", "I love you", "", ""] 8 9 errors = ["", "", "","", "String not found", "Incorrect value entered"] 10 5 %define size 256 6 7 section .data 8 not_found: db "String not found", 0 9 error: db "Incorrect value entered", 0 10 11 section .bss 12 input: resb 256 13 14 section .text 15 global _start 16 17 _start: 18 mov rdi, input 19 mov rsi, size 20 call read_word 4 global string_length 5 global print_string 6 global print_newline 7 global print_char 8 global print_int 9 global print_uint 10 global string_equals 11 global read_char 12 global read_word 13 global parse_int 14 global parse_uint 15 global string_copy 16 17 ; Принимает код возврата и завершает текущий процесс 18 exit: 19 mov rax, 60 29 add rdx, 1 30 lea rdi, [rax+rdx] 31 call print_string 32 call print_newline 33 call exit 34 .error: 35 mov rdi, error 36 jmp .print_and_exit 37 .not_found: 38 mov rdi, not_found 39 jmp .print_and_exit 40 .print_and_exit: 41 call string_length 42 mov rdx, rax 43 mov rsi, rdi 44 mov rax, 1 113 test r8b, r8b 114 jz .zero 115 inc rdi 116 inc rsi 117 jmp .loop 118 .zero: 119 mov rax, 1 120 ret 121 .end: 122 ret 123 124 ; Читает один символ из stdin и возвращает его. Возвращает 0 если достигнут конец потока 125 read_char: 126 mov rdx, 1 127 mov rdi, 0 128 mov rax, 0