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

вторник, 21 июня 2011 г.

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

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  
  
Кухонный набор «Гжель 10 в Кухонный набор «Гжель 10 в
Кухонный набор «Гжель» 10 в 1 из гобелена В наборе: Сумка молодежная...

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

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

 
  

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

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

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

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

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

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

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


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


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


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


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

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

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

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

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

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

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


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

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

    Все выпуски рассылки
     
     
      
    Худеть не напрягаясь - легко! Худеть не напрягаясь - легко!
    Теряйте лишние килограммы с поясом для похудения Vibra Tone.

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

      Скачай журнал "Наша усадьба"! Скачай журнал "Наша усадьба"!
    Пион из поднебесной. Приусадебный орешник. Прекрасная Кливия.

     
      

    Subscribe рекомендует
     
    Компьютеры и интернет  →   рассылки   и   группы
      
    Уроки Photoshop
    Здесь публикуются самые интересные и уникальные уроки по Фотошопу, написанные профессионалами. Все материалы разделены на несколько категорий: Компьютерная графика, Спецэффекты, Фотобработка, Коллажирование, Дизайн и др.
    Подписчиков: 40320
      Статистика конфликтов и принятых на гарантию комплектующих
    Статистика конфликтов и принятых на гарантию комплектующих от сайта 4oem.ru
    Подписчиков: 414
      E-torba.net Свежие программы, описания, статьи, новости
    Свежие программы, описания, статьи о программах, рекомендации по использованию программных продуктов.
    Подписчиков: 489
     
     
     
    Подписан адрес: admin10383.deep@blogger.com
    Код этой рассылки: comp.prog.assembler
    Архив рассылки
    Отписаться:  На сайте  Почтой
    Поддержка подписчиков
    Убрать рекламу
    Другие рассылки этой тематики
    Другие рассылки этого автора
     
    Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

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

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