Вопрос № 178678: Уважаемые эксперты! Помогите, пожалуйста, написать код для программы в А51. Условие задачи прилагаю: Если можно, с коментариям...
Вопрос № 178697: Здравствуйте уважаемы эксперты! Прошу помощи в решение такой задачки: Сформировать файл со строками, состоящими из ИМЯ, ОТЧЕСТВО, ФАМИЛИЯ. Создать этот файл самому и заполнить его данными по своей группе. Организовать вывод на экран всех полны...
Вопрос № 178698: Здравствуйте уважаемы эксперты! Помогите пожалуйста написать программу: Задана строка символов. Составить программу, выясняющую, имеется ли в ней все буквы из слова "end". Причем порядок наличия символов в проверяемой строке должен б...
Вопрос № 178701: Здравствуйте уважаемые эксперты! Помогите пожалуйста с таким заданием: Нужно поэлементно вычесть с одного массива 8 битных чисел другой(мне с массивами как-то не приходилось работать )Вопрос № 178678:
Уважаемые эксперты! Помогите, пожалуйста, написать код для программы в А51. Условие задачи прилагаю: Если можно, с коментариями. Спасибо.
Отвечает Лысков Игорь Витальевич, Модератор :
Здравствуйте, Крупицын Игорь Викторович. Вот Вам программа. Естественно, с комментариями. По другому мы не отвечаем :) Учитываем, что адрес состоит из двух байт, поэтому сохраняем оба байта адреса. Удачи!
Код:
mov sp, #70h ;переносим вершину стека mov dptr, #array ;адрес,
где исходный массив mov r2, #len ;количество элементов исходного массива mov r3, #0 ;посчитаем число нулевых элементов mov r6, #0 ;сохраненный мл байт адреса во внешней памяти для записи результата mov r7, #0 ; ст байт адреса loop: ;цикл clr a ;поготовимся для чтения из программной памяти movc a, @a+dptr ;читаем очередной элемент jnz next ;если не нуль, то обходим mov r4, dpl ;сохраним мл байт адреса в исходном массиве
mov r5, dph ; ст байт mov dpl, r6 ;мл байт адреса, куда пишем mov dpl, r7 ; ст байт mov a, r4 ;мл байт адреса нулевого элемента movx @dptr, a ;сохраним inc dptr ;для следующего mov a, r5 ;ст байт адреса нулевого элемента movx @dptr, a ;сохраним inc dptr ;для следующего inc r3 ;считаем mov r6, dpl ;сохраним адрес внешней памяти mov r7, dph mov dpl, r4 ;восстановим мл байт адреса в исходном массиве mov dph, r5 ; ст байт next: inc dptr ;адрес
следующего элемента исходного массива djnz r2, loop ;r4=r4-1; циклим, пока r4!=0
jmp $ ;задача решена, циклимся на одном месте
array: db 1,0,0,2,3,4,5,0,0,2,0,6 len equ $-array ;длина массива end
----- Удачи!
Ответ отправил: Лысков Игорь Витальевич, Модератор
Ответ отправлен: 27.05.2010, 11:12
Номер ответа: 261707 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Абонент Skype: igorlyskov
Оценка ответа: 5 Комментарий к оценке: Огромное спасибо!
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261707
на номер 1151 (Россия) |
Еще номера »
Вопрос № 178697:
Здравствуйте уважаемы эксперты! Прошу помощи в решение такой задачки:
Сформировать файл со строками, состоящими из ИМЯ, ОТЧЕСТВО, ФАМИЛИЯ. Создать этот файл самому и заполнить его данными по своей группе. Организовать вывод на экран всех полных имён людей, имеющих задаваемое с клавиатуры имя.
Прошу написать все с комментариями чтоб понятно было) Программа Tasm.
Отвечает amnick, Студент :
Здравствуйте, Петров Юрий Иванович.
Программа приведена в приложении. Файл с данными должен быть создан предварительно. Если необходимо, то можно добавить и создание файла. Компилировать в COM-файл.
Пример данных:
Код:
Иван Петрович Сидоров неверная строка Николай
Сергеевич, Смирнов... Иван Андреевич Лисов Петр Николаевич Иванов
Строка "неверная строка" будет пропущена при разборе файла (меньше 3-х слов). Если в строке больше 3-х слов, то разбор файла прекращается. Максимальный размер файла - 40К (программа проверяет, но я эту часть не тестировал).
С вопросами обращайтесь в мини-форум.
Успехов!
Приложение:
Ответ отправил: amnick, Студент
Ответ отправлен: 27.05.2010, 23:04
Номер ответа: 261721
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261721
на номер 1151 (Россия) |
Еще номера »
Задана строка символов. Составить программу, выясняющую, имеется ли в ней все буквы из слова "end". Причем порядок наличия символов в проверяемой строке должен быть обратным их порядку в "end".
В ассемблере я не очень, так что прошу с подробными комментами! Программа Tasm.
Отвечает Airyashov, Студент :
Здравствуйте, Петров Юрий Иванович. если Я правильно понял задачу, то так
Код:
.model small ; модель пямяти для программы типа EXE .286 ; разрешить использовать команда 80286 .stack 200h ; сегмент стека
.data ; сегмент данных
mR_Yes db 'Yes',10,13,'$' ;
строка вывода если условие выполняется mR_No db 'No',10,13,'$' ; строка вывода если условие не выполняется
MyStr db 'sdfdgawfekldjklnss' ; заданная строка SizeS=$-MyStr ; длина строки
mGood db 10,13,'Работа программы окончена! ',10,13,'$' ; строки с сообщениями об успешном завершении программы
.code ; сегмент кода
@start: ; точка входа в программу mov ax,@data; иници
ализация семента данных mov ds,ax mov es,ax mov cx,SizeS ; cx=длина строки mov dx,offset mR_No ; занести в dx адрес строки с предполагаемым результатом mov di,offset MyStr ; di=адрес заданной строки mov al,'d' ; al='d' repne scasb ; поиск символа в строке je @next1 ; нашли продолжить поиск jmp @no ; если не нашли переход @next1: mov al,'n' ; al='n' repne scasb ; поиск символа в строке je @next2 ; нашли продолжить поиск jmp
no @next2: mov al,'e' ; al='e' repne scasb ; поиск символа в строке jne @no ; не нашли переход mov dx,offset mR_Yes ; занести в dx адрес строки с полученным результатом
@no: ; вывод результата mov ax,0900h ; вывести заголовок для ввода элемента массива int 21h ; вызов DOS
@end_prog: mov ax,0900h ; вывести заголовок для ввода элемента массива mov dx, offset mGood ; адрес выводимой
строки int 21h ; вызов DOS mov ax,0c07h ; ожидаем нажатие клавиши int 21h ; вызов DOS ;выход из программы mov ax,4c00h; функция DOS завершение программы int 21h ; вызов DOS end @start
Ответ отправил: Airyashov, Студент
Ответ отправлен: 27.05.2010, 20:48
Номер ответа: 261719
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261719
на номер 1151 (Россия) |
Еще номера »
Вопрос № 178701:
Здравствуйте уважаемые эксперты! Помогите пожалуйста с таким заданием: Нужно поэлементно вычесть с одного массива 8 битных чисел другой(мне с массивами как-то не приходилось работать ) Причем сначала вычетание происходит обычными командами, потом значение обеих массивов восстанавливаются до тех, которые вначале были и уже после этого происходит такое же вычетание, только командами MMX. Ввод и вывод элементов массива реализовывать не нужно,
я это сам сделаю, cамое главное, чтобы сам процес происходил в памяти и работу пока я продемонстрирую в отладчике, например AFDPro. Если можно с комментариями, спасибо большое
Отвечает Лысков Игорь Витальевич, Модератор :
Здравствуйте, Мироненко Николай Николаевич. Пара замечаний: 1) Боюсь, что Вам не получится использовать Tasm для ассемблирования программы. Увы, Tasm остановился в развитии до появления MMX. Он их не понимает! Придется использовать Masm, и то пропатченный до версии 6.12! Или писать 32-битную программу, Masm32 прекрасно понимает MMX. 2) Смотреть под досовскими отладчиками будет весьма сложно! Они ведь тоже не понимают MMX! Вот такие пирожки... А теперь сама программа:
mov cx, len ;длина массива lea di, s1 ;адреса строк lea si, s2 SubLoop: ;цикл вычитания
по-байтно lodsb ;читаем очередной байт вычитаемого sub [di], al ;отнимаем inc di ;инкремент адреса уменьшаемого/разности loop SubLoop
;восстановим исхоный массим, для этого сложим с вичитаемым mov cx, len lea di, s1 lea si, s2 AddLoop: lodsb add [di], al inc di loop AddLoop
;проделаем то же самое, используя MMX mov cx, len ;число байт shr cx, 3 ;8 байт за 1 раз lea si, s1 ;адреса строк lea di, s2 MMXSubLoop: movq MM0,
qword ptr [si] ;грузим 8 байт [si] в MM0 movq MM1, qword ptr [di] ;грузим 8 байт [di] в MM0 psubb MM0, MM1 ;отнимаем по-байтно [si]-[di] сразу все 8 байт movq qword ptr [si], MM0 ;пишем результат на место [si] (уменьшаемое/разность) add si, 8 ;на следующие 8 байт add di, 8 loop MMXSubLoop emms ;завершаем работу с MMX
mov ax,4c00h int 21h ;будем считать s1-s2 s1 db 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8 len equ $-s1 s2 db 0ffh
,0ffh,1,0ffh,2,0ffh,3,0ffh db 0feh,010h,3,011h,2,1,3,4 CSEG ends
end start
----- Удачи!
Ответ отправил: Лысков Игорь Витальевич, Модератор
Ответ отправлен: 30.05.2010, 23:14
Номер ответа: 261767 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Абонент Skype: igorlyskov
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 261767
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.