Вопрос № 181436: Напишите если не затруднит исходной код на ассемблере : написать программу, вычисляющую значение переменной R при указанных значениях: R=x2+y2,где x=a+b-c, y=b·c-a ; b=8, 106; a=30, 250; c=7, -3! ...
Вопрос № 181436:
Напишите если не затруднит исходной код на ассемблере : написать программу, вычисляющую значение переменной R при указанных значениях: R=x2+y2,где x=a+b-c, y=b·c-a ; b=8, 106; a=30, 250; c=7, -3!
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Посетитель - 353614! Вот Вам программа... Будут вопросы - обращайтесь в мини-форум
Код:
;написать программу, вычисляющую значение переменной R при указанных значениях: ;R=x2+y2,где x=a+b-c, y=b*c-a ;
b=8, 106; a=30, 250; c=7, -3 .model tiny, C .data a dw 30, 250 ;значения параметров b dw 8, 106 c dw 7, -3 sA db 'a=$' ;строки для вывода значений sB db ', b=$' sC db ', c=$' sR db ', R=$' sPress db 0ah,'Press any key$'
;расчет по всем возможным комбинациям параметров call CalcR, a, b, c call CalcR,
a, b, c+2 call CalcR, a, b+2, c call CalcR, a, b+2, c+2 call CalcR, a+2, b, c call CalcR, a+2, b, c+2 call CalcR, a+2, b+2, c call CalcR, a+2, b+2, c+2
lea dx, sPress mov ah, 9 int 21h
mov ah, 8 int 21h
mov ax, 4c00h int 21h
;вывод строки и числа numHi:numLo PrintNum proc string:word, numLo:word, numHi:word mov dx, string mov ah, 9 int 21h ;строка mov ax, numLo mov dx, numHi ;dx:ax - dword test dx, dx ;проверим
знак jns PrNumStart ;положительное - просто выводим push ax ;отрицательное mov al, '-' int 29h ;выведем минус pop ax ;и возьмем модуль числа not ax not dx add ax, 1 adc dx, 0 PrNumStart: mov bx, 10 ;будем делить на 10 xor cx, cx ;счетчик цифр PrNumDiv: xor dx, dx ;подготовимся к делению div bx ;делим DX:AX на BX push dx ;сохраним в стеке остаток от деления - очередную цифру inc cx ;счит
аем or ax, ax ;проверим, надо ли продолжать jnz PrNumDiv PrNumOut: pop ax ;извлекаем из стека очередную цифру (в обратном порядке) add al, '0' ;делаем из числа 0-9 символ '0'-'9' int 29h LOOP PrNumOut ;по всем цифрам ret PrintNum endp
;расчет R при значениях A, B, C CalcR proc wA:word, wB:word, wC:word mov ax, wA cwd ;dx:ax - знаковое число call PrintNum, offset sA, ax, dx ;выведем mov ax, wB cwd call PrintNum,
offset sB, ax, dx mov ax, wC cwd call PrintNum, offset sC, ax, dx call CalcX, wA, wB, wC ;считаем ax = X imul ax ;ax = ax * ax mov si, ax ;сохраним dword mov di, dx call CalcY, wA, wB, wC ;считаем ax = Y imul ax ;ax = ax * ax add ax, si ;сложим с предыдущим adc dx, di call PrintNum, offset sR, ax, dx ;выведем R mov al, 0dh int 29h ;на новую строку mov al, 0ah int 29h ret CalcR endp
;расчет
X CalcX proc wA:word, wB:word, wC:word mov ax, wA add ax, wB sub ax, wC ;ax = a + b - c ret CalcX endp
;расчет Y CalcY proc wA:word, wB:word, wC:word mov ax, wB imul wC sub ax, wA ;ax = b * c - a ret CalcY endp
end
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 20.12.2010, 02:10
Номер ответа: 264915 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264915
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.