Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 2420
∙ повысить рейтинг »
_Ayl_
Статус: Профессионал
Рейтинг: 1857
∙ повысить рейтинг »
vladisslav
Статус: 6-й класс
Рейтинг: 1227
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Assembler (Ассемблер)

Номер выпуска:1350
Дата выхода:02.06.2010, 01:00
Администратор рассылки:Лысков Игорь Витальевич, Модератор
Подписчиков / экспертов:260 / 62
Вопросов / ответов:4 / 4
IRC-канал по теме:#assembler

Вопрос № 178678: Уважаемые эксперты! Помогите, пожалуйста, написать код для программы в А51. Условие задачи прилагаю: Если можно, с коментариям...


Вопрос № 178697: Здравствуйте уважаемы эксперты! Прошу помощи в решение такой задачки: Сформировать файл со строками, состоящими из ИМЯ, ОТЧЕСТВО, ФАМИЛИЯ. Создать этот файл самому и заполнить его данными по своей группе. Организовать вывод на экран всех полны...
Вопрос № 178698: Здравствуйте уважаемы эксперты! Помогите пожалуйста написать программу: Задана строка символов. Составить программу, выясняющую, имеется ли в ней все буквы из слова "end". Причем порядок наличия символов в проверяемой строке должен б...
Вопрос № 178701: Здравствуйте уважаемые эксперты! Помогите пожалуйста с таким заданием: Нужно поэлементно вычесть с одного массива 8 битных чисел другой(мне с массивами как-то не приходилось работать )
Вопрос № 178678:

Уважаемые эксперты! Помогите, пожалуйста, написать код для программы в А51. Условие задачи прилагаю:
Если можно, с коментариями. Спасибо.

Отправлен: 27.05.2010, 01:31
Вопрос задал: Крупицын Игорь Викторович, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич, Модератор :
Здравствуйте, Крупицын Игорь Викторович.
Вот Вам программа. Естественно, с комментариями. По другому мы не отвечаем :)
Учитываем, что адрес состоит из двух байт, поэтому сохраняем оба байта адреса.
Удачи!
Код:

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 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 178697:

    Здравствуйте уважаемы эксперты! Прошу помощи в решение такой задачки:

    Сформировать файл со строками, состоящими из ИМЯ, ОТЧЕСТВО, ФАМИЛИЯ. Создать этот файл самому и заполнить его данными по своей группе. Организовать вывод на экран всех полных имён людей, имеющих задаваемое с клавиатуры имя.

    Прошу написать все с комментариями чтоб понятно было) Программа Tasm.

    Отправлен: 27.05.2010, 16:48
    Вопрос задал: Петров Юрий Иванович, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает amnick, Студент :
    Здравствуйте, Петров Юрий Иванович.

    Программа приведена в приложении. Файл с данными должен быть создан предварительно. Если необходимо, то можно добавить и создание файла.
    Компилировать в COM-файл.

    Пример данных:
    Код:
    Иван Петрович Сидоров
    неверная строка
    Николай Сергеевич, Смирнов...
    Иван Андреевич Лисов
    Петр Николаевич Иванов

    Строка "неверная строка" будет пропущена при разборе файла (меньше 3-х слов). Если в строке больше 3-х слов, то разбор файла прекращается. Максимальный размер файла - 40К (программа проверяет, но я эту часть не тестировал).

    С вопросами обращайтесь в мини-форум.

    Успехов!

    Приложение:

    Ответ отправил: amnick, Студент
    Ответ отправлен: 27.05.2010, 23:04
    Номер ответа: 261721

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261721 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 178698:

    Здравствуйте уважаемы эксперты! Помогите пожалуйста написать программу:

    Задана строка символов. Составить программу, выясняющую, имеется ли в ней все буквы из слова "end". Причем порядок наличия символов в проверяемой строке должен быть обратным их порядку в "end".

    В ассемблере я не очень, так что прошу с подробными комментами! Программа Tasm.

    Отправлен: 27.05.2010, 16:51
    Вопрос задал: Петров Юрий Иванович, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает 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 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 178701:

    Здравствуйте уважаемые эксперты!
    Помогите пожалуйста с таким заданием:
    Нужно поэлементно вычесть с одного массива 8 битных чисел другой(мне с массивами как-то не приходилось работать )
    Причем сначала вычетание происходит обычными командами, потом значение обеих массивов восстанавливаются до тех, которые вначале были и уже после этого происходит такое же вычетание, только командами MMX. Ввод и вывод элементов массива реализовывать не нужно, я это сам сделаю, cамое главное, чтобы сам процес происходил в памяти и работу пока я продемонстрирую в отладчике, например AFDPro. Если можно с комментариями, спасибо большое

    Отправлен: 27.05.2010, 17:43
    Вопрос задал: Мироненко Николай Николаевич, Практикант
    Всего ответов: 1
    Страница вопроса »


    Отвечает Лысков Игорь Витальевич, Модератор :
    Здравствуйте, Мироненко Николай Николаевич.
    Пара замечаний:
    1) Боюсь, что Вам не получится использовать Tasm для ассемблирования программы. Увы, Tasm остановился в развитии до появления MMX.
    Он их не понимает! Придется использовать Masm, и то пропатченный до версии 6.12! Или писать 32-битную программу, Masm32 прекрасно понимает MMX.
    2) Смотреть под досовскими отладчиками будет весьма сложно! Они ведь тоже не понимают MMX!
    Вот такие пирожки... А теперь сама программа:
    Код:

    .586
    .MMX
    assume cs:CSEG,ds:CSEG

    CSEG segment use16
    start:
    mov ax, CSEG ;проиницируем сегментные регистры
    mov ds, ax
    mov es, ax

    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 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.16 от 26.05.2010

    В избранное