#string #assembly #mips #string-comparison
#строка #сборка #mips #сравнение строк
Вопрос:
У меня есть куча строк в массиве, которые я определил в сегменте данных. Если бы я взял 2 строки из массива, можно ли сравнить их, чтобы увидеть, какая из них имеет большее значение в mips? Как бы мне это сделать? По сути, я хочу переставить строки в алфавитном порядке.
РЕДАКТИРОВАТЬ: это не столько моя попытка получить помощь с конкретной проблемой, а скорее просто общий вопрос, который поможет мне с моим подходом к коду. Спасибо!
Комментарии:
1. Я добавил тег homework, если это не для задания, не стесняйтесь удалить его. Вы также можете опубликовать попытку решения вашей проблемы, чтобы другие могли предложить более прямую помощь.
Ответ №1:
На моем месте я бы создал список указателей на строки. То есть список адресов каждой строки. Затем вы должны написать подпрограмму, которая сравнивает две строки с учетом их указателей. Затем, когда вам нужно поменять местами строки, вы просто меняете местами фактические указатели.
Вы хотите избежать замены самих строк, поскольку они вполне могут быть плотно упакованы, поэтому вам придется много сдвигать, чтобы переместить дыры в памяти. Указатели просто поменять местами. Вы могли бы проще менять местами строки, если бы все они были фиксированной длины (или меньше), тогда вам не пришлось бы беспокоиться о перемещении дыр в памяти.
Но сортировка списка указателей — это действительно горячий совет.
Чтобы сравнить строки, самый простой способ — перебирать каждый символ каждой строки и вычитать их друг из друга. Если результат равен 0, они равны. Если нет, то если результат равен> 0, то первая строка находится перед другой строкой, в противном случае вторая строка ниже, и вы бы поменяли их местами. Если у вас заканчивается одна строка перед другой, и они равны до этого момента, более короткая строка меньше более длинной.
Комментарии:
1. Я использую директиву align для каждой строки, что означает, что я использую . выровняйте 5 для каждой строки, чтобы они были по существу фиксированной длины.