Как одними mov-ами вычислить остаток от деления на 16777216 ?

Тема в разделе "WASM.BEGINNERS", создана пользователем Antolflash, 4 апр 2009.

  1. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Если бы было 256, 65536, то всё было бы понятно
    для 65536
    Код (Text):
    1.  
    2. mov ebx, 0;
    3. mov eax, in;
    4. mov bx,ax;
    5. mov out,ebx;
    А вот это три байта, как их "вытащить" из четырёхбайтного регистра?
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Код (Text):
    1. mov eax,[input]
    2. mov [output],ax
    3. mov al,[input+2]
    4. mov [output+2],al
     
  3. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Код (Text):
    1. #include <stdio.h>
    2. int main()
    3. {
    4.     int input,output;
    5.     scanf("%i", &input);
    6.    
    7.  
    8. __asm
    9. {
    10.     mov output,0;
    11.     mov eax,[input]
    12.     mov word ptr [output],ax
    13.     mov al, byte ptr [input+2]
    14.     mov byte ptr [output+2],al
    15. }
    16. printf("%i",output);
    17. return 0;
    18. }
     
  4. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Antolflash - и что?
    Или тебе не нравится что старший байт не обнуляется?
    Замени на
    Код (Text):
    1. mov eax,[input]
    2. mov [output],ax
    3. mov ax,0
    4. mov al,[input+2]
    5. mov [output+2],ax
    И откуда вообще требование использовать только mov?
    С использованием and можно гораздо лучше сделать.
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    mov eax, 0
    mov ax,[input]
    mov [output],eax
    mov al,[input+2]
    mov [output+2],al
    тогда уж так. так хот только две задержки возникнет (при использовании префикса и обращении к младшей части расширенного регистра), а не 5