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

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


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

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

Выпуск № 676
от 07.02.2007, 13:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 380, Экспертов: 32
В номере:Вопросов: 3, Ответов: 5


Вопрос № 73626: мне надо написать программу на языке ассемблер, которая бы в введенной строке заменяла все символы 'r' введенной подстрокой,строка и подстрока вводятся с клавиатуры.ПОМОГИТЕ СТУДЕНТУ Начало программы есть,но надо видеть результат,его надо видеть на э...
Вопрос № 73627: Здравствуйте!! Помогите пожалуйста решить следующие задачи. Все задачи имеют отношение к следующим данным: DATAX DW 0148H DW 2316H DATAY DW 0237H DW 4052H 1) Закодировать команды для сложения: А) слов...
Вопрос № 73635: Здравствуйте! Задача: резидентная прграмма под дос, которая отслеживает нажатие какой-либо комбинации клавиш(какой не имеет значения) и псоле этого изменяет все введенные символы на символы противоположного языка(Н-р набрали кгы нажимаем комбина...

Вопрос № 73.626
мне надо написать программу на языке ассемблер, которая бы в введенной строке заменяла все символы 'r' введенной подстрокой,строка и подстрока вводятся с клавиатуры.ПОМОГИТЕ СТУДЕНТУ Начало программы есть,но надо видеть результат,его надо видеть на экране.Я не пойму где надо пиать MOV Al,'r' или вобще здесь ничего не правильно.Понимаю что программа небольшая

Приложение:

Отправлен: 01.02.2007, 13:20
Вопрос задал: ProY (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Олег Владимирович
Здравствуйте, ProY!

MODEL SMALL и полное определение сегментов... Брр. :) Либо то, либо другое.

В приложении работающая прога.
Удачи!

Приложение:

---------
Факультет ПМ-ПУ - лучший в СПбГУ!

Ответ отправил: Олег Владимирович (статус: Студент)
Ответ отправлен: 01.02.2007, 14:36
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!!!!!
Очень быстро и вроде работает,
я ведь student

Отвечает: Зенченко Константин Николаевич
Здравствуйте, ProY!

см. приложение
можно еще стек дописать прижелании
Удачи!

Приложение:

Ответ отправил: Зенченко Константин Николаевич (статус: 2-ой класс)
Ответ отправлен: 01.02.2007, 15:48
Оценка за ответ: 3
Комментарий оценки:
Спасибо!!
Но по-моему прога маленько не так работает,надо поковыряться и доделать


Вопрос № 73.627
Здравствуйте!!
Помогите пожалуйста решить следующие задачи.

Все задачи имеют отношение к следующим данным:

DATAX DW 0148H
DW 2316H
DATAY DW 0237H
DW 4052H

1) Закодировать команды для сложения:
А) слова DATAX со словом DATAY
Б) двойного слова начинающегося по адресу DATAX с двойным словом в DATAY

2) Объясните действие следующих команд:
STC
MOV BX,DATAX
ADC BX,DATAY

3) Закодируйте команды для умножения:
А) слова DATAX со словом DATAY
Б) двойного слова начинающегося по адресу DATAX на слово DATAY

4) Закодируйте команды для деления:
А) слова DATAX на 23
Б) двойного слова начинающегося по адресу DATAX на слово DATAY
Отправлен: 01.02.2007, 13:24
Вопрос задал: Алексей Береев (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Олег Владимирович
Здравствуйте, Алексей Береев!

(1a) MOV AX, DATAX ;Помещаем слагаемое в регистр
ADD AX, DAYAY ;Прибавляем к нему второе слагаемое
Результат в AX

(1б) Так как DATAX и DATAY объявлены с помощью DW, в предыдущем примере директивы определения размерности не требовались. А вот в этом:
MOV EAX, DWORD PTR DATAX ;Копируем 4 байта, начиная с DATAX, в 32битный регистр
ADD EAX, DWORD PTR DATAY ;Прибавляем двойное слово по адресу DATAY
Результат в EAX

Можно по-другому, не используя 32битные регистры:
MOV AX, DATAX ;Младшее слово -> AX
MOV DX,WORD PTR DATAX+2 ;Старшее слово -> DX
ADD AX, DATAY ;Складываем младшие слова
ADC DX, WORD PTR DATAY+2 ;Складываем старшие слова с учётом переноса из младшей части
Результат в регистровой паре DX:AX (старшее слово в DX)

(2) STC ; Устанавливает флаг переноса (CF) в 1
MOV BX,DATAX ;Копирует слово DATAX в BX
ADC BX,DATAY ;Помещает в BX следующее: BX+DATAX+CF. Так что отличие от 1a в том, что результат на 1 больше.

(3a) MOV AX,DATAX
IMUL AX,DATAY ;Команда знакового умножения AX на слово DATAY
Результат в AX

Другой вариант:
MOV AX, DATAX
MUL DATAY ;Умножает AX на операнд, помещая результат в пару DX:AX. Умножение беззнаковое (для знакового используйте IMUL)

(3б) Без комментариев
MOV EAX,DWORD PTR DATAX
IMUL EAX, DWORD PTR DATAY
или
MOV EAX,DWORD PTR DATAX
MUL DWORD PTR DATAY ;Результат в EDX:EAX

(4a) MOV AX,DATAX;Делимое
MOV DX,0;Его старшая часть
MOV BX,23
DIV BX;Делит беззнаковое DX:AX на операнд. Частное в AX, остаток в DX

(4б) Без комментариев
MOV EAX,DWORD PTR DATAX
MOV EDX,0
DIV DWORD PTR DATAY

Примеры не проверялись :)
Удачи!
---------
Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: Студент)
Ответ отправлен: 01.02.2007, 13:49

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Алексей Береев!
вопросы 1,3,4 в приложении
2)
STC;устанавливаем флаг переноса CF=1
MOV BX,DATAX;загружаем в BX значение 0148H
ADC BX,DATAY;складываем BX и значение 0237H, и еще 1 из флага CF, и записываем все в BX
;в результате BX равен 0380H

Удачи!

Приложение:

Ответ отправил: Зенченко Константин Николаевич (статус: 2-ой класс)
Ответ отправлен: 01.02.2007, 16:29


Вопрос № 73.635
Здравствуйте!
Задача: резидентная прграмма под дос, которая отслеживает нажатие какой-либо комбинации клавиш(какой не имеет значения) и псоле этого изменяет все введенные символы на символы противоположного языка(Н-р набрали кгы нажимаем комбинацию клавиш и получаем rus).
Если у кого-нибудь есть подобные программы, пожалуйста выложите!
Отправлен: 01.02.2007, 14:42
Вопрос задал: Xabar (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Xabar!
Фунцией 35h узнаем адрес старого обработчика 21h прерывания.

mov ax,3521h
int 21h
ES:BX-сегмент:относительный адрес обработчика прирывания
Функцией 25h ставим свой обработчик прерывания 21h

mov ax,2521h
push cs
pop ds
mov dx,offset new21;относительный адрес нового обработчика
int 21h

после этого все 21h прерывания будут поступать на установленный обработчик
в своем обработчике проверяеш AH=0Ah
Если не равно передаем на старый обработчик с помощью JMP FAR XXXX.
Если равно работаем с помощью портов клавиатуры 60h - 6Fh и со скан-кодами , имитируя функцию буферизированного ввода с клавиатуры, использование портов позволяет определять моменты нажатия и отпускания клавиш включая SHIFT, CTRL, ALT.
Можно использовать старый обработчик прерывания для вывода на экран, вызывая его с помощью CALL FAR ХХХХ и учитывая, что он возвращается по IRET.
Удачи!
Ответ отправил: Зенченко Константин Николаевич (статус: 2-ой класс)
Ответ отправлен: 01.02.2007, 20:45
Оценка за ответ: 4


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

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.43 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное