Почему не получается перемножать и делить assembler?
short: представляет целое число в диапазоне от –32768 до 32767. Занимает в памяти 2 байта (16 бит)    
short a, b, c, x;
...
    _asm {
        mov al, a
В al - помещается один байт
По моему дело в компиляторе Си. sizeof(al) != sizeof(short) отсюда и ошибка. Вторая ошибка это в том, что idiv принимает только один аргумент и делит dx:ax на указанный аргумент.