2017-09-23 5 views
1

いくつかのコード言語での作業をやめてからしばらくしていました。数日前に学校で私が組み立てを始めたので、いくつかのコード行の背後にあるいくつかの論理を理解し始めます。
実際、私が試みたのは、2つの変数間の単純なADD演算です。私はemu8086を使用してコードをエミュレートしています。なぜ私はそれを理解できないのかをあなたに示します。私は、8ビットの3つの変数、それらのうちの2つを初期化し、私は2番目に最初に追加したい、今すぐアセンブリでの追加操作

stack segment 
    dw 128 dup(0) 
ends 

data segment 

    x DB 3 
    y DB 5 
    r DB 0 

ends 

code segment 

    mov ah,x 
    mov al,y 
    add ah,al 
    mov r,ah 

ends 

コードは次のようです。

問題は次のようなものです。コードをエミュレートして何が起こっているのかを確認するには、最初の手順はAH=03でなければなりませんが、CDhを出力するようです理由を得ることができません。 ALについても同じです。

私は、xとyの代わりにAHALのレジスタに他のものを書き込むのはなぜですか?

+7

データセグメントを指すように「DS」を設定するのを忘れていると思います。 – Jester

+0

申し訳ありませんが、どうすればいいですか? –

答えて

4

mov命令のすべてが、DSセグメントレジスタによって参照されるメモリ内の変数をアドレス指定します。あなたはあらかじめ設定する必要があります!

code segment 
    mov ax, @data <- Add this 
    mov ds, ax  <- Add this 
    mov ah, x 
    mov al, y 
    add ah, al 
    mov r, ah 
ends 
+0

ええ、今それは動作します。どうもありがとう! –

関連する問題