WMmail.ru - сервис почтовых рассылок

суббота, 18 июня 2011 г.

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

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
Эксклюзивные бренды по клубным ценам!
  
  
Комбинации с феромонами: «Красная Комбинации с феромонами: «Красная
Комбинация и стринги Прошли те времена, когда за колдовской огонек во взгляде можно...

  Вспомни детство! Вспомни детство!
Аппарат для приготовления сахарной ваты - отличное угощение!

  Все дело в размере! Все дело в размере!
Easy Curves - первый тренажер для женской груди!

 
  

  Мои подписки      Мои группы      Мои новости     
        Автор 
Калашников О.А.
      
  
Компьютеры и интернет   →   Софт   →   Программирование   →   RFpro.ru: Ассемблер? Это просто! Учимся программировать
  
RFpro.ru: Ассемблер? Это просто! Учимся программировать
 
 

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

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

Лучшие эксперты данной рассылки

Boriss
Статус: Академик
Рейтинг: 2671
• повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 2501
• повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2216
• повысить рейтинг »

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

Номер выпуска:1463
Дата выхода:18.06.2011, 23:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:210 / 64
Вопросов / ответов:1 / 1

Вопрос № 183608: Здравствуйте! У меня возникли сложности с таким вопросом: Уважаемый Игорь Витальевич и другие эксперты! Повторяю свой вопрос за №183348 от 25,05,2011 года- требуется написать 3 варианта заданной подпрограммы ( на встроенном ассемблере, с использовани...



Вопрос № 183608:

Здравствуйте! У меня возникли сложности с таким вопросом: Уважаемый Игорь Витальевич и другие эксперты! Повторяю свой вопрос за №183348 от 25,05,2011 года- требуется написать 3 варианта заданной подпрограммы ( на встроенном ассемблере, с использованием модели памяти PASCAL (листинг) и без использования директивы MODEL (листинг)). Программу, вызывающую эти подпрограммы с указанием автора и варианта задания . Задание- копирование строк. АСС- TASM.Извините, но в мини-форум в свое время не смог войти. Поэтому отвечаю-речь идет о программе на Паскале, не на С.
Ответ за № 267396 дал Зенченко Константин Николаевич, очень ему благодарен-но второй код с директивой MODEL, а нужен без. Помогите пожалуйста. Прошу помощи в исправлении второго кода и очень необходимы комментарии на каждой строке всех программ.С благодарностью, Canijke

Отправлен: 13.06.2011, 22:36
Вопрос задал: Сanijke
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Сanijke!

Вот Вам прокомментированные тексты.
Вы зарегистрировались как "Посетитель - 377629". Это правильно.
Рекомендую переименоваться в Canijke и в будущем задавать вопросы под этим ником.
Дело в том, что временная регистрация - она и есть временная, только для ознакомления.
Работать с ней очень неудобно.

Будут вопросы, пишите в личку. С посетителя Вы не сможете написать в "чужую" консультацию...

Код на Паскале:

Код :
{строки, используемые в программе} var   a,b,c,d:string; {внешние подпрограммы} procedure CopyStrA(var x,y:string);external; {подгружаем внешний модуль q183348a.obj} {$L q183348a} procedure CopyStrB(var x,y:string);external; {подгружаем внешний модуль q183348b.obj} {$L q183348b} {процедура со встроенным Ассемблером} {параметры: x-исходная строка, y-выходная} procedure CopyStrC(var x,y:string);   begin    {начало процедуры}     asm    {задаем включение блока на асме}       cld   {задаем автоинкремент для строковых команд}       lds  si,dword ptr x {загружаем длинный адрес исходной строки в ds:si}       les  di,dword ptr y {загружаем длинный адрес выходной строки в es:di}       lodsb   {первый байт-длина строки, al = ds:[si], si=si+1}       stosb   {сохраняем es:[di] = al, di=di+1}       mov  cl,al  {длина строки в счетчик cx}       xor  ch,ch  {байт превращаем в слово}       rep  movsb  {копируем  в повторе cx байт строки es:[di]=ds:[si], si=si+1, di=di+1}     end    {конец блока на асме}   end;    {конец процедуры} begin    {начало программы}   Writeln('Canijke, 5 variant');{автор}   repeat   {ждем, пока не введем непустую строку}     write('Enter string:'); {приглашение на ввод}     readln(d)   {читаем с консоли/клавиатуры}   until length(d)>0;  {проверяем, чтобы была непустая строка}   CopyStrA(d,a);  {вызываем процедуру со встроенным Ассемблером, a=d}   writeln('Result A:',a); {выводим результат}   CopyStrB(d,b);  {вызываем процедуру, которая описана с MODEL, b=d}   Writeln('Result B:',b); {выводим результат}   CopyStrC(d,c);  {вызываем процедуру, которая описана без MODEL, c=d}   writeln('Result C:',c); {выводим результат}   readln;   {ждем нажатия на Enter, чтобы окно не закрылось сразу} end.    {конец программы} 


С директивой MODEL и упрощенным описанием сегментов:

Код :
model   small,pascal  ;модель памяти и способ передачи параметров code    ;сегмент кода public CopyStrA   ;имя будет вызываться из другого модуля proc CopyStrA   ;имя процедуры    push   bp   ;сохраним регистр, с его помощью будем адресовать параметры    mov   bp,sp   ;в bp кадр стека    cld    ;задаем автоинкремент для строковых команд     ;загрузим адреса строк, которые является длинными указателями    mov   di,[bp+04]  ;адрес в кадре стека для смещения выходной строки    mov   es,[bp+06]  ;адрес в кадре стека для сегмента выходной строки    mov   si,[bp+08]  ;адрес в кадре стека для смещения исходной строки    mov   ds,[bp+10]  ;адрес в кадре стека для сегмента исходной строки    lodsb   ;первый байт-длина строки, al = ds:[si], si=si+1    stosb   ;сохраняем es:[di] = al, di=di+1    mov   cl,al   ;длина строки в счетчик cx    xor   ch,ch   ;байт превращаем в слово    rep   movsb   ;копируем  в повторе cx байт строки es:[di]=ds:[si], si=si+1, di=di+1    pop   bp   ;восстанавливаем содержимое bp    ret   8   ;выход из подпрограммы с удалением из стека параметров - 4 слов endp    ;конец процедуры end    ;конец модуля 


Полное описание сегмента:

Код :
_TEXT   segment word public 'CODE';сегмент кода public CopyStrB   ;имя будет вызываться из другого модуля assume   cs:_TEXT  ;связываем сегментный регистр с сегментом кода proc   CopyStrB   ;имя процедуры    push   bp   ;сохраним регистр, с его помощью будем адресовать параметры    mov   bp,sp   ;в bp кадр стека    cld    ;задаем автоинкремент для строковых команд     ;загрузим адреса строк, которые является длинными указателями    mov   di,[bp+04]  ;адрес в кадре стека для смещения выходной строки    mov   es,[bp+06]  ;адрес в кадре стека для сегмента выходной строки    mov   si,[bp+08]  ;адрес в кадре стека для смещения исходной строки    mov   ds,[bp+10]  ;адрес в кадре стека для сегмента исходной строки    lodsb   ;первый байт-длина строки, al = ds:[si], si=si+1    stosb   ;сохраняем es:[di] = al, di=di+1    mov   cl,al   ;длина строки в счетчик cx    xor   ch,ch   ;байт превращаем в слово    rep   movsb   ;копируем  в повторе cx байт строки es:[di]=ds:[si], si=si+1, di=di+1    pop   bp   ;восстанавливаем содержимое bp    ret   8   ;выход из подпрограммы с удалением из стека параметров - 4 слов endp    ;конец процедуры _TEXT   ends   ;конец сегмента end

-----
Люби своего ближнего, как самого себя

Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 14.06.2011, 12:37
Номер ответа: 267721
Украина, Кировоград
Тел.: +380957525051
ICQ # 234137952
Mail.ru-агент: igorlyskov@mail.ru

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


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

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

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

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

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

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

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


     
     
    Комментировать выпуск
         В избранное

    Прошлые выпуски
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    12 июня 2011, 01:03
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    07 июня 2011, 19:33
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    06 июня 2011, 19:03

    Все выпуски рассылки
     
     
      
    Надоела сутулая спина и обвислый живот? Надоела сутулая спина и обвислый живот?
    Тренажер Ab Rocket - великолепный пресс всего за несколько недель!

      Здоровая пища: миф или реальность? Здоровая пища: миф или реальность?
    Аэрогриль Flavorwave Turbo Oven - новое слово в кухонном досуге!

      Журнал "Бытовая техника" Журнал "Бытовая техника"
    Обзор воздухоочистителей. Фены - независимый тест. Осторожно, пластиковая посуда!

     
      

    Subscribe рекомендует
     
    Компьютеры и интернет  →   рассылки   и   группы
      
    Управление сельским хозяйством района
    В России наступил очередной кризис власти. Чиновники, даже за большую зарплату, уже не могут валять дурака. А народ не хочет терпеть издевательства тысяч чиновников, щедро оплаченных нами же.
    Темы: 9   Участники: 144
      Клуб для людей, у которых дома живут Кошки
    Я знаю всё о кошачьих повадках и вообще о кошках! Поэтому я решил создать свою группу о кошках где я смогу отвечать на ваши вопросы о кошках и т.д. и т.п. !
    Темы: 3325   Участники: 2888
      Будущий Президент России
    Группа тех,кто готов поддержать на Президентских выборах 2018 года Макарова Сергея.
    Темы: 16   Участники: 288
     
     
     
    Подписан адрес: admin10383.deep@blogger.com
    Код этой рассылки: comp.prog.assembler
    Архив рассылки
    Отписаться:  На сайте  Почтой
    Поддержка подписчиков
    Убрать рекламу
    Другие рассылки этой тематики
    Другие рассылки этого автора
     
    Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

    Комментариев нет:

    Отправить комментарий