Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1451 | Дата выхода: | 25.05.2011, 17:00 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 216 / 64 | Вопросов / ответов: | 4 / 4 | Вопрос № 183247: Здравствуйте! Прошу помощи в следующем вопросе: Помогите пожалуйста со следующим заданием. Задание на фото ниже ... Вопрос № 183248: Здравствуйте! Прошу помощи в следующем вопросе: Помогите пожалуйста со следующим заданием. Задание на фото ниже ( Нужен один из 6 представленных вариантов) Вопрос № 183249: Здравствуйте! У меня возникли сложности с таким вопросом: Помогите пожалуйста со следующим заданием. Задание подробно описано в текстовом документе. Нужно выполнить 1 из 12 предложенных вариантов(на ваше усмотрение) Просьба писать комментари... Вопрос № 183250: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: требуется составить подпрограмму решения задачи, использующую инструкции обработки цепочек. Составить программу, осуществляющую ввод необходимых данных, вызов подпрограммы и... Вопрос № 183247: Здравствуйте! Прошу помощи в следующем вопросе: Помогите пожалуйста со следующим заданием. Задание на фото ниже
Отправлен: 19.05.2011, 19:08 Вопрос задал: Посетитель - 349343 (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Зенченко Константин Николаевич (Модератор) : Здравствуйте, Посетитель - 349343!
№1 1) размер операндов не совпадает 123h - слово, а не байт 2,3)нормально 4)не правильный индексный регистр и нужно указывать тип операнда 5)нормально 6)не правильно: передача данных пернеменная-переменная 7)не правильно: одноверменное использование сегментных регистров 8)непосредственное указание сегментного адреса 9)не правильно: передача данных пернеменная-переменная 10)нормально
№2 +3/32=0.00011 -9/16=1.0111 -0 = не определено
№3 AX=20H
№4 0110'0010'1010'0000=AX 1001'1101'0101'0000=+ = 1111'1111'1111'0000=AX устатновлен флаг SF, остальные сброшены. Удачи! ----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч Ответ отправил: Зенченко Константин Николаевич (Модератор) Ответ отправлен: 23.05.2011, 16:01 Номер ответа: 267313 Украина, Киев Тел.: +38-097-238-60-03 Адрес: Украина, Киев Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267313 на номер 1151 (Россия) | Еще номера » | Вопрос № 183248: Здравствуйте! Прошу помощи в следующем вопросе: Помогите пожалуйста со следующим заданием. Задание на фото ниже ( Нужен один из 6 представленных вариантов)
Отправлен: 19.05.2011, 19:15 Вопрос задал: Посетитель - 349343 (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Посетитель - 349343!
Реализован поиск по правилу 2: быть числами < 7 Те, которые < 7, переносятся в RES (с удалением из исходного), >=7 остаются в MAS После вызова ф-и OBRAB в AX адрес массива RES, в CX - число перенесенных чисел, в BX - число оставленных чисел
main.asm
Код : extrn OBRAB:near ;чтобы было доступно из данного модуля cseg segment para public 'code' ;сегмент кода assume cs:cseg, ds:dseg, es:dseg ;свяжем сегментные регистры с указанными сегментами start: mov ax, dseg ;загрузим сегментные регистры DS, ES mov ds, ax ; адресом сегмента данных mov es, ax call OBRAB ;вызовем п/п анализа массива mov ax, 4c00h ;выход в ДОС int 21h cseg ends public MAS, MASend ;чтобы были доступны извне extrn RES:byte ;чтобы было доступно из данного модуля dseg segment public 'data' MAS db -6, -1, 7, 'n', 8, -3, 9, 0, 'N', 4 MASend label byte ;зададим для подсчета длины строки в модуле SORT dseg ends end start
sort.asm
Код : cseg segment para public 'code' ;сегмент кода assume cs:cseg, ds:dseg, es:dseg ;свяжем сегментные регистры с указанными сегментами public OBRAB ;чтобы была доступна извне OBRAB proc near ;п/п анализа массива из модуля MAIN lea si, MAS ;адрес массива lea cx, MASend ;адрес конца sub cx, si ;длина массива lea di, RES ;адрес, куда переместим элементы xor dx, dx ;количество найденных и перемещенных элементов mov bx, si ;адрес исходного массива, куда будем писать оставленные элементы obrabLoop: ;цикл по всем lodsb ;очередной элемент массива cmp al, 7 ;сравниваем с 7 jge obrabSave ;сравнение знаковое! stosb ;все, кто меньше 7 (-6,-1,-3,0,4) переносим inc dx ;считаем jmp obrabNext obrabSave: mov [bx], al ;остальных оставляем inc bx ;адрес конца оставленных obrabNext: loop obrabLoop ;по всем mov cx, dx ;вернем количество перенесенных в cx lea ax, RES ;адрес массива в ax sub bx, offset MAS ;в bx - количество оставленных ret OBRAB endp cseg ends extrn MAS:byte, MASend:byte ;адреса, определенные в другом модуле public RES ;адрес, определенный в данном, будет доступен извне dseg segment public 'data' RES db 10 dup (?) ;результирующий массив dseg ends end ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 20.05.2011, 14:49 Номер ответа: 267269 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267269 на номер 1151 (Россия) | Еще номера » | Вопрос № 183249: Здравствуйте! У меня возникли сложности с таким вопросом: Помогите пожалуйста со следующим заданием. Задание подробно описано в текстовом документе. Нужно выполнить 1 из 12 предложенных вариантов(на ваше усмотрение) Просьба писать комментарии к каждой операции.
Задание Отправлен: 19.05.2011, 19:24 Вопрос задал: Посетитель - 349343 (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Посетитель - 349343! Вот и программа Реализовал вариант 1: по таймеру (прерыванию 1сh) выводится сообщение Чтобы не было слишком часто, сделал, чтобы выводилось раз в 2 секунды Выходит из программы по нажатию на любую клавишу
Код : .model small assume cs:code, ds:data, ss:stack stack segment para public 'stack' dw 1024 dup (?) stack ends MAX_COUNT equ 36 ;прерывание будет рисовать сообщение каждые MAX_COUNT/18 секунды data segment para public 'data' count dw MAX_COUNT sPress db 0dh,0ah,'Press any key for exit...$' string db 0dh, 0ah, 'Hi from interrupt!',0 Off_1c dw ? ;указатель на старый обработчик вектора 1ch Seg_1c dw ? data ends code segment para public 'code' start: jmp Init ;на инициализацию new_1c: ;подпрограмма отработки 1ch push ds ;сохраним использованные регистры push ax push si mov ax, data ;ds=data mov ds, ax dec count ;уменьшваем счетчик jnz call_old_1c ;если не 0, то ничего не делаем mov count, MAX_COUNT;загрузим заново lea si, string ;адрес строки mov ah, 0eh ;ф-я вывода телетайпом str_loop: ;выводим строку lodsb ;читаем символ cmp al, 0 ;проверим на конец je call_old_1c int 10h ;выводим на экран jmp str_loop call_old_1c: pushf ;вызовем старый обработчик, сначала надо pushf, т.к. выход по iret! call dword ptr Off_1c;адрес переменной в сегменте данных pop si pop ax pop ds ;восстановим регистры iret ;возврат из прерывания Init: ;инициализация mov ax, data mov ds, ax ;ds = data mov ax, 351ch int 21h ;узнаем вектор 1ch в es:bx mov Off_1c, bx ;сохраним старый адрес в сегменте данных mov Seg_1c, es push ds lea dx, new_1c ;установим новый адрес push cs ;обработчика прерывания 1ch pop ds ;ds:dx mov ax, 251ch int 21h pop ds lea dx, sPress ;выведем приглашение нажать на любую клавишу mov ah, 9 int 21h mov ah, 0 ;ждем int 16h cli ;воcстановим старый обработчик вектора 1ch push ds ;ds lds dx, dword ptr Off_1c ;ds:dx - адрес старого вектора mov ax, 251ch int 21h ;восстановим! pop ds ;ds = data sti mov ax, 4c00h int 21h ;выход в ДОС code ends end start ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 20.05.2011, 15:37 Номер ответа: 267272 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267272 на номер 1151 (Россия) | Еще номера » | Вопрос № 183250: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: требуется составить подпрограмму решения задачи, использующую инструкции обработки цепочек. Составить программу, осуществляющую ввод необходимых данных, вызов подпрограммы и вывод результата. Задача- удалить подстроку из строки. Ассемблер-TASM. EXE. Очень надеюсь, что Вы мне поможете. Отправлен: 19.05.2011, 19:59 Вопрос задал: Дмитрий (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Дмитрий! Вот Вам программа. Думаю, разберетесь... Если что непонятно, обращайтесь в мини-форум
Код : .model small, C ;параметры обрабатываются, как в С .data ;буфер для приема основной строки по ф-и 0ah buf1 db 80 cnt1 db 0 str1 db 80 dup (?) ;буфер для приема удаляемой подстроки по ф-и 0ah buf2 db 80 cnt2 db 0 str2 db 80 dup (?) sStr db 'Enter main string: ',0 sSubStr db 0dh, 0ah, 'Enter substring: ',0 sRes db 0dh, 0ah, 'Result: ',0 sAny db 0dh, 0ah, 'Press any key',0 .code .186 ;чтобы было возможно push <число> start: mov ax, @DATA mov ds, ax mov es, ax ;введем основную строку call GetStr, offset buf1, offset sStr ;введем подстроку call GetStr, offset buf2, offset sSubStr ;удалим подстоку call DelSubStr, offset str1, offset str2 ;выведем результат call Print, offset sRes call Print, offset str1 ;ждем нажатия на любую клавишу call Print, offset sAny mov ah, 0 int 16h ;выход в ДОС mov ax, 4c00h int 21h ;вывод строки ASCIIZ Print proc string:word mov si, string PrintLoop: lodsb cmp al, 0 ;конец строки? je PrintRet int 29h ;вывод байта из al jmp PrintLoop PrintRet: ret Print endp ;ввод строки GetStr proc sBuf:word, sTitle:word call Print, sTitle ;вывод приглашения mov dx, sBuf ;ввод строки mov si, dx ;сохраним адрес структуры mov ah, 0ah int 21h xor bx, bx ;заменим последний байт 0dh на 0 mov bl, byte ptr [si+1] ;длина строки mov byte ptr [bx+si+2], 0 ;меняем ret GetStr endp strlen proc pstr:word ;длина строки ASCIIZ push di mov di, pstr mov cx, 0ffffh ;побольше mov al, 0 repne scasb ;ищем завершающий 0 mov ax, di ;di показывает на байт за 0 sub ax, pStr ;длина строки + 1 dec ax ;0 не учитываем pop di ret strlen endp ;поиск подстроки и если найдена, то удаление ;s1 - основная строка ;s2 - подстрока DelSubStr proc s1:word, s2:word call strlen, s2 ;ищем длину под строки mov bx, ax ;сохраним call strlen, s1 ;длина основной mov dx, ax ;сохраним mov cx, ax ;посчитаем варианты вхождения sub cx, bx ;равно разнице длин jl DSS_ret ;если подстрока длиннее, то на выход mov di, s1 ;адрес основной mov si, s2 ;адрес подстроки DSS_Search: ;цикл поиска push cx ;сохраним ренистры push si push di mov cx, bx ;длина подстроки repe cmpsb ;сравниваем, пока равно pop di ;восстановим pop si pop cx je DSS_found ;если равно, то на удаление inc di ;увеличиваем начало поиска в основной строке jcxz DSS_ret ;все ли варианты вхождения прошли dec cx jmp DSS_Search ;на повтор DSS_found: ;нашли подстроку! lea si, [bx+di] ;адрес начала хвоста, который надо переписать ; на место найденной подстроки mov cx, dx ;длина основной строки sub cx, si ;cx = cx - (si - s1) add cx, s1 ;cx - длина хвоста inc cx ;вместе с 0 rep movsb ;копируем DSS_ret: ret DelSubStr endp end start ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 20.05.2011, 16:56 Номер ответа: 267275 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267275 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий