2013-09-24 2 views
0

Из того, что я понимаю, IDIV хранит фактор в регистре AX и остаток в регистре DX, но по какой-то причине значение в DX не является правильным значением остатка.IDIV Remainder x86 Язык ассемблера

EX: (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 

Любая помощь будет оценена.

ответ

5

Я думаю, вы можете быть недоразумением целое число деление, частные и остаточные. Для примера, вы даете, 9/5 фактора является 1, а остаток равен 4.

Если вы вспомните, как вы узнали о разделении в начальной школе, 9/5 = 1 остаточных 4 , поскольку 5 делится на 9 только один раз, оставив остаток от 4.

Смежные вопросы