2016-04-05 5 views
-5

Wie kann ich eine Zeichenfolge mit zwei separaten Byte-Arrays umkehren?Wie kann ich eine Zeichenfolge mit zwei separaten Byte-Arrays umkehren?

Schreiben Sie ein Programm mit der Anweisung LOOP mit indirekter Adressierung, die eine Zeichenfolge von der Quelle zum Ziel kopiert und dabei die Zeichenreihenfolge umkehrt.

Verwenden Sie die folgenden Variablen:

source BYTE "This is the source string",0 
target BYTE SIZEOF source DUP ('#') 
+7

Wir machen Ihre Hausaufgaben nicht für Sie. – GAntoine

+1

Mögliches Duplikat von [Wie man eine Zeichenfolge in Assemblersprache umkehrt?] (Http://stackoverflow.com/questions/26368586/how-to-reverse-a-string-in-assembly-language) – akashrajkn

+0

Ich stimme zu, dass dies ist nahe an der Wie man eine Schnur umkehrt, aber es ist ein bisschen anders, da es ist, es (zu einer neuen Position) zu kopieren, anstatt, wie man eine Schnur rückwärts ausgibt. –

Antwort

2

Das Problem ist ziemlich einfach. Verwenden Sie die indirekte Adressierung (mit anderen Worten, verwenden Sie nicht direkt die Speicheradressen, sondern referenzieren Sie sie vielleicht über ein Register) und kehren Sie die Zeichenfolge um. Zum Beispiel, hier sind unter der Annahme, einige Barebones, dass Sie bereits Quell- und Ziel definiert haben:

MOV SI, source ; Get source address 
MOV DI, (target + SIZEOF source) ; Get the ending address for target 
LOOP: 
    MOV AL, [SI] ; Get a byte 
    MOV [DI], AL ; Store a byte 
    INC SI   ; Move forward one in source 
    DEC DI   ; Move back one in target 
    CMP AL, 0  ; Have we reached the zero termination? 
    JNZ LOOP 
RET 

Dies ist keineswegs gemeint, vollständig oder funktional sein. Sie müssen zum Beispiel einen besseren Weg finden, die Länge von SOURCE dynamisch zu bestimmen. :) Ich möchte jedoch nicht die Freude des Lernens von dir wegnehmen. Dies sollte zumindest ein guter Ausgangspunkt sein.

+0

_ "' target + SIZEOF source' "_. Müsstest du 'DI' dann nicht innerhalb der Schleife dekrementieren? – Michael

+0

Möglicherweise ... Wie gesagt, ich versuche nicht wirklich, es für ihn zu lösen, bring ihn einfach dazu. –

+0

können Sie mir geben antworte bitte – sinan