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

воскресенье, 23 октября 2011 г.

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

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

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

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

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

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

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

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

Номер выпуска:1483
Дата выхода:23.10.2011, 21:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:194 / 61
Вопросов / ответов:2 / 2

Консультация # 184261: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:Найти в массиве из 15 однобайтных чисел максимальное число и вывести его на монитор в символьной форме.Ассемблер-Tasm.exe Исполняемый файл в формате EXE. Очень надеюсь, что Вы мне поможете....


Консультация # 184263: Здравствуйте! Прошу помощи в следующем вопросе:Используя команды для работы с упакованными числами,выполнит сложение двух BCD чисел,введенных с клавиатуры. Число десятичных разрядов равно 4.результат в символьной форме переслать в видео буфер.Ассемблер-Tasm.exe Исполняемый файл в формате EXE. Очень надеюсь, что Вы мне поможете ...

Консультация # 184261:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:Найти в массиве из 15 однобайтных чисел максимальное число и вывести его на монитор в символьной форме.Ассемблер-Tasm.exe Исполняемый файл в формате EXE.
Очень надеюсь, что Вы мне поможете.

Дата отправки: 18.10.2011, 20:54
Вопрос задал: Дмитрий (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Дмитрий!
Программа сначала выводит все, заданные в программе числа,
затем ищет в массиве максимальный и выводит его.
Числа рассматриваются, как беззнаковые.

Код :
;Найти в массиве из 15 однобайтных чисел максимальное число  ;и вывести его на монитор в символьной форме. ;Ассемблер-Tasm.exe Исполняемый файл в формате EXE.  stk segment para stack ;Сегмент стека с выравниваем на 10h (para)  dw 256 dup (?) stk ends  data segment sNums db 'Numbers: $' sMax db 0dh,0ah,'Maximum = $' sAny db 0dh,0ah,'Press any key$' sData db 78,12,1,25,99,255,0,201,2,150,149,20,255,201,39 lenData equ $-sData data ends  code segment assume cs:code, ds:data, ss:stk main proc  mov ax, data ;ds = data  mov ds, ax  mov es, ax ;--- выведем все числа, для наглядности, если не надо, то можно удалить  lea dx, sNums ;Numbers:  mov ah, 9  int 21h   lea si, sData ;адрес массива  mov cx, lenData ;длина PrintAllLoop:  lodsb   ;читаем очередной  call PrintNum ;выводим  loop PrintAllLoop ;по всем ;------  lea dx, sMax ;Maximum =   mov ah, 9  int 21h  ;найдем максимум  lea si, sData ;адрес массива  mov cx, lenData ;длина  mov ah, 0  ;пусть max = 0 MaxLoop:  lodsb   ;очередной  cmp al, ah  ;сравним с максимальным  jbe MaxNext  ;<= - обходим  mov ah, al  ;> - сохраняем нового максимального MaxNext:  loop MaxLoop  ;по всем   mov al, ah  ;макимум в al  call PrintNum ;выведем   lea dx, sAny ;Press any key  mov ah, 9  int 21h   mov ah, 0  ;ждем any key, чтобы не ушло с экрана  int 16h   mov ax, 4c00h  int 21h main endp   PrintNum proc  ;вывод беззнакового числа из al  push cx  mov bl, 10  ;будем делить на 10  xor cx, cx  ;счетчик цифр DivLoop:  mov ah, 0  ;готовимся к делению ax / bl  div bl  ;al - частное, ah - остаток=очередной младшей цифре  push ax  ;сохраним цифру в ah в стеке  inc cx  ;посчитаем  cmp al, 0  ;продолжим, пока не 0  jnz DivLoop  mov ah, 2  ;функция вывода PrintLoop:   ;будем выводить в обратном порядке, начиная со старшей шифры  pop dx  ;восстановим очередной разряд  mov dl, dh  or dl, '0'  ;превратим в символ  int 21h  ;выведем  loop PrintLoop  mov dl, ' '  ;отделим пробелом  int 21h  pop cx  ret PrintNum endp  code ends   end main 

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 19.10.2011, 00:34
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 184263:

Здравствуйте! Прошу помощи в следующем вопросе:Используя команды для работы с упакованными числами,выполнит сложение двух BCD чисел,введенных с клавиатуры. Число десятичных разрядов равно 4.результат в символьной форме переслать в видео буфер.Ассемблер-Tasm.exe Исполняемый файл в формате EXE.
Очень надеюсь, что Вы мне поможете

Дата отправки: 18.10.2011, 20:59
Вопрос задал: Дмитрий (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Дмитрий!
Вот Вам программа для решения задачи.
Вводятся два числа ровно по 4 цифры, складываются и выводится результат в виде: 1234 + 2345 = 3579
Учитывается, что при складывании двух четырехзначных чисел результат может быть и пятизначным.
Кроме того, сделана синхронизации курсора на экране и позиции в буфере экрана

Код :
;Используя команды для работы с упакованными числами, ;выполнить сложение двух BCD чисел,введенных с клавиатуры.  ;Число десятичных разрядов равно 4. ;Результат в символьной форме переслать в видео буфер. ;Ассемблер-Tasm.exe Исполняемый файл в формате EXE.  stk segment para stack ;Сегмент стека с выравниваем на 10h (para)  dw 256 dup (?) stk ends  Color equ 07h  ;атрибут (цвет) выводимых символов  data segment sNum1 db 'Enter number 1 (4 digits): ',0 sNum2 db 'Enter number 2 (4 digits): ',0 sPlus db ' + ',0 sEqual db ' = ',0 sAny db 'Press any key',0 data ends   .286  code segment assume cs:code, ds:data, ss:stk main proc  mov ax, data ;ds = data1  mov ds, ax  mov ax, 0b800h ;es = video  mov es, ax          mov ax,3  ;необходимо под ХР для прямой         int 10h    ;записи в видеобуфер  ;Вводим первое число  lea si, sNum1 ;Enter number 1:  xor di, di  ;в начале первой строки  call Print  ;выводим  call GetNum  ;вводим число из 4 цифр   mov cx, ax  ;сохраним BCD в cx  ;Вводим второе число  lea si, sNum2 ;Enter number 2:  mov di, 80*2 ;в начале второй строки  call Print  ;выводим  call GetNum  ;вводим число  mov dx, ax  ;сохраним в dx  ;выводим результат  mov di, 2*80*2 ;в начале третьей строки  mov ax, cx  ;первое число  call PrintBCD ;выводим BCD из ax  lea si, sPlus ;+  call Print  mov ax, dx  ;второе число  call PrintBCD  lea si, sEqual ;=  call Print  call sum  ;ax = cx + dx, перенос в bl  cmp bl, 0  ;сумма меньше 10000?  je PrintNum ;да - выводим 4 цифры  push ax  ;нет - выведем еще один разряд из переноса  mov ah, Color ;атрибут (цвет)  mov al, bl  ;пятый старший разряд  or al, 30h  ;сделаем символом  stosw   ;пишем в видеопамять  pop ax  ;восстановим остальные 4 разряда PrintNum:  call PrintBCD ;выводим BCD из ax   lea si, sAny ;выводим строку Press any key  mov di, 3*80*2 ;в начале третьей строки  call Print  ;выводим  call SetPos  ;установим курсор за строкой   mov ah, 0  ;ждем "any key"  int 16h   mov ax, 4c00h  int 21h main endp  sum proc   ;ax = cx + dx, перенос в bl  mov al, cl  ;складываем младший байт с двумя разрядами  add al, dl  daa   ;десятичная коррекция суммы, перенос в С  mov ah, al  ;сохраним в ah  mov al, ch  ;складываем старшие байты  adc al, dh  daa   ;десятичная коррекция суммы, перенос в С  xchg al,ah  ;поменяем местами  mov bl, 0  ;учтем перенос  adc bl, 0  ret sum endp  PrintBCD proc  ;вывод BCD из ax  push cx  mov bx, ax  ;ax будем испоьзовать для вывода  mov cx, 4  ;4 цифры  mov ah, Color ;атрибут-цвет PrintBCD_Loop:  rol bx, 4  ;старшие 4 бита попадают в 4 млпдших  mov al, bl  ;формируем цифру-символ  and al, 0fh  ;сбросим старшие биты  or al, 30h  ;сделаем цифру-символ  stosw   ;выводим  loop PrintBCD_Loop ;по всем цифрам  pop cx  ret PrintBCD endp  GetNum proc   ;вводим 4 цифры  push cx  mov cx, 4  ;число цифр GetNum_Loop:  call SetPos  ;установим позицию на экране GetNum_Key:  mov ah, 0  int 16h  ;ждем код  cmp al, '0'  jb GetNum_Key  cmp al, '9'  ;проверим на цифру  ja GetNum_Key     ;эхо на экран  mov ah, Color ;цвет  stosw   ;выведем  and al, 0fh  ;сделаем числом  shl dx, 4  ;подвинем старшие разряды  or dl, al  ;поставим число на место младшей цифры  loop GetNum_Loop ;по всем цифрам  mov ax, dx  ;возвратим BCD в ax  pop cx  ret GetNum endp  print proc   ;вывод на экран строки ds:[si]     ;по адресу es:[di]  mov ah, Color ;атрибут (цвет) printLoop:  lodsb   ;очередной  cmp al, 0  ;конец строки?  je printRet  stosw   ;выводим  jmp printLoop printRet:  ret print endp  SetPos proc   ;установка позиции курсора   push dx  ;в нулевой странице видеопамяти  push cx  ;на входе di - смещение в видеопамяти  mov ax, di  ;позиция в видеобуфере  xor dx, dx  ;подготовимся к делению  mov cx, 80*2 ;число байт на одну строку  div cx  ;dx:ax / cx  shr dl, 1  ;dl = колонке  mov dh, al  ;dh = строке  mov ah, 2  ;функция установки позиции курсора  mov bh, 0  ;0 страница  int 10h  pop cx  pop dx  ret SetPos endp  code ends  end main

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 18.10.2011, 23:09
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


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

Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программировать    21 октября 2011, 21:33
RFpro.ru: Ассемблер? Это просто! Учимся программировать    16 октября 2011, 02:03
RFpro.ru: Ассемблер? Это просто! Учимся программировать    08 октября 2011, 22:04

Все выпуски рассылки

24 октября 2011 отмечают:
День подразделений специального назначения
Всемирный день информации о&nbsp;развитии
День Организации Объединенных Наций
День работников стандартизации и&nbsp;метрологии Кыргызстана
Неделя разоружения
День святого Рафаила в&nbsp;Кордове

Именины: Александр, Моисей, Анатолий, Виктория, Зинаида, Иларион, Иосиф, Исаакий, Лев, Макар
 
 

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

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

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