section .data
nums dq 123, 456, 789, 101112, 131415, 161718, 192021 ; числа для проверки
count db 0 ; Счетчик чисел, сумма цифр которых больше 10
exit_code equ 40 ; Код завершения работы программы
output_msg db "Execution complete with exit code ", 0
section .text
global _start
_start:
; Инициализируем счетчик i = 0
mov rsi, 0
input_loop:
; Считываем число из массива nums
mov rax, qword [nums + rsi*8]
; Проверяем, больше ли сумма цифр числа 10
call sumofnumbers
cmp rax, 10
jle not_counted
; Увеличиваем счетчик
inc byte [count]
not_counted:
; Увеличиваем i на 1
inc rsi
cmp rsi, 7
jl input_loop
; Выводим значение счетчика count
mov rax, 1 ; номер системного вызова для write
mov rdi, 1 ; файловый дескриптор stdout
mov rsi, count_str ; адрес начала строки
mov rdx, 1 ; длина сообщения
syscall
; Завершаем программу с указанным кодом
mov rax, 60 ; номер системного вызова для exit
mov rdi, exit_code ; код завершения работы программы
syscall
sumofnumbers:
push rbp
mov rbp, rsp
mov rsi, 0
sum_loop:
test rax, rax
jz sum_done
mov rdx, 10
xor rdi, rdi
div rdx
add rsi, rax
xor rdx, rdx
div rdx
mov rax, rsi
jmp sum_loop
sum_done:
pop rbp
ret
section .data
count_str db 0
цель данного кода проверка чисел nums dq 123, 456, 789, 101112, 131415, 161718, 192021 на то, больше ли их сумма 10, но при попытке компиляции при помощи NASM 2.15.05 (on Linux x86_64) на сайте https://www.mycompiler.io/new/asm-x86_64 выдает ошибку. Вывод должен содержать кол-во чисел у которых сумма цифр больше 10.
Гарантия на работу | 1 год |
Средний балл | 4.64 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |