Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике | Номер выпуска: | 1487 | | Дата выхода: | 09.11.2011, 14:30 | | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | | Подписчиков / экспертов: | 190 / 61 | | Вопросов / ответов: | 1 / 2 | Консультация # 184374: Здравствуйте! Прошу помощи в следующем вопросе: необходимо написать программу на TASM Массив чисел из диапазона 00000000b..11111111b размерностью [1..N] вводится с клавиатуры, где N – число из диапазона 2..9, вводимое с клавиатуры. Вывести на экран результат побитовой логической операции «ИЛИ» для элементов с индексами 2, N и N div 2, где d... Консультация # 184374: Здравствуйте! Прошу помощи в следующем вопросе: необходимо написать программу на TASM Массив чисел из диапазона 00000000b..11111111b размерностью [1..N] вводится с клавиатуры, где N – число из диапазона 2..9, вводимое с клавиатуры. Вывести на экран результат побитовой логической операции «ИЛИ» для элементов с индексами 2, N и N div 2, где div – операция целочисленного деления. Дата отправки: 04.11.2011, 14:14 Вопрос задал: Невалёный Виталий Владимирович (Посетитель) Всего ответов: 2 Страница онлайн-консультации » Консультирует Зенченко Константин Николаевич (Модератор): Здравствуйте, Невалёный Виталий Владимирович!
Смотрите приложение. Программа Tasm, компилоировать как СОМ-файл. Будут вопросы обращайтесь в мини-форум. Удачи! Приложение:
 | Консультировал: Зенченко Константин Николаевич (Модератор) Дата отправки: 04.11.2011, 16:20 5 нет комментария ----- Дата оценки: 04.11.2011, 18:36 | Рейтинг ответа: 0 | Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Невалёный Виталий Владимирович! Еще один вариант. Формируем exe-программу командами tasm name tlink name
Примерный вывод:
Код : Enter N: 3 Enter num[1]: 1111 Enter num[2]: 1010 Enter num[3]: 10101010 Result = 00001010 or 00001111 or 10101010 = 10101111 Press any key
Код : code segment 'code' ;начало сегмента кода assume cs:code,ds:data,ss:stk main proc mov ax, data ;адрес сегмента данных mov ds, ax ;в ds mov es, ax ;в es lea dx, sEnterN ;приглашение для ввода N mov ah, 9 int 21h repeat: mov ah, 0 ;введем один код int 16h cmp al, '2' ;ждем число 2-9 jl repeat cmp al, '9' jg repeat mov dl, al ;сохраним для вывода and ax, 000fh ;сделаем числом 2-9 mov N, ax ;N = AX mov ah, 2 ;выведем из dl int 21h mov ah, 0 ;подождем нажатие (например, на Enter), int 16h ;чтобы сразу не перескакивало дальше lea dx, sEOL ;перейдем на новую строку mov ah, 9 int 21h xor bx, bx ;индекс с 0 enterLoop: call InputBin ;введем байт, как строку бит, результат в al mov sNum[bx], al ;сохраним в буфере inc bx ;увеличиваем индекс cmp bx, N ;ввели все числа jl enterLoop lea dx, sResult ;'Result = ' mov ah, 9 int 21h mov bx, 1 ;индекс 2-го элемента (считаем с 0) mov al, sNum[bx] ;элемент mov dl, al ;здесь будем считать lea si, sOr ;строка 'or' за двоичной строко call PrintBin ;выведем mov bx, N ;число элементов shr bx, 1 ;пополам dec bx ;-1, т.к. счет с 0 mov al, sNum[bx] or dl, al ;операция call PrintBin mov bx, N ;число элементов dec bx ;индекс последнего (счет с 0) mov al, sNum[bx] or dl, al ;операция lea si, sEq call PrintBin mov al, dl ;посчитанный результат lea si, sEOL ;в конце - перевод строки call PrintBin finish: lea dx, sAny ;press any key mov ah, 9 int 21h mov ah, 0 int 16h ;ждем any key mov ax, 4c00h int 21h ;выход в ДОС main endp InputBin proc ;ввод строки бит push bx ;сформируем подсказку lea dx, sEnter ;Enter num[ mov ah, 9 int 21h mov dl, bl ;индекс числа add dl, '1' ;добавляем 1 (чтобы выглядело, как счет с 1) mov ah, 2 ; и превращаем в символ, выводим int 21h lea dx, sTail ;'] = ' mov ah, 9 int 21h ;вводим максимум 8 бит mov cx, 8 ;число бит mov bl, 0 ;здесь будем накапливать число IB_loop: mov ah, 0 ;ждем код int 16h cmp al, 0dh ;по Enter-у выходим je IB_ret jcxz IB_loop ;в конце ввода 8 бит ждем только Enter cmp al, '0' ;ждем только 0 или 1 je IB_bin cmp al, '1' jne IB_loop IB_bin: mov dl, al ;сохраним для вывода shr al, 1 ;получим в бите FC младший бит (0 или 1) rcl bl, 1 ;вдвинем в результат mov ah, 2 int 21h ;выведем на экран из dl loop IB_loop ;по всем jcxz IB_loop ;ввели все 8, ждем Enter! IB_ret: lea dx, sEOL ;перейдем на новую строку mov ah, 9 int 21h mov al, bl ;введенное побитно число pop bx ret InputBin endp PrintBin proc ;вывод байта в al в виде строки бит push dx mov bl, al ;сохраним в bl mov cx, 8 ;8 бит mov ah, 2 ;ф-я вывода символа из dl на экран PB_loop: shl bl, 1 ;сдвигаем на 1 бит влево. Старший бит в FC mov dl, '0' ;готовим символ adc dl, 0 ;сложим с битом FC int 21h ;выведем loop PB_loop mov dx, si ;строка для вывода mov ah, 9 int 21h pop dx ret PrintBin endp code ends data segment sEnterN db 'Enter N: $' sEnter db 'Enter num[$' sTail db ']: $' sResult db 'Result = $' sOr db ' or $' sEq db ' = $' sEOL db 0dh,0ah,'$' sAny db 'Press any key$' N dw ? sNum db 9 dup(?) data ends stk segment stack dw 100h dup (?) stk ends end main  | Консультировал: Лысков Игорь Витальевич (Старший модератор) Дата отправки: 04.11.2011, 18:06 5 нет комментария ----- Дата оценки: 04.11.2011, 18:42 | Рейтинг ответа: 0 |
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий