2017-05-08 3 views
0

Die Aufgabe ist folgende:
Es gibt eine Zeichenfolge aus dem Alphabet zum Beispiel fgh. Ich muss diese Zeichenfolge mit n Letters mit der angegebenen Richtung verschieben. Zum Beispiel, wenn die Richtung 1 ist, und n = 3 der Ausgang wäre ijk. Ich habe ein Programm erstellt, das diese Verschiebungen berechnen kann, aber wenn es das Ende des Alphabets erreicht, würde es die folgenden Zeichen in die ASCII-Tabelle schreiben. Wenn der Eingang beispielsweise vwy ist, lautet die Ausgabe yz {. Es ist ein Code-Snippet, dass ich derzeit haben:
Assembly-Programm zum Verschieben einer Zeichenfolge mit einer bestimmten Anzahl von Zeichen

loop1: ; if the direction is forwards 
     MOV AL, [ESI] 
     CMP AL, 0 
     JE end 

     ADD AL, 3 
     INC ESI 
     Call WriteChar 
     LOOP loop1 
loop2: ; if the direction is backwards 
     MOV AL, [ESI] 
     CMP AL, 0 
     JE end 

     SUB AL, 3 
     Call WriteChar 
     INC ESI 
     LOOP loop2 

Können Sie mir helfen, und mir zeigen, wie kann ich diesen Code ändern mit dem Eingang zu arbeiten ( xyz, n = 3) oben?

Antwort

0

Wenn Sie nach oben "verschieben", nachdem Sie das Zeichen geändert haben, müssen Sie es mit dem letzten Zeichen im Alphabet vergleichen, und wenn es diesen Wert überschritten hat, dann müssen Sie etwas damit machen. Was damit zu tun ist, sollte in der Definition der "Aufgabe" spezifiziert worden sein, es beinhaltet wahrscheinlich das Umwickeln des Alphabets, also im Wesentlichen Subtrahieren von 26 davon.

Wenn Sie "nach unten" verschieben, müssen Sie das Gegenteil tun: Vergleichen Sie den neu berechneten Charakter mit dem ersten Zeichen im Alphabet, und wenn es darunter liegt, fügen Sie 26 hinzu.

"Die Codierung in der x86-Baugruppe wird dem Schüler als Übung überlassen."

+0

sollte es nicht 26 sein? ;) – Tommylee2k

+0

@ Tommylee2k wh00ps, ja, 26. Ich habe es behoben. –

+0

'26 == ('z' + 1-'a ')', wenn Sie faul sind, diese Buchstaben zu zählen ... (funktioniert vielleicht nicht mit einem sehr einfachen Assembler, aber die meisten x86-Assembler kompilieren glücklicherweise ASCII char-Literal in den richtigen numerischen Wert) – Ped7g

Verwandte Themen