0

私が理解していることから、IDIVは商をAXレジスタに、剰余をDXレジスタに格納しますが、何らかの理由でDXの値は剰余の正しい値ではありません。

例: (9/5=1.8) 間違っている場合は訂正してください。ただし、DX レジスタは値 8 を保持していませんか?

これが私のコードです:

       .MODEL  SMALL,BASIC,FARSTACK                                       
       EXTRN   GETDEC:FAR                  
       EXTRN   PUTDEC:FAR          
       EXTRN   PUTSTRNG:FAR       
       .STACK  256

       .CONST

PROMPT  DB      'ENTER SIGNED NUMBER   '

ANNOTATION   DB      'VALUE:                '

       .CODE
code:

       MOV     AX,SEG DGROUP       
       MOV     ES,AX   

       LEA     DI,PROMPT           
       MOV     CX,22
       CALL    PUTSTRNG
       CALL    GETDEC  

;I just enter 1 so AX=1 but the code is used for solving simple arithmetic problems (decimal * 9/5)                 

       MOV     BX,9
       IMUL    BX
       MOV     BX,5
       IDIV    BX

       MOV     AX,DX ;Right here is where I check what's inside DX, I get a value of 4
                      not 8

       LEA     DI,ANNOTATION       
       MOV     CX,22
       CALL    PUTSTRNG
       MOV     BH,0
       CALL    PUTDEC


       .EXIT                      
END     code

どんな助けでも大歓迎です。

4

1 に答える 1

5

整数の除算、商、余りを誤解している可能性があると思います。あなたが与えた例では、9/5、は1で、剰余は4です.

小学校で割り算を習ったときのことを思い返すと、5 は 9 を 1 回だけ割り、余りは 4 になるので、9/5 = 1 余り 4 になります。

于 2013-09-24T21:26:22.197 に答える