Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1465 | Дата выхода: | 21.06.2011, 13:00 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 208 / 64 | Вопросов / ответов: | 4 / 4 | Вопрос № 183642: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Задан массив из 6 чисел. Найти все числа которые заканчиваются на цифру 7 и поместить их в отдельный массив. Исходные числа положительные и заданы в байтовом формате, массив задаётся одним адресом.... Вопрос № 183640: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Дана целочисленная матрица в байтовом формате по строкам. Все операции обработки матрицы реализовать только циклами. При необходимости использовать макросы. Размерность 4х4. Найти общую сумму элемен... Вопрос № 183641: Здравствуйте! Прошу помощи в следующем вопросе: Дана двухбайтовая двоичная строка. Проинвертировать первый полубайт строки, сложить по модулю 2 со вторым полубайтом и записать на место четвертого полубайта.Прошу как можно подробнее расписать коммента... Вопрос № 183639: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Ввести произвольную символьную строку. Выделить из нее (с удалением из исходной строки) все цифры, сделать из них отдельную строку и записать их в файл.... Вопрос № 183642: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Задан массив из 6 чисел. Найти все числа которые заканчиваются на цифру 7 и поместить их в отдельный массив. Исходные числа положительные и заданы в байтовом формате, массив задаётся одним адресом. Прошу как можно подробнее расписать комментарии к программе. Заранее благодарен. Отправлен: 16.06.2011, 12:26 Вопрос задал: Посетитель - 377712 (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Посетитель - 377712! Числа ищем делением на 10 и проверкой остатка, равно ли 7-ми. Программа записывает все такие числа в отдельный массив и считает их количество. Массив задан в программе. Результат смотрим в отладчике.
Код : ;Задан массив из 6 чисел. ;Найти все числа которые заканчиваются на цифру 7 и поместить их в отдельный массив. ;Исходные числа положительные и заданы в байтовом формате, массив задаётся одним адресом. .model small .stack 100h .data array db 66, 17, 23, 207, 7, 55 ;массив чисел N equ $-array ;длина массива (=6) array7 db N dup (?) ;сюда запишем найденные числа .code main proc mov ax, @DATA ;настроим сегментные регистры mov ds, ax ;на сегмент данных mov es, ax lea si, array ;исходный массив lea di, array7 ;сюда будем писать числа, которые заканчиваются на 7 mov cx, N ;количество исходных чисел mov bl, 10 ;будем делить на 10 и смотреть остаток xor dx, dx ;счетчик чисел, которые заканчиваются на 7 mainLoop: ;по всем lodsb ;очередное число, si=si+1 mov ah, 0 ;сделаем из байта слово div bl ;делим на 7, al - частное, ah - остаток cmp ah, 7 ;остаток = 7 - число заканчивается на 7 jne next ;не равен - игнорируем mov al, [si-1] ;равен - прочитаем его еще раз stosb ;сохраним inc dx ;посчитаем next: loop mainLoop ;по всем mov ax, dx ;ax = чисел, которые заканчиваются на 7 mov ax,4c00h ;выход в ДОС int 21h main endp end main ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 16.06.2011, 14:55 Номер ответа: 267758 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267758 на номер 1151 (Россия) | Еще номера » | Вопрос № 183640: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Дана целочисленная матрица в байтовом формате по строкам. Все операции обработки матрицы реализовать только циклами. При необходимости использовать макросы. Размерность 4х4. Найти общую сумму элементов последнего столбца и последней строки. Прошу как можно подробнее расписать комментарии к программе. Заранее благодарен.
Отправлен: 16.06.2011, 12:22 Вопрос задал: Посетитель - 377712 (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Посетитель - 377712! Программа ничего не вводит и не выводит. Матрица задана в программе, результат смотрим в отладчике. Байты-числа знаковые, т.е. должны быть в интервале -128<N<+127. Будут вопросы - задавайте в мини-форуме.
Код : ;Дана целочисленная матрица в байтовом формате по строкам. ;Все операции обработки матрицы реализовать только циклами. ;При необходимости использовать макросы. Размерность 4х4. ;Найти общую сумму элементов последнего столбца и последней строки. .model small .stack 100h N equ 4 ;размерность матрицы .data array db 3, 100, 3, 4;примерная матрица 4х4 db -1, -2,-3, -4 db 0, 19, 2, 3 db -20, 120, 1, 127 .code main proc mov ax, @DATA ;настроим сегментный регистр mov ds, ax ;на сегмент данных xor dx, dx ;искомая сумма ;посчитаем сумму элементов последненго столбца mov si, N-1 ;индекс столбца mov cx, N ;число элементов в слолбце xor bx, bx ;база строки матрицы (0, 4, 8, 12) LastColumnsSum: mov al, array[bx+si]; очередной байт cbw ;превратим знаковый байт al в знаковое слово ax add dx, ax ;складываем add bx, N ;на следующую строку loop LastColumnsSum ;по всем элементам столбца ;добавим сумму элементов последней строки xor si, si ;индекс столбца mov cx, N ;число элементов в строке mov bx, N*(N-1) ;база последней строки матрицы (12) LastRowSum: mov al, array[bx+si]; очередной байт cbw ;превратим знаковый байт al в знаковое слово ax add dx, ax ;складываем inc si ;на следующий элемент в строке loop LastRowSum ;по всем элементам столбца mov ax, dx ;искомая сумма в регистре AX mov ax, 4c00h ;выход в ДОС int 21h main endp end main ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 16.06.2011, 14:00 Номер ответа: 267756 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267756 на номер 1151 (Россия) | Еще номера » | Вопрос № 183641: Здравствуйте! Прошу помощи в следующем вопросе: Дана двухбайтовая двоичная строка. Проинвертировать первый полубайт строки, сложить по модулю 2 со вторым полубайтом и записать на место четвертого полубайта.Прошу как можно подробнее расписать комментарии к программе. Заранее благодарен. Отправлен: 16.06.2011, 12:23 Вопрос задал: Посетитель - 377712 (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Посетитель - 377712! Полубайты нумеруем следующим образом: первый - младшие 4 бита младшего байта, вторый - старшие 4 бита младшего байта, третий - младшие 4 бита старшего байта, четвертый - старшие 4 бита старшего байта.
Двоичная строка задана в программе. Результат смотрим в отладчике.
Будут вопросы - обращайтесь в мини-форум
Код : ;Дана двухбайтовая двоичная строка. ;Проинвертировать первый полубайт строки, сложить по модулю 2 со вторым полубайтом ;и записать на место четвертого полубайта. .model small .stack 100h .data bstring dw 1011001111100010b ;наша строка .code .186 ;чтобы можно было использовать команду shl al,4 main proc mov ax, @DATA mov ds, ax ;настроим сегмент данных mov bx, bstring ;исходная двоичная строка mov al, bl ;первый полубайт (старший игнорируем) not al ;инвертируем байт shl al, 4 ;младший стал старшим, заместо младшего нули mov ah, bl ;второй полубайт and ah, 0f0h ;оставляем только старшую (вторую) тетраду xor al, ah ;складываем по модулю 2 старшую тетраду, в младшей 0 and bh, 0fh ;оставляем только третью (младшую) тетраду or bh, al ;заместо старшей (четвертой) заносим результат пред опер mov bstring, bx ;сохраняем на место mov ax,4c00h ;выход в ДОС int 21h main endp end main ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 16.06.2011, 14:33 Номер ответа: 267757 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267757 на номер 1151 (Россия) | Еще номера » | Вопрос № 183639: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Ввести произвольную символьную строку. Выделить из нее (с удалением из исходной строки) все цифры, сделать из них отдельную строку и записать их в файл. Отправлен: 16.06.2011, 12:20 Вопрос задал: Посетитель - 377712 (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Посетитель - 377712!
1) Удаляем цифры, получаем две строки: исходную, без цифр, и строку из одних цифр 2) Выводим на экран обе строки (для наглядности) 3) Имя файла задаем в теле, как digits.txt, и выводим туда строку из цифр 4) В случае отсутствия символов любого типа (типа все цифры или ни одной цифры), выводится соответствующее сообщение
Код : ;Ввести произвольную символьную строку. ;Выделить из нее (с удалением из исходной строки) все цифры, ;сделать из них отдельную строку и записать их в файл. .model small .stack 100h .code main proc mov ax, @data ;настроим сегменты данных mov ds, ax mov es, ax lea dx, sIn ;строка приглашения 'Enter string:' mov ah, 9 int 21h lea dx, buf ;введем строку mov ah, 0ah int 21h lea si, string ;адрес строки lea di, digits ;адрес, куда запишем цифры mov bx, si ;по старому адресу будем писать все остальные символы MainLoop: ;цикл по строке lodsb ;читаем очередной cmp al, 0dh ;конец строки? je PrintResult ;на вывод результата cmp al, 30h ;'0' jb SaveOther ;другие сохраним по адресу [bx] cmp al, 39h ;'9' ja SaveOther ;другие сохраним по адресу [bx] stosb ;заглавные сохраняем по адресу [di] jmp MainLoop ;на следующий символ SaveOther: ;остальные mov [bx], al ;сохраняем inc bx ;инкремент адреса jmp MainLoop ;на следующий символ PrintResult: ;вывод результата push di ;сохраним адрес конца в буфере цифр ;di - адрес конца выводимого буфера (цифр) lea dx, sDigitsOut ;адрес строки 'Digits:' lea bp, digits ;адрес начала выводимой строки цифр call OutMessage ;выводим данные mov di, bx ;di - адрес конца выводимого буфера (остальных символов) lea dx, sOtherOut ;адрес строки 'Other:' lea bp, string ;адрес начала выводимой строки остальных букв call OutMessage ;выводим данные pop di ;восстановим адрес конца в буфере заглавных букв call OutFile ;выведем заглавные буквы в файл PressAny: lea dx, sAny ;выведем 'Press any key' mov ah, 9 int 21h mov ah, 0 ; ждем нажатие на клавишу int 16h mov ax,4c00h ; конец работы int 21h main endp OutMessage proc ;вывод строки с заголовком mov ah, 9 ;вывод заголовка, адрес в dx int 21h mov si, bp ;адреса начала строки mov cx, di ;адрес конца sub cx, si ;длина строки mov ah, 2 ;функция вывода символа из dl jcxz NoMessage ;пустая строка? OutLoop: lodsb ;символ mov dl, al ;для вывода int 21h ;выводим loop OutLoop ;по всем cx символам ret NoMessage: ;сообщение 'Not found' lea si, sNotFound ;начало строки mov cx, len_sNotFound;длина jmp OutLoop ;на вывод OutMessage endp OutFile proc ;вывод строки в файл lea dx, sName ;имя файла 'digits.txt' xor cx, cx ;без атрибутов mov ah, 3ch ;создаем int 21h jc CreateError ;ошибка создания? mov bx, ax ;описатель файла lea dx, digits ;адрес строки цифр mov cx, di ;адрес конца sub cx, dx ;длина jcxz NoDigits ;есть цифры? Write: mov ah, 40h ;выводим int 21h jc WriteError ;ошибка записи mov ah, 3eh ;закрываем файл int 21h ret NoDigits: ;сообщение 'Not found' lea dx, sNotFound ;начало строки mov cx, len_sNotFound;длина jmp Write ;на вывод WriteError: ;ошибка записи mov ah, 3eh ;файл закрываем int 21h lea dx, sWriteErr ;сообщение об ошибке jmp PrintError CreateError: ;ошибка создания lea dx, sCreateErr ;сообщение об ошибке PrintError: mov ah, 9 ;выводим сообщение int 21h ret OutFile endp .data ;строки сообщений sIn db 0dh,0ah,'Enter string: $' sDigitsOut db 0dh,0ah,'Digits: $' sOtherOut db 0dh,0ah,'Other : $' sAny db 0dh,0ah,'Press any key$' sName db 'digits.txt',0 ;имя файла sCreateErr db 0dh,0ah,'File create error!$' sWriteErr db 0dh,0ah,'File write error!$' sNotFound db 'Not found' ;сообщение о ненахождении len_sNotFound equ $-sNotFound ;длина сообщения buf label byte ; буфер для приема строки с клавиатуры (по ф-и 0ah) max db 128 ; максимальная длина строки len db 0 ; реальная длина введенной строки string db 128 dup (?) ; сама строка digits db 128 dup (?) ;сюда запишем цифры end main ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 16.06.2011, 13:42 Номер ответа: 267755 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267755 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий