Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1448 | Дата выхода: | 20.05.2011, 00:00 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 215 / 64 | Вопросов / ответов: | 1 / 1 | Вопрос № 183172: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: 1) требуется разработать подпрограмму проверки условия, аргументы подпрограмме передать заданным способом 2) разработать подпрограммы ввод и вывода 16-ти разрядного ч... Вопрос № 183172: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: 1) требуется разработать подпрограмму проверки условия, аргументы подпрограмме передать заданным способом 2) разработать подпрограммы ввод и вывода 16-ти разрядного числа в десятичной системе счисления (диапазон 0....65535), 3) разработать EXE- программу, выполняющую ввод чисел, проверку условия и вывод результата, использующую созданные подпрограммы. Подпрограммы и основная программа должны находиться в разных файлах. АСС- TASM
Задание - Ввод х, Вывод (х больше 0)= (Да/Нет), передача параметров через стек. . Есть "болванка" по данному заданию, но нет уверенности в ее правильности и комментариях. Если возможно ее исправить, пожалуйста сделайте это...
С благодарностью за поддержку и помощь , чайник АСС Отправлен: 14.05.2011, 22:56 Вопрос задал: Сanijke Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Сanijke! Вот Вам подправленные тексты программы. Вводим знаковое число, проверяем на знак, выводим результирующую строку Если что не понятно, спрашивайте в мини-форуме
Код : EXTRN BARD: near, INPUTNUMB: near code segment assume cs: code, ds:data,SS:KOMOD start: MOV AX, data MOV DS, AX ; запись ax в ds CALL INPUTNUMB ; вызов подпрограммы INPUTNUMB mov x, AX PUSH x ; вданном случае, лучше параметром передать не адрес X, а саму переменную X CALL BARD ; вызов подпрограммы BARD MOV AX, 4c00h ; завершение программы с кодом 0 INT 21h ; вызов прерывания code ends data segment public x dw ? ; резервирование памяти под двубайтное число х data ends komod segment stack dw 128 dup (?) komod ends end Start
Код : public Bard, INPUTNUMB code segment assume cs: code, ds:data BARD proc near ; объявление подпрограммы BARD PUSH BP ; MOV BP,SP ; MOV DX, offset MSG_Y; адрес строки YES!!! MOV ax,[BP+4] ; лучше передавать сразу число test ax, ax ; установим флажки, в зависимости от ах jg met3 ; если больше, переход на met3 MOV DX, offset MSG_N; адрес строки NO!!!! met3: MOV ah, 9 ; функция вывода на экран ; строки, адрес которой в ds:dx int 21h ; вызов прерывания pop bp ; восстановление BP RET 2 ; возврат с убиранием из стека параметра BARD endp INPUTNUMB PROC near ; объявление подпрограммы ; INPUTNUMB mov AH, 0Ah ; запрос функции ввода с клавиатуры mov DX, offset buf ; вывод буфера INT 21h ; вызов прерывания 21 MOV DI, DX ; INC DI ; увеличение di на 1 MOV CL, [DI] ; длина введенной строки xor CH, CH ; в cx xor AX, AX ; ax - наше число jcxz met1 ; если cx = 0, переход на met1 xor BX, BX ; bx - очередной десятичный разряд MOV BP, 10 ; будем умножать на 10 mov si, 1 ; si = 1 - число > 0 cmp byte ptr [di+1], '-' ; введен ли знак минус? jne met2 ; нет - вводим положительное число inc di ; для отрицательного - обойдем минус dec cx ; уменьшим и счетчик neg si ; si = -1 - признак отрицательного числа jcxz met1 ; проверим еще раз на 0 (был введен только один минус) met2: MUL BP ; умножение ax на bp INC DI ; увеличение di на 1 MOV BL, [DI] ; очередная цифра в bl SUB BL, 30h ; вычитание 30h из bl, результат в bl ADD AX, BX ; сложение ax и bx, результат в ax LOOP met2 ; по всем цифрам числа met1: mul si ; учтем знак RET INPUTNUMB endp code ends data segment public ; у сегментов должно быть одинаковое описание buf db 7,8 dup (?) MSG_Y db 0dh,0ah,'YES!!!$' MSG_N db 0dh,0ah,'NO!!!!$' data ends end ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 15.05.2011, 02:42 Номер ответа: 267158 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267158 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий