2

8 ビット レジスタを 16 ビット レジスタに移動する際に問題があります。

私がやろうとしているのは、数値が 10 未満になるまで繰り返し 10 で除算することです。各除算時間内に、除算の残りの部分を AH レジスタから移動させ、48 を加えます。次に、その Ascii コードを取得できたので、取得した数字を画面に表示しようとしました。

 Num1 DW 255
 DIVISION :
        CMP NUM1,10
            Jl DIVEND
            
        MOV AX,10
        DIV NUM1
        MOV NUM1,AL    ;*  Operand types do not match
    
        
        ADD AH,48
        MOV DL,AH; 
        MOV AH,02H
        INT 21H
        
    JMP DIVISION

しかし、組み立てようとすると、Operand types do not match* で示される行に と表示されます。

私はターボアセンブラV4.1を使用しています...

4

2 に答える 2

2

タイトルのより一般的な質問については、符号なしの値にはmovzx(移動ゼロ拡張) を使用し、符号付き値にはmovsx(移動符号拡張) を使用します。

于 2013-10-15T00:56:51.860 に答える
0

ということですか?

mov bx, Offset Num1 
mov [bx], al

発生するエラーは、単語を宣言したが、それをバイトとしてアドレス指定したためです。Num1 db を実行した場合も機能します。

TASM 4.1 でテスト済み

于 2013-05-04T10:13:32.080 に答える