Итак, я новичок в сборке, и мне нужна помощь с некоторыми адресами памяти. (Я думаю, что это адреса памяти, но я не уверен). Итак, у меня есть строка, и я хочу найти, где встречается символ%.
Итак, я сделал цикл и переместил значение 37 в регистр (37 - значение ascii%), и сначала я попытался сравнить этот регистр с mystring (% counter), где counter - регистрчто я использовал в качестве индекса, увеличивая его на 1 каждый раз в конце цикла. Затем я запустил инструмент отладки и увидел, что сравнение всегда ложно. Итак, я переместил значение mystring (% counter) в другой регистр, и когда я снова запустил GDB, я увидел, что там было очень большое число. Итак, я подумал, что это адрес памяти или что-то еще, и попытался загрузить mystring (% counter) в регистр. Ни один не сделал эту работу.
.text
mystring: .asciz "asdb%asd%af " //that's how I declared my string
loop1:
cmpq %r9 , %r14 //in r9 I have the length of the string, r14 is the
//index
jl if1
if1:
movw $37 , %bx
leaw mystring(%r14) , %ax
cmpw %ax , %bx
je something
incq %r14
jmp loop1
Так что скачок при равенстве никогда не произойдет, даже если mystring (% r14) указывает на%, а когда я запускал отладчик, он показал большое число в топоре. (Я также пытался изменить размеры регистров, так как надеялся, что это как-то изменит значения, поэтому я использовал суффикс w.) PS Это мой первый пост здесь, так что не будьте слишком резкими, если я не соблюдаю некоторые правила иличто-то. :)