2017-02-05 19 views
0

私はこの数日間、私が取り組んできたこのアセンブリコードを持っています。それはAからJへの文字を印刷する条件を持っているが、各文字の間にアスタリスクを付けた宿題のためのものです。 出力:A * B * C * .... J *。アセンブリ内のCXカウンタのインクリメント(TASM)

追加する必要がある制限は、1つのデータコンテナdlのみを使用できることです。さらに、ループとジャンプの条件のみを使用できます。

私はほとんど仕事を終えましたが、私のカウンターcxが私のコード内でうまく増分していない理由を理解することに問題がありました。インクリメントが動作する場合、私はどうなると思いますが、すべての時間は、プロセスがcxが増加していることを考えると、Xにジャンプして、ループyに渡されていること、それがループます

.model 
.code 
org 100h 
s: mov ax, 3 ; 
    int 10h  ; just clearing the screen 
    mov ah, 2 
    mov cx, 1 ; counter is just set to one for possible increment 
    mov dl, 'A' ; A is added to data container 
    int 21h  ; prints out A 
x: mov dl, '*' ; first asterisk is then added to container, replacing A 
    int 21h  ; asterisk is printed out A* 
    mov dl, 'A' ; asterisk is replace by A in the counter 
y: inc dl  ; 
    loop y  ; loops at y then increments container dl, A + 1-> B 
    int 21h  ; prints out container, A*B 
    inc cx  ; where the problem lies. Should increment but not 
    cmp dl, 'J' ; if the character in container is not above j, jumps to.. 
    jna x  ; ..where x is 
    int 20h  ; ends but doesnt due to infinite looping, container not reaching 'J' 
end s 

とインクリメント:ここに私のコードですコンテナcxが複数のインクリメントの後にどのくらい保持するかによって異なります。これは、コンテナが文字Jの上に到達する条件に達することにつながります。

これは私の問題です。私が得ることができるあらゆる助けのための事前にありがとう。

+1

incの代わりにaddを使用している可能性があります。 add命令は、cx、1またはw.eを追加します。 – Jerinaw

+0

私はタスクの記述を得ていません、それは "dl"の "制限"を意味しますか?あなたは 'cx'もデータに使用しています。そして、もしあなたがcharごとのストリーム出力をしているのであれば、 '' * ''値で 'dl'を破壊し、それを文字に戻す必要があるでしょうから、データ用に別のものを使う必要があります。だから、まさに限界は何ですか?メモリバッファはありませんか?スタックの使用はありませんか? 'dh'は使用できません。なぜ 'cx'できますか?ところで、あなたは 'int 21h'なしでVRAMに直接書くことができますか? :Dそれでは、それは簡単です:D(実際には、ptrを書き込むためにもっと多くのレジスタが必要です) – Ped7g

+0

ああ、申し訳ありませんが、私は言いたいはずの制限はdlの値を保存できないと思います別の容器に移す。 '*'を追加してループやジャンプ条件を使って自分のやり方で復元することで破壊する必要があります。 – Emanhero

答えて

3

デバッガを使用すると分かりますが、これはうまく増分しています。問題は、loopコマンドがあり、0になるまでCXをデクリメントすることです。したがって、増分すると、常にCXは1になります。

loopの前にスタックするようにCXをプッシュし、値を保持したい場合はポップアウトします。デバッガをつかんでコードを自分でデバッグしてください。

CXで増分したいので、単にADD DL, CLと言ってループを使用しないのはなぜですか?

+0

ありがとうございます。 :私は代わりに '追加'を実装しようとします。 – Emanhero

関連する問題