Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Разбить число на 2 регистра!


Автор: valentos 13.6.2007, 18:13
Как разбить 32 разрядное число на 2 (16 разрядных) числа
Плиз, подскажите! 

Автор: MAKCim 13.6.2007, 18:39
Код

mov eax, number
mov ebx, eax
shr ebx, 16
and eax, 0x0000FFFF

Автор: valentos 13.6.2007, 18:47
Цитата(MAKCim @  13.6.2007,  18:39 Найти цитируемый пост)
mov eax, numbermov ebx, eaxshr ebx, 16and eax, 0x0000FFFF

Наверно я неправильно выразился!
У меня дано число Long(32 разряда), мне надо занести в 16 разрядный регистр!(32 разрядные регистры не использовать)! Это как-то делается путем деления 32 разряд числа на 2 регистра(по 16 разрядов). 

Автор: valentos 13.6.2007, 19:54
Вот исходник поидее должно работать!
Код

#include "stdafx.h"
#include "iostream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
  unsigned _int16 x;
      unsigned long y,f;
      f=0;
      cout<<" Vvedite X:"; cin>>x;
      cout<<"\n Vvedite Y:"; cin>>y;
    _asm
    {
        lea bx, y
         mov ax, word ptr [bx]
         mov dx, word ptr [bx + 2]
         add ax, x
         adc dx, 0
         mov word ptr [bx], ax    
         mov word ptr [bx + 2], dx

    }
    cout<<"F="<<f<<"\n";
    return 0;
}


но, в строках где есть адресация (ptr[bx], ptr[bx+2]), компилятор ругается на эту адресацию:
error C2432: illegal reference to 16-bit data in 'second operand'

Автор: Mikl__ 19.6.2007, 05:19
судя по смыслу задачи ты складываешь 16-разрядное X с 32-разрядным Y 
и результат должен быть в 32-разрядном F
тогда 
Код

mov ax,word ptr [Y]
mov dx,word ptr [Y+2]
add ax,[X]
adc dx,0
mov word ptr [F],ax,
mov word ptr [F+2],dx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)