Probléma összehasonlítjuk két karakter, az egyik, amit kap egy string közvetett címzés

szavazat
0

Így vagyok egy újszülött a szerelvény, és szükségem van egy kis segítség a memóriát címeket. (Azt hiszem, a memória címeket, de nem vagyok biztos) Szóval, van egy húr, és szeretnék találni, ahol nem a karakter% bekövetkezik.

Így csináltam egy hurkot, és költözött az értéket 37 egy regiszter (37 ASCII értéke%) és az első próbáltam összehasonlítani, hogy regisztrálni mystring (% számláló), ahol a számláló a nyilvántartásban, hogy használni, mint egy index fokozatosan emelkedő azt minden alkalommal 1 végén a hurok. Aztán rohantam a hibakereső eszköz, és látta, hogy az hasonlítson mindig hamis. Így mentem értéke mystring (% számláló) egy másik regiszterben, és amikor futott a gdb újra láttam, hogy volt egy nagyon nagy szám van. Szóval, azt hittem, hogy ez egy memória cím, vagy valami, és megpróbálta betölteni mystring (% számláló) egy nyilvántartásba. Sem ezt a munkát.

.szöveg

mystring: .asciz AsDB% asd% af // ez hogyan nyilvánították én húr

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

Annak érdekében, hogy ugrás, ha egyenlő sohasem történik akkor is, ha mystring (% r14) pontot a%, és amikor futott a debugger azt mutatta, hogy egy nagy szám fejszét. (Én is próbáltam átméretezni a nyilvántartások, mint reméltem, hogy megváltoztatná az értékek valahogy, ezért használtam a w utótagot.) PS Ez az első post itt, így nem túl kemény, ha nem tartják tiszteletben egyes szabályokat, vagy valami. :)

A kérdést 10/10/2019 00:44
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Számos probléma ezzel a kóddal.

  1. A sztring 8 bites ASCII karaktereket, így a kódot kell használni egy 8-bites összehasonlítást.
  2. Ez nem mindig olvassuk le a karaktert a húr.
  3. Soha nem kilép a ciklusból, ha a „%” karaktert nem található.

Itt a kód e problémák fix.

.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
     jge endloop1

     movb $37, %bl
     movb mystring(%r14), %al
     cmpb %bl, %al
     je something
     incq %r14
     jmp loop1

endloop1:

Van néhány további javaslatokat, hogy javítsa ezt a kódot:

  1. Tedd a hurok ellenőrzés végén a hurok.
  2. Cserélje ki az movb, és cmpbutasításokat egyetlen utasítással.

         cmpq %r9, %r14    // This check may not be necessary if the string
         jge skiploop1     // length is known to be greater than 0.
    
     loop1:
         cmpb $37, mystring(%r14)
         je something
         incq %r14
         cmpq %r9, %r14   // r9 is the length of the string, r14 is the 
                          // index
         jl loop1
    
     skiploop1:
    
Válaszolt 10/10/2019 02:49
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more