2017-11-01 18 views
0

ループを使用して文字を垂直に印刷する方法はいくつかあります。たとえば、アセンブリ言語で(0,0)から(0,10)まで 'l'を印刷します。私はemu8086を使用しています。私は、これらの命令が行うことになっている何列アセンブリ言語で垂直文字を印刷する方法

org 100h 

mov ax, 3 
mov ah, 0 
mov al, 3 
int 10h   

mov cl,10 
print: 
mov ah,02 
mov bh,0       
mov dh,cl ;y 
mov dl,0 ; x 
int 10h 

mov ah,09 
mov bh,0  
mov bl,00Fh 
mov al,'l' 
mov cx, 1 
int 10h 
loop print 

ret 

Output

+0

あなたは「縦に印刷する」とはどういう意味ですか? 'l'を' -'として表示するか、 'abc'のような文字列の各文字を1行に出力しますか? –

+0

はい。それを行う方法は何百万もあります。何十億もの方法があれば、私はあなたがしようとしていることは間違いなく効くだろうと言うことを敢えてします。 (ただし、フォントデータを変更しない限り、テキストモードの文字は上にとどまります)=>あなたの質問を編集し、多くの情報を追加します(回転文字、gfxモード、何を試しましたか?あなたは解決していますか?)今のように、これはあまりにも広すぎる/曖昧なものです – Ped7g

+0

8ビット=値0..255または-128 .. + 127(またはあなたのコードでコードするための他の解釈)。 16ビット= 0..65535または-32768 .. + 32767(またはあなたがコードしているもの)。 'dh'は' dx'の上位8ビット(16bレジスタ)のエイリアスです。 'cx'は16ビットのレジスタです。普通の 'mov'は、異なるデータサイズの変換を扱うことができません(' movzx/movsx'はより小さなサイズの値を拡張できます)。あなたのケースでは、 'mov dh、cl'はあなたが望むものを達成します。なぜなら、' cx'ウィルは10だけしか通らないからです。1の範囲であり、16ビットのレジスタでは、このような小さい数のために4ビットのみが有効に使用されるので、低い8ビットの「cl」のみを使用することはOKです。 – Ped7g

答えて

1
mov ax, 3 
mov ah, 0 
mov al, 3 

を変更することなく、別の行に印刷を行くことを意味ですか?
int 10hを入力して80x25のテキストビデオモードを設定するのを忘れてしまったと思いますか?


プログラム中の基本的なエラーが(すべてPed7gのコメントでカバー)あなただけloop命令が全体CXレジスタに依存して、あなたのループカウンタとしてCLレジスタを初期化し、さらにあなたが誤って変更されていることということでしたそれで、CXを2番目の目的に使用することができます。あなたはできるだけ多くの指示を置く効率的なプログラムを取得するには


...(0,10)に(0,0)から 'L' を印刷し...

  • あなたはループの外に出ることができます。繰返し回数がCX、表示ページがBH、表示属性がBL、および列がDLであり、ループ全体で不変であるため、その外側に配置することができます。
  • 最近はあまり速くないので、loop命令の使用も控えてください。
  • ALAHのようなバイトサイズのレジスタに値を格納する必要がある場合は、ワードサイズのAXレジスタを使用して1回の操作でそのようにしてください。 BX,CX、およびDXレジスタについても同様です。

次のコードは、上記が適用されます。

ORG 256 
    mov ax, 0003h  ;BIOS.SetVideoMode AH=00h, Mode 80x25 AL=3 
    int 10h 
    mov bx, 000Fh  ;Display page BH=0, Display attribute BL=0Fh 
    mov cx, 1   ;Repetition count CX=1 
    mov dx, 0A00h  ;Row DH=10, Column DL=0 
print: 
    mov ah, 02   ;BIOS.SetCursor 
    int 10h 
    mov ax, 0900h + 'l' ;BIOS.DisplayCharacter AH=09h, Character AL='l' 
    int 10h 
    dec dh    ;Go one row up 
    jns print   ;Will stop when DH becomes -1 
    ret     ;Back to DOS (works for a .COM program) 
関連する問題