Как сравнить символ «/ 0» без его преобразования в «0» - PullRequest
0 голосов
/ 05 мая 2019

У меня есть домашнее задание в классе компьютерной архитектуры, которое заключается в написании кода на языке ASM (32 бита), который удаляет определенный символ из заданной строки, а также дает мне новую длину (исключая '/ 0')

  • Пример: "Hello \ n \ 0"
  • Символ для удаления: 'l'
  • Результат: "Heo \ n \ 0"
  • Длина: 4

Я могу удалить любой символ из строки, однако, в качестве теста, чтобы проверить, может ли программа работать в любой ситуации, у меня есть условие, чтобы проверить, равен ли этот символ / 0, и каждый раз, когда я делаю это, Сбой сравнения, поскольку он переводит «/ 0» в «0». Я читал в Интернете, что когда вы пишете '/', это равняется записи (char), которая возвращает форму в виде символа.

  • Пример: (char) 1 = '1'

Можно ли как-нибудь сравнить символ '/ 0' без его преобразования? Я также не могу изменить раздел данных, поскольку он является частью правил домашней работы, только то, что находится между '' и "".

Ниже я представляю свой код

Моя переменная называется remove и объявлена ​​так:

  • удалить: .byte '/ 0'

Я тогда делаю:

mov remove, %cl
cmp $0, %cl
jz goToEnd

если нулевой флаг установлен в 0, тогда я заканчиваю свою функцию, однако это никогда не происходит, поскольку% cl получает значение в десятичном виде 48, соответствующее '0'.

1 Ответ

1 голос
/ 05 мая 2019

У вас есть /0 в нескольких местах.косая черта не особенная ;'/0' является 2-байтовой константой в asm.

Убедитесь, что вы пишете '\0', если имеете в виду байт с целочисленным значением 0, терминатор для строк C неявной длины.

(Так что нет, вы не можете удалить его из конца строки; это является концом строки. Если у вас нет строк с явной длиной, в этом случае вы удаляете последний байт с помощьюуменьшение длины на 1)

Обратная косая черта является escape-последовательностью в C, а также в строках GAS, поэтому вы можете написать '\n' вместо целого числа 10.https://en.wikipedia.org/wiki/Escape_sequences_in_C

Обычно в синтаксисе GAS вы получаете нулевой терминатор для строк, используя директиву .asciz или .string, хотя.

...