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

суббота, 30 апреля 2011 г.

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

 
Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
  

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

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

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

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

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

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

Номер выпуска:1442
Дата выхода:01.05.2011, 04:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:215 / 65
Вопросов / ответов:1 / 1

Вопрос № 182937: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Необходимо написать небольшую программу, пример: z=(x^2)-4y Осуществить ручной ввод x,y. После этого изменить цвет фона и вывести z, при этом изменив цвет шрифта. Спас...



Вопрос № 182937:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Необходимо написать небольшую программу, пример:
z=(x^2)-4y
Осуществить ручной ввод x,y. После этого изменить цвет фона и вывести z, при этом изменив цвет шрифта. Спасибо заранее :)

Отправлен: 25.04.2011, 17:30
Вопрос задал: JohnyWayne (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, JohnyWayne!
Чтобы использовать цвет символов, использован прямой вывод в видеопамять.
Чтобы ограничить работу с одним словом, в программе введено ограничение (полагаю, это непринципиально ):
число должно быть по модулю <= 179. (т.к. это максимальное число, когда 1792 - 4•(-179) ≤ 32767, где 32767 - максимальное знаковое число, помещающееся в слово)
Код:

.model tiny

Attr_white_on_black equ 07h ;основной цвет (белый по черному)
Attr_yellow_on_red equ 2eh ;цвет Z (желтый по красному)
MAX_NUM equ 179 ;максимальное значение чисел X и Y

.data
x dw 0
y dw 0
sEnterX db 'Enter X: ',0
sEnterY db 'Enter Y: ',0
sZ db 'Z = ',0
sAny db 'Press any key',0
sBuffer db 16 dup (?)

.code ;сегмент кода
org 100h ;начальный адрес для СОМ-программы
start:
mov ax, 0003h ;необходимо под XP для прямого вывода в видеопамять
int 10h

mov cx, 2000h ;спрячем курсор
mov ah, 1
int 10h

mov ax, 0b800h
mov es, ax ;сегмент видеопамяти

xor di, di ;первая колонка первой строки
lea si, sEnterX ;приглашение для ввода X
call EnterNum ;введем число в AX
mov x, ax ;x = AX

mov di, 80*2 ;первая колонка второй строки
lea si, sEnterY ;приглашение для ввода Y
call EnterNum ;введем число в AX
sal ax, 1 ;умножим на 2!
sal ax, 1 ;умножим на 4!
mov y, ax ;y = AX*4

mov di, 80*2*2 ;первая колонка третьей строки
lea si, sZ ;адрес строки 'Z = '
mov ah, Attr_white_on_black ;атрибут
call PrintStr ;выведем

mov ax, x
imul x
sub ax, y ;ax = x^2 - y*4

lea si, sBuffer ;адрес буфера
call ConvertToStr ;преобразуем в строку

mov ah, Attr_yellow_on_red ;желтый по красному
lea si, sBuffer ;строка-число
call PrintStr ;выведем

mov di, 80*3*2 ;четвертая строка
lea si, sAny ;Press any key
mov ah, Attr_white_on_black ;белый по черному
call PrintStr ;выведем

mov ah, 0
int 16h ;ждем any key

mov ax, 0003h
int 10h ;чтобы очистить экран

mov ax, 4c00h
int 21h ;выход в ДОС

;вывод строки [ds:si], заканчивающейся 0, в видеопамять [es:di], аттрибут в ah
PrintStr proc
lodsb
cmp al, 0
je PrintRet ;конец строки?
stosw
jmp PrintStr
PrintRet:
ret
PrintStr endp

;ввод строки с анализом на цифры, знак минус и на переполнение
EnterNum proc
;выведем приглашение
mov ah, Attr_white_on_black ;белым по черному
call PrintStr ;вывед ем

xor bx, bx ;здесь будет число
mov bp, 1 ;признак знака, 1 : >0, (-1) : <0
mov cx, 10 ;будем умножать на 10
EnterLoop:
mov ah, 0 ;ждем код
int 16h
cmp al, 0dh ;Enter - выход
je EnterRet
cmp al, '-' ;минус?
jne EnterDigit ;нет - на проверку на цифру
cmp bp, 1 ;минус уже был?
jnz EnterLoop ;был - игнорируем
stosb ;выводим на экран
inc di ;со старым аттрибутом (там 07)
neg bp ;(-1) - отрицательное число
jmp EnterLoop ;вводим дальше

EnterDigit: ;проверяем на цифры
sub al, '0' ;превратим в число 0-9
jc EnterLoop ;меньше '0' - игнорируем
cmp al, 9 ;больше '9'
ja EnterLoop ; тоже игнорируем
mov ah, 0 ;делаем слово
mov si, bx ;сохраним старое слово
xchg ax, bx ;ax = старшим разрядам, bx = введенному мл разряду
imul cx ;ax = ст разр, сдвинутым на 1 десятичный разряд
add ax, bx ;сложим с младшим
cmp ax, MAX_NUM ;с равним с максимальным
jbe DigitOk ;<= - продолжаем
mov bx, si ;восстановим старое
jmp EnterLoop ;т.о., игнорируем
Digi tOk: ;все отлично, выведем введенный разряд
xchg ax, bx ;ax = младшему разряду
add al, '0' ;делаем символ '0'-'9'
stosb ;выводим
inc di ;со старым аттрибутом
jmp EnterLoop ;продолжаем
EnterRet:
mov ax, bx ;введенное число
imul bp ;умножим на +-1, чтобы учесть знак
ret
EnterNum endp

;преобразование знакового числа из ax в строку [ds:si]
ConvertToStr proc
test ax, ax ;проверим на знак
jns form_str ;для положительного на вывод
push ax ;для отрицательного выводим - и меняем знак
mov al,'-' ;знак -
mov [si], al ;сохраним
inc si ;сдвигаем указатель
pop ax ;восстанавливаем число
neg ax ;меняем знак числа на +, теперь оно положительное

form_str:
mov bx, 10 ;будем делить на 10
xor cx, cx ;счетчик цифр
div_loop: ;цикл получения десятичных разрядов
xor dx, dx ;подготовимся для очередного деления
div bx ;в dx остаток - очередной де сятичный разряд
push dx ;сохраним в стеке (от младшего к старшему)
inc cx ;посчитаем
test ax, ax ;есть еще десятичные разряды?
jnz div_loop ;продолжим

pr_loop: ;цикл вывода десятичных цифр-символов
pop ax ;востановим очередной разряд (от старшего к младшему)
add al, '0' ; символ цифры
mov [si], al ;сохраняем
inc si
loop pr_loop ; по всем цифрам
mov byte ptr [si],0 ;закроем строку 0
ret
ConvertToStr endp

end start

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

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

Оценка ответа: 5

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


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

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

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

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

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

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

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


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

    Прошлые выпуски
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    30 апреля 2011, 03:33
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    28 апреля 2011, 15:05
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    19 апреля 2011, 20:06

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

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

      Скачай журнал "Всемирный следопыт" Скачай журнал "Всемирный следопыт"
    8 городов на воде. 5 открытий Моне. Химера Ремарка.

     
      

    Subscribe рекомендует
     
    Компьютеры и интернет  →   рассылки   и   группы
      
    Новинки Компьютерных Игр
    Обзоры последних игровых новинок. Лень покупать и листать игровые журналы? Не интересно толкаться в магазинах с играми? Не хочется ломать глаза, читая описание игры на обложке компакт-диска? Подпишитесь на рассылку!
    Подписчиков: 27551
      Обзоры струйных принтеров и МФУ
    Вашему вниманию предлагаются обзоры струйных принтеров и МФУ от интернет-магазина Printer-spb.ru. Рассылка выходит 2 раза в неделю.
    Подписчиков: 371
      Работаем в Office - Word 97/2000/XP/2003: вопросы и решения
    Начинающему и продвинутому пользователю. Использование Ворда и другого ПО для нужд вашего офиса.
    Подписчиков: 1241
     
     
     
    Подписан адрес: admin10383.deep@blogger.com
    Код этой рассылки: comp.prog.assembler
    Архив рассылки
    Отписаться:  На сайте  Почтой
    Поддержка подписчиков
    Убрать рекламу
    Другие рассылки этой тематики
    Другие рассылки этого автора
     
    Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

    Мастерская программиста

     
    Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
      
      
    Худеть не напрягаясь - легко! Худеть не напрягаясь - легко!
    Теряйте лишние килограммы с поясом для похудения Vibra Tone.

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

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

     
      

      Мои подписки      Мои группы      Мои новости     
            Автор 
    Сергей
          
      
    Компьютеры и интернет   →   Софт   →   Программирование   →   Мастерская программиста
      
    Мастерская программиста
     
     

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

    Прошлые выпуски
    Мастерская программиста    22 апреля 2011, 07:05
    Мастерская программиста    28 января 2011, 10:47
    Мастерская программиста    07 мая 2010, 08:44

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

    Subscribe рекомендует
     
    Компьютеры и интернет  →   рассылки   и   группы
      
    Уникальные новости от Свободного Журналиста
    Я - свободный журналист. Моя работа - дать Вам пищу для ума. Испытываете инфо-голод? Вкусности здесь! Цель создания группы: публикация качественной, инт...
    Темы: 61   Участники: 622
      Фото. Пейзаж
    В этой группе публикуются и обсуждают фотопейзажи. Цветочки и бабочки пейзажем не являются! Разрешается публиковать только СВОИ фотографии. Любая агресс...
    Темы: 8558   Участники: 2099
      Рукоделие
    Всё самое полезное о рукоделии! Уроки, описания, советы, схемы, книги! Вязание, шитьё, вышивание, обработка кожи, лепка, макраме, валяние, ткачество, ко...
    Темы: 11996   Участники: 33845
     
     
     
    Подписан адрес: admin10383.deep@blogger.com
    Код этой рассылки: comp.soft.prog.programist
    Архив рассылки
    Отписаться:  На сайте  Почтой
    Поддержка подписчиков
    Убрать рекламу
    Другие рассылки этой тематики
    Другие рассылки этого автора
    Написать автору
     
    Рассылка производится: Subscribe.Ru / ЗАО «Интернет-Проекты» / О компании / Политика конфиденциальности

    пятница, 29 апреля 2011 г.

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

     
    Если выпуск не отображается, вы можете прочесть его на сайте Отказаться от рекламы
      
      
    Примите участие в опросах Ipsos Access Panel и получите вознаграждение!
      
      
    Все дело в размере! Все дело в размере!
    Easy Curves - первый тренажер для женской груди!

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

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

     
      

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

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

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

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

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

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

    Номер выпуска:1441
    Дата выхода:30.04.2011, 03:30
    Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
    Подписчиков / экспертов:215 / 65
    Вопросов / ответов:1 / 1

    Вопрос № 182934: Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе: Установить заданный разряд 2-байтового слова в 1 или 0. Исходными данными являются адрес слова и команда, расположенные во внешнем ОЗУ. Формат команды: 0 разряд - значение би...



    Вопрос № 182934:

    Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе:
    Установить заданный разряд 2-байтового слова в 1 или 0. Исходными данными являются адрес слова и команда, расположенные во внешнем ОЗУ. Формат команды: 0 разряд - значение бита, 1-4 разряды - номер бита. ОМК Intel 8051.
    P.S. Преподаватель подсказал, что задачу можно решить тремя способами: с помощью масок, с помощью сдвигов и с помощью проверки "больше или меньше 7", чтобы определить в старшем или младшем байте находится заменяемый элемент. вроде так.
    вот ссылка на "URL >> АРХИТЕКТУРА И ПРОГРАММИРОВАНИЕ ОДНОКРИСТАЛЬНЫХ МИКРОКОНТРОЛЛЕРОВ MCS-51/52http://depositfiles.com/files/om2ud9mmw

    Отправлен: 25.04.2011, 02:57
    Вопрос задал: Никита Владимирович (Посетитель)
    Всего ответов: 1
    Страница вопроса »


    Отвечает Лысков Игорь Витальевич (Старший модератор) :
    Здравствуйте, Никита Владимирович!
    Вот и программа... Идея такая:
    1) сдвинаем вправо слово "номер бита" раз так, чтобы нужный бит оказался нулевым в младшем байте
    2) вставляем новое значение бита
    3) сдвигаем слово обратно, чтобы все встало на те же места
    Если что не понятно, обращайтесь...

    Код:

    ljmp start
    Org 100h
    start:
    mov sp, #60h
    mov dptr, #00h
    movx a, @dptr ;младший байт
    mov 20h, a ;чтобы иметь возможность адресовать биты
    inc dptr
    movx a, @dptr ;старший байт
    mov 21h, a
    inc dptr
    movx a, @dptr ;номер бита (1-4), бит (0)
    mov 22h, a

    rrc a ;номер бита 0-7
    mov r2, a ;сохраним как счетчик
    jz SetBit ;если бит 0, то на установку бита
    mov r3, a ;дубль счетчика, он нам еще понадобится

    RightLoop: ;цикл сдвига двойного слова вправо так,
    ; чтобы нужный бит оказался на месте 0 бита
    mov c, 20h.0 ;младший бит младшего байта
    mov a, 21h ;ст байт
    rrc a ;сдвиг вправо, acc.7 = мл биту мл слова,
    ; С = мл биту ст байта
    mov 21h, a ;сохраним
    mov a, 20h ;мл байт
    rrc a ;сдвиг вправо, acc.7 = мл биту ст байта (из C)
    ;мл бит теряем (не нужен)
    mov 20h, a ;сохраняем
    djnz r3, RightLoop ;сдвинаем "номер бита" раз

    SetBit: ;установка бита 0 в младшем байте
    mov c, 22h.0 ;новое значение бита
    mov a, 20h ;изменяемый байт
    mov acc.0, c ;устанавливаем
    mov 20h, a ;сохраняем

    ;вернем слово на место
    mov a, r2 ;счетчик сдвигов
    jz SaveData ;если бит 0, то сдвигать не надо
    LeftLoop: ;цикл сдвига влево
    mov c, 21h.7 ;ст бит ст байта
    mov a, 20h ;мл байт
    r lc a ;сдвиг влево, acc.0 = ст биту ст слова,
    ; С = ст биту мл байта
    mov 20h, a ;сохраняем
    mov a, 21h ;ст байт
    rlc a ;сдвиг влево, acc.0 = стл биту мл байта (из C)
    ;ст бит теряем (не нужен)
    mov 21h, a ;сохраняем
    djnz r2, LeftLoop ;сдвинаем "номер бита" раз

    SaveData: ;сохраним во внешней памяти
    mov dptr, #00h
    mov a, 20h
    movx @dptr, a
    inc dptr
    mov a, 21h
    movx @dptr, a

    Wait: ;бесконечный цикл
    jmp Wait

    End

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

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

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


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

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

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

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

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

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

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


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

    Прошлые выпуски
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    28 апреля 2011, 15:05
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    19 апреля 2011, 20:06
    RFpro.ru: Ассемблер? Это просто! Учимся программировать    11 апреля 2011, 17:06

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

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

      Скачай журнал "FHM" Скачай журнал "FHM"
    100 самых сексуальных женщин мира! Девушка гоу-гоу. 9 идей для извращенца.

     
      

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