組み立てようと逆、文字列が追加される文字の文字列
質問
私は新しい組み立て(プログラミングでは、正直であること).ようにしている遊びのスタックです。このコード:
- 込むようになっていて、そのよう文字列に限り、80文字
- 復刻版として文字列の入力
- 印刷、各文字をそのまま押しのスタック
- 印刷各キャラクターとしては、ポップスタックから
- 印刷、逆に文字列になります。
このコードに失敗した最後の一歩です。
の場合は入力した文字列は"Help"で印刷して"pleHe".最後の文字の最終文字列は、2文字の文字列になります。
力を貸してくださいがい相談まで。
.data buffer WORD 81 DUP(0) byteCount WORD ? .code main PROC call Clrscr ;Clear screen RS: mov edx, OFFSET buffer ;Move String to edx mov cl, [SIZEOF buffer]-1 ;Set loop counter to (size of buffer) -1 call ReadString ;Read a User's String mov byteCount, ax ;Move the size of User's String to byteCount cmp byteCount, 80 ;Compare byteCount with 80 ja RS ;If byteCount is greater then 80, ask for another String call WriteString ;Write User's String to screen call Crlf ;New Line call reverseIt ;Reverse order of String exit reverseIt PROC movzx ecx, byteCount ;Set Loop1 Counter to size of String mov esi, 0 ;Zero out ESI L1: ;Loop1 - Pushes String into Stack one character at a time movzx eax, buffer[esi] ;Dereference buffer and place in eax call Crlf ;New Line call WriteChar ;Print current character to screen push eax ;Push current character to stack inc esi ;Move to next character loop L1 call Crlf movzx ecx, byteCount ;Set Loop2 Counter to size of String mov esi, 0 ;Zero out ESI L2: ;Loop2 - Pops Characters back into String in reverse order pop eax ;Retrieve character from top of stack call Crlf ;New Line call WriteChar ;Print current character to screen mov buffer[esi], ax ;Writes character to String inc esi ;Increase esi loop L2 call Crlf ;New Line call Crlf ;New Line mov edx, OFFSET buffer ;Move String to edx for WriteString call WriteString ;Prints String to Screen call Crlf ;New Line ret ;Return to main reverseIt ENDP main ENDP END main
解決
問題
また、貴ASCII文字としての言葉をバイト数ではなく、また逆二つの文字時間:
時の逆、文字列二つの文字、また書これらの値はバッファー:
esi+0: p-
esi+1: lp
esi+2: el
esi+3: He
期間中毎の繰り返しごバッファのようになります。
Help--
p-lp--
plpp--
plel--
pleHe-
くま書くことeのバッファです。こeな示、WriteCharループを実行します。
液
しんのカテコードで知らないようにも見え変更する必要があること:
mov buffer[esi], ax ;Writes character to String
へ
mov ptr byte buffer[esi], al ;Writes character to String
あるんじゃないでしょうか良い方法が変更にこのラインも
buffer WORD 81 DUP(0)
いいバイト数ではなく:
buffer BYTE 81 DUP(0)
他のヒント
このいただきありがとうございます!私はそれが文字列のサイズを制限する最初の部分は、バイトで働いていなかったので、私はバイトではなく言葉を使っていた知っていました。これは、途中で文字列を切断した。
だから私はBYTEにバッファを変更していない。
とは、私は(私は私も、前にしようとしたと思います)、他の変更を行ってみましたが、両方のオペランドを述べ、コンパイルエラーが同じサイズでなければなりません取得保管しました。
私はバイトとして[ESI]バッファをキャストすることによって、これを固定しました! 今では完璧に動作します!ありがとう!
mov byte ptr buffer[esi], al
所属していません StackOverflow