зачем надо cwd в ASM ?

Тема в разделе "WASM.BEGINNERS", создана пользователем aggressiveangel, 10 ноя 2005.

  1. aggressiveangel

    aggressiveangel New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2005
    Сообщения:
    1
    Команда CWD превращает слово в AХ в двойное слово, младшая половина которого (биты 0—15) остается в АХ, а старшая (биты 16—31) располагается в DX.



    а если по русски то нафига надо cwd просто у меня ассемблерная вставка

    _asm{

    mov ax,b

    add ax,c

    mov bx,2

    cwd

    div bx

    add ax,a

    mov sum,ax

    }



    работает что при cwd что без него
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    div bx делит 32-битное число DX:AХ на 16-битное в BX

    Поэтому если ты хочешь разделить AX на BX, то нужно сделать xor edx,edx если AX беззнаковое или cwd если знаковое. Иначе если в DX будет какой-то мусор, то можно или просто получить неверный результат или нарваться на исключение - переполнение, если результат деления не поместится в AX