Просмотр новости

Найдите то, что Вас интересует

segv при элементарном обходе массива

Дата публикации: 23-06-2026 01:53:58



Здарова. Ниже - решение, которое вызывает segv по непонятной причине. пробовал заменить loopneq на loop с ручным выходом, но segv никуда не исчез (loopq вместо loopneq и je exit под cmoveq EXIT_SUCCESS). задача - найти val в arr
.equ QLEN, 8 # размер quadword
.equ SYS_EXIT, 60 # номер выхода
.equ EXIT_FAILURE, 0 # код "не найден"
.equ EXIT_SUCCESS, 1 # код "найден"
.section .data
val: .quad 9 # значение, которое ищем в массиве
len: .quad 5 # длина массива
arr: .quad 4, 9, 3, 8, 4 # массив
.section .text
.globl _start
_start:
movq val, %rax # грузим val, который ищем в массиве
movq EXIT_FAILURE, %rdi # грузим код "не найден"
movq len, %rcx # грузим длину массива
cmpq $0, %rcx # проверяем на наличие элементов
je exit # завершаем при отсутствии элементов
loop:
# итерация с последнего элемента по первый
movq arr-QLEN(,%rcx,QLEN), %rdx # arr - 8 + rcx * 8 (первая итерация - последний элемент)
cmpq %rdx, %rax # сравниваем загруженный элемент с val
cmoveq EXIT_SUCCESS, %rdi # если равен, грузим код успеха
loopneq loop # если не равен, итерируем (декремент rcx, итерация. если rcx == 1, итерация превратит его в 0 и не прыгнет)
exit:
movq SYS_EXIT, %rax # грузим код выхода
syscall # выходим
c чем связан segv?
спс



 gas, x86-64

Классификация: Общество

Схожие новости

#Наименование новостиТональностьИнформативность
1Почему надо проверять malloc на NULL00
2Поиск всех путей на графе (Небольшой тест. Часть 2)00
3Линукс на Intel 400400
4Bug00
5MEC Confirmation Emails00
6Ноутбучный кулер сбрасывает обороты с thinkpad_acpi00
7Archive page + CS form with error using a loading area element00
8Cloudflare verification confilict infinate loop00
9Re: Возможно проблема с SSD00