у меня задача следующего содержания 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. А как осуществить ввод и вывод данных непосредственно конструкцией ассемблера я не знаю, подскажите пожалуйста.
Код (Text): ; ; ;Вход: ; EAX=Число(hex) ; EDI=указатель на буфер, откуда ASCII вид числа забирать ; int2ascii proc near mov ebx,10 lab1: push edx xor edx,edx div ebx or eax,eax jz lab2 call lab1 lab2: add dl,30h mov [edi],dl inc edi pop edx ret int2ascii endp
Dmitriy333 (x+y-z)/(x+y)=1-z/(x+y) в ассемблере операция div целочисленная, если результат должен быть в целых числах, тогда ответ 1 и делать ничего не надо. Если в ответ должен быть точным, тогда либо придется использовать инструкции fpu, либо дополнительно умножаете все например на 1000, то есть вычисляете 1000-1000*z/(x+y), а при выводе устанавливаете запятую на нужный порядок