169 похожих чатов

Может кто помочь с насм в линуксе? asm section .data

numbers db 5, 2, 8, 1, 6, 3, 9, 4, 7
len equ $ - numbers
format db "Max number: %d", 0xA, 0

section .text
global _start

_start:
; Сортировка пузырьком
mov ecx, len
dec ecx
outer_loop:
xor esi, esi
inner_loop:
mov eax, esi
inc eax
mov edi, esi
mov bl, [numbers + esi]
cmp bl, [numbers + eax]
jge not_swapped
mov al, [numbers + esi]
mov ah, [numbers + eax]
mov [numbers + esi], ah
mov [numbers + eax], al
not_swapped:
inc esi
cmp esi, ecx
jnz inner_loop
dec ecx
jnz outer_loop

; Последний элемент массива после сортировки - самый большой
movzx eax, byte [numbers + ecx]

; Вывод самой большой цифры
mov edi, format
mov esi, eax
call print_number

; Выход из программы
mov eax, 60
xor edi, edi
syscall

; Функция преобразования числа в строку и вывода строки
print_number:
push rax ; сохраняем регистры
push rdx
push rbx
push rcx

mov ecx, 10 ; десятичная система счисления
mov rbx, 0 ; счетчик цифр

.loop:
xor rdx, rdx ; сбрасываем rdx для деления
div rcx ; делим rsi на 10, остаток в rdx, результат в rsi
add dl, '0' ; преобразуем остаток в ASCII
push rdx ; сохраняем цифру на стеке
inc rbx ; увеличиваем счетчик цифр
test rsi, rsi ; проверяем, закончили ли мы
jnz .loop ; если нет, продолжаем

.print_loop:
pop rdx ; достаем цифру из стека
mov rax, 1 ; системный вызов для вывода
mov rdi, 1 ; файловый дескриптор (stdout)
mov rsi, rdx ; указатель на цифру
mov rdx, 1 ; длина сообщения (1 байт)
syscall ; вызываем системный вызов

inc rdx ; увеличиваем длину для следующей цифры
dec rbx ; уменьшаем счетчик цифр
jnz .print_loop ; если есть еще цифры, выводим их

pop rcx
pop rbx
pop rdx
pop rax
ret
mark@mark-ASUS-TUF-Gaming-A15-FA506QM-FA506QM:~/prog$ nasm -f elf64 bubblesort.asm -o bubblesort.o
mark@mark-ASUS-TUF-Gaming-A15-FA506QM-FA506QM:~/prog$ ld -o bubblesort bubblesort.o
mark@mark-ASUS-TUF-Gaming-A15-FA506QM-FA506QM:~/prog$ ./bubblesort
Segmentation fault (core dumped)
Вроде нормально,а чувство что что то все таки не так

3 ответов

71 просмотр
Mark- Автор вопроса

mov edi, esi тут надо было mov edi , eax но все равно не работает,походу еще где то ошибка

Видишь core dumped — пишешь coredumpctl gdb и пошёл. Ну или сам под gdb запускаешь.

Mark- Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта