с чего начать, простейшее выражение

Тема в разделе "WASM.ASSEMBLER", создана пользователем Dmitriy333, 26 сен 2007.

  1. Dmitriy333

    Dmitriy333 New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    4
    у меня задача следующего содержания

    x - двузначное число
    y - трезначное число
    z - двузначное

    (все три числа даны в десятичной системе счисления)
    найти ((x+y-z)/(x+y)) результат выводится в десятичной системе счисления.


    в Турбо Паскале через встроенный ассемблер я составил эту программу без проблем, вот она:

    var x,y,z:integer;
    begin
    readln(x,y,z);
    asm
    mov ax,x;
    add ax,y;
    mov bx,x;
    add bx,y;
    mov y,bx;
    sub ax,z;
    idiv y;
    sub ax,z;
    mov z,ax;
    end;
    writeln(z);
    readln;
    end.

    А как осуществить ввод и вывод данных непосредственно конструкцией ассемблера я не знаю, подскажите пожалуйста.
     
  2. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    Код (Text):
    1. ;
    2. ;
    3. ;Вход:
    4. ;      EAX=Число(hex)
    5. ;      EDI=указатель на буфер, откуда ASCII вид числа забирать
    6. ;
    7. int2ascii proc near
    8.         mov ebx,10
    9. lab1:
    10.         push edx
    11.         xor edx,edx
    12.         div ebx
    13.         or eax,eax
    14.         jz lab2
    15.         call lab1
    16. lab2:
    17.         add dl,30h
    18.         mov [edi],dl
    19.         inc edi
    20.         pop edx
    21.         ret
    22. int2ascii endp
     
  3. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Dmitriy333
    (x+y-z)/(x+y)=1-z/(x+y) в ассемблере операция div целочисленная, если результат должен быть в целых числах, тогда ответ 1 и делать ничего не надо. Если в ответ должен быть точным, тогда либо придется использовать инструкции fpu, либо дополнительно умножаете все например на 1000, то есть вычисляете 1000-1000*z/(x+y), а при выводе устанавливаете запятую на нужный порядок