Регистр деления языка остатка ассемблера DX - PullRequest
0 голосов
/ 28 февраля 2012

У меня почти закончена программа.Я пытаюсь разделить CBA0123h на B000h.Коэффициент получается правильно.Тем не менее, остаток, который должен быть в регистре dx, должен быть: EA61 (http://www.miniwebtool.com/hex-calculator/?number1=CBA0123&operate=4&number2=B000),, но вместо этого A123. Я думаю, что это как-то связано с прямым порядком байтов или чем-то еще. Но мне нужно это исправить. Как я могу это сделать?Я вращаю биты? Я никогда не видел, как это сделать раньше. Как я могу получить правильный остаток от этой проблемы деления?

int main(int argc, char* argv[])
{
unsigned short int IDQUO = 0x0;
unsigned short int IDREM = 0x0;

    mov     dx, 0CBAh       
    mov     ax, 0123h       
    mov     bx, 0B000h      
    div     bx              
    mov     IDQUO, ax       
    mov     IDREM, dx       
return(0);
}

Ответы [ 2 ]

7 голосов
/ 28 февраля 2012

CBA0123h = B000h * 1282 + A123h.Значение DX верное.

3 голосов
/ 28 февраля 2012

Почему вы думаете, что остаток должен быть 0xea61? 0xa123 - это правильный ответ :

#include <stdio.h>

int main(void)
{
    printf("%x\n", 0xCBA0123 % 0xB000);
}

Выход: a123

...