Создание подстроки на ассемблере Linux IA-32 (газ)

Я хочу создать подстроку (министроку) из 3 символов asciz из моего оригинала (строка). Во время работы штука не печатает, так что я не знаю, что, черт возьми, делаю. Почему не печатается? Правильно ли я создаю министроку?

.section .data

thestring: .asciz "111010101"

ministring: .asciz ""

formatd:    .asciz "%d"
formats:    .asciz "%s"
formatc:    .asciz "%c"




.section .text

.globl _start

_start:

xorl %ecx, %ecx

ciclo:movb thestring(%ecx,1), %al
movzbl %al, %eax
movl %eax, ministring(%ecx,1)
incl %ecx
cmpl $3, %ecx
jl ciclo


movl thestring, %eax
pushl %eax
pushl $formats
call printf
addl $4, %esp


movl $1, %eax
movl $0, %ebx
int $0x80
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
764
1

Ответы 1

Вы не зарезервировали достаточно места в памяти, чтобы содержать мини-строку с завершающим нулем, которую вы создаете ... поэтому, когда вы пишете в эту память, вы перезаписываете значение formatd и форматов (и поэтому вы в конечном итоге передаете что-то кроме "% s" для printf).

Вместо вашего определения ячейки памяти министрок попробуйте использовать следующее:

ministring: .asciz "   "

Также вместо этого:

movl %eax, ministring(%ecx,1)

Я не понимаю, почему вы не используете это вместо этого:

movb %al, ministring(%ecx,1)

Также, если вы хотите распечатать министроку, вместо этого:

movl thestring, %eax

Сделай это:

movl ministring, %eax

Также вместо этого:

addl $4, %esp

Почему не это:

addl $8, %esp

Также я предлагаю вам использовать отладчик, чтобы:

  • Выполните код
  • Наблюдайте за значениями, содержащимися в регистрах и в памяти, когда вы проходите через
  • Знайте местонахождение любой ошибки сегментации

Я отредактировал свой пост, чтобы добавить предложение использовать movb вместо movl. Кроме того, возможно, вам следует использовать отладчик для пошагового выполнения этого кода, а также для проверки памяти и содержимого регистра.

ChrisW 31.12.2008 12:42

Сделал оба изменения. По-прежнему выдает ошибку сегментации

andandandand 31.12.2008 12:49

Я снова отредактирую, чтобы также предложить вам поменять местами последовательность, в которой вы нажимаете параметры.

ChrisW 31.12.2008 12:58

Нет, я не буду предлагать этого (но "addl $ 4,% esp" будет иметь для меня больше смысла, чем "addl $ 4,% esp").

ChrisW 31.12.2008 13:04

Я имел в виду, что фраза «addl $ 8,% esp» будет для меня более понятной.

ChrisW 31.12.2008 13:10

Да, но эта последняя инструкция не имеет значения, если последуют системные вызовы и вызовы выхода. Вы даже можете опустить addl, если больше не будете работать со стеком. Были ли предложены все изменения, и в результате все еще возникла ошибка сегментации.

andandandand 31.12.2008 18:52

Вы все время это говорите, а мне приходится гадать: так, где это ошибка ?? Используйте отладчик !! Кроме того (я не знаком с этим ассемблером), является ли оператор "pushl $ форматы", подталкивающий адрес или выталкивающий содержимое памяти "форматов"? Будет ли лучше "форматы pushl"?

ChrisW 31.12.2008 19:05

Другие вопросы по теме