2016-06-27 9 views
1

しかし、それにもかかわらず、誰も私にどのような目的を説明することができますcxとdxレジスタはINT 10hでah = 6/7(彼らは両方とも同じ変数を使用して別の方向にスクロールします)。Int 10h、AH 6h/7hの引数の意味は何ですか?

どこでも

私はそれを見てきただけで、これに似たような言葉:

CH =アッパー行番号、CL =左列番号、DH =下行番号、DLは=右列番号を

これは本当に私にはあまり意味がありません、誰かが私のような誰かが愚かな方法でこれを説明することができます理解することができますか?

+1

ウィンドウ(画面の長方形部分)をスクロールできます。その座標でウィンドウを指定します。ちょうどそれを試してみてください:) – Jester

答えて

1

16ビットレジスタCXは、CLとCHと呼ばれる2つの8ビット半分に分割できます。 CLは上位8ビット(CH igh)ですが、CLは下位8ビットです(ニーモニックはCL owと考える)。
DXレジスタも同様です。下位8ビットはDLにあり、上位8ビットはDHにあります。実際

、x86のの主な汎用レジスタ-EAX、EDX、ECX、およびEBX-持っている8ビットおよび16ビットの重複エイリアスのすべての4:

------------------------------------ 
|    EAX    | (32 bits) 
----------------------------------- 
       |  AX  | (16 bits) 
       ------------------- 
       | AH | AL | (8 bits) 
       ------------------- 

だから、のドキュメントint 10h関数は、CX(CL)の下位8ビットがウィンドウの一番左の列を含み、CX(CH)の上位8ビットがウィンドウの一番上の行を含むことを示しています。 DX(DL)の下位8ビットはウィンドウの右端の列を含み、DX(DH)の上位8ビットはウィンドウの最下位行を含む。

つまり、の矩形を説明する関数値を、その左上、上端、右端、および下端の境界で渡しています。 CXにはウィンドウの左上の座標を指定する2つの8ビット値が含まれ、DXにはウィンドウの右下座標を指定する2つの8ビット値が含まれます。

(。私は、「ウィンドウ」はここで、私は「画面上の矩形領域をスクロールする」という意味と言う)

7

老いたテキストモードで塗装赤い長方形の窓のこの目を刺しサイケデリック絵を考えてみましょう:

Rectangular red window

各白青色の正方形は、文字セルを表します。セルは右上にあり、の最上部はです。 上の数字は、下に読んで、左端からセルの距離を示します。
左の数字は、上からセルの距離を示しています。

(上から左、距離からの距離)は、各セルのためのユニークな、ペアまたは単に(あるいはCOORDS)の座標を座標と呼ばれています。
それはXとしてトップからの距離Y何か-X何か-Yとして高さに関連するすべてのものとして幅に関連するすべてのもののように左からの距離を呼ぶのが通例です。

大きな赤い矩形は、ウィンドウです。
Windowsには2つの次元と位置があります。したがって、ウィンドウは、三角形(左上隅の位置座標、サイズ-X、サイズ-Y)で識別できます。
たとえば、赤いウィンドウは、(30,8)で始まるので、((30,8)、22,7)と記述できます。幅は22セル、高さは7セルです。

ウィンドウを記述するもう1つの方法は、左上隅の座標と右下隅の座標です。
この場合、赤いウィンドウは((30,8)、(51,14))です。


サービスint 10h/AH=06hは赤色ウィンドウアップ内部コンテンツを移動させるために使用することができます。
移動するウィンドウがどこにあるのか、それに2番目の表記を使用するので、私たちはそれを伝える必要があります。

CLCHCHCL、YにおけるX、左上COORDSを保持する対を形成します。
DLDHDHDLにおける右下のCOORDSを保持する一対の、X、Yを形成します。

このコードは、レジスタが適切に(同等の両方のバージョン)

;Easy version    ;Normal version 
mov cl, 30    mov cx, 081eh 
mov ch, 8     mov dx, 0e34h 
mov dl, 52 
mov dh, 14 

サービス・ルーチンの他の入力は自明である負荷が、BHため今のところ、我々はゼロに設定されます。

mov ax, 0603h  ;Scroll three lines up 
xor bh, bh 
mov cx, 081eh 
mov dx, 0e34h 
int 10h 

結果は次のとおりです:

Window scrolled

我々はウィンドウ内内容は三行でスクロールアップされていることを確認することができます
は、サービスを呼び出すことができます。
ウィンドウの外側には何も触れられていません。

また、下から「シフト」した行は黒い線です。
これは、入力BHが出現するところで、それらの行を描くのに使用される属性(色と背景色の組み合わせ)を含んでいます。

例えば属性0E0Hは、それを使用することができます、明るい黄色を指定します。

mov ax, 0603h  ;Scroll three lines up 
mov bh, 0e0h  ;Yellow lines 
mov cx, 081eh 
mov dx, 0e34h 
int 10h 

Window scrolled up with yellow lines

最後に、ALの値は、ウィンドウの高さに等しいライン、すなわち数をウィンドウ全体をスクロールするためにゼロとすることができます。サービスint 10h/AH=07hについては


根拠は同じですが、窓がダウンスクロールします。セル単位で



番号を表示するために使用されるセルにも座標があることに注意してください。
実際にはウィンドウのように見えます。
このコンテキストでは、高輝度ビットが設定されています。

+2

偉大な答え。書くのにかなり時間がかかっているはずです。 –

+0

これを使用する方法を理解しました。私はテキストの画面をクリアするために、このプロンプトが必要です。しかし、私はそれを使用すると、カーソルが消えて、私は文字列を印刷しようとすると、彼らは画面に表示されません。あなたはそれを修正する方法を知っていますか?私はdhとdlを0に設定してint 10 ah 2を試しましたが、それでも動作しません。 – Hadarsi320

+0

@ Hadarsi320私はあなたが何を求めているのか分かりません。フォローアップの質問がある場合は、すべての関連情報と適切な書式を付けて、新しい質問として投稿します。それは答えに役立ちます。 –

関連する問題