2

キーボードから数値を読み取り、buf という配列に格納しました。len 変数には配列の長さも含まれています。

私は今、その配列から数値を計算しようとしています。私のコードはこれです:

   xor si, si
   xor bx, bx ; made them 0 
   start_for:
    cmp si, len
    je end_for
    mul bx, 10 ; I think here is the problem! 
    mov al, buff[si]  
    sub al, '0'
    add bx, ax
    inc si
    jmp start_for

   end_for:

何が問題ですか?

デバッグで、「mul bx, 10」という行が効果がないことに気付きました。

4

2 に答える 2

3

の行add bx, axでは、上位バイトahがまだ定義されていないようです。axまたはahに設定することをお勧めします0

また、i86 は 'mul' プロダクトを意図した場所に配置しない場合があります。BX オペランドがあっても、積が DX:AX にある場合があります。コード内で AX と BX を入れ替えて使用することをお勧めします。AX を最終製品とし、bx を 1 桁の値にします。

于 2013-05-22T16:14:47.070 に答える
1

MUL 命令を間違って使用していました。プログラムを変更すると、動作します:

xor si, si
xor ax, ax        

   start_for:
    cmp si, len
    je end_for 
    mov bx, 10
    mul bx ; This means AX = AX * BX (for 8 bit operands)
    mov bh, 0 
    mov bl, buff[si]  
    sub bl, '0'
    add ax, bx
    inc si
    jmp start_for

   end_for:  

AX および BX レジスタの意味が変更されました。AX は番号を格納し、BX は MUL にのみ使用されます。

于 2013-05-22T16:45:08.103 に答える