質問

私は新しい組み立て(プログラミングでは、正直であること).ようにしている遊びのスタックです。このコード:

  • 込むようになっていて、そのよう文字列に限り、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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top