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

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


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

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

Выпуск № 725
от 17.04.2007, 01:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 377, Экспертов: 41
В номере:Вопросов: 7, Ответов: 13


Вопрос № 82035: Здравствуйте! Стоит задача повеситься на прерывание COM-порта и организовать буферный обмен между прибором и компом под управлением MS-DOS. Мой алгоритм следующий: - сначала инициализирую COM-порт (LISTING 1), - потом вешаю рези...
Вопрос № 82050: необходимо составить в памяти таблицу ascii символов с диапазоном кодов от 51 до 219 по столбцам из 12 символов.затем вывести на экран. помогите....
Вопрос № 82060: Уважаемые эксперты, вопрос может быть не по теме, но очень нужно. Не подскажите ли какую либо WinAPI функцию которая берет указатель и возвращает этот же указатель, ничего не меняя в памяти на которую указывает этот указатель....
Вопрос № 82130: Здравствуйте,уважаемые эксперты!!подскажите пожалуйста как примерно составить следующую программу:при нажатии и отпускании клавиши на экране должен появляться scan-код этой клавиши и ascii-код (для символьных клавиш)....
Вопрос № 82135: Здравствуйте. У меня такое задание: Вывести на экран те слова, которые отличны от последнего слова строки и первая буква этого слова входит в него ещё раз. Опыта работы со строками в асме вообще нет. Как найти последнее слово и те слова, что...
Вопрос № 82141: такой пример 100100,как перевести из двоичной системы в десятичную....
Вопрос № 82144: КАК ПОЛЬЗОВАТЬСЯ ПРОГРАММОЙ MASM 6.12...

Вопрос № 82.035
Здравствуйте!
Стоит задача повеситься на прерывание COM-порта и организовать буферный обмен
между прибором и компом под управлением MS-DOS.
Мой алгоритм следующий:
- сначала инициализирую COM-порт (LISTING 1),
- потом вешаю резидента сл. способом (на примере 21 прерывания)(LISTING 2)
- создаю буфер и накапливаю в нем символы

В ходе реализации возникли проблемы:
[разработка на ноутбуке с ms-dos и обычным PC, соединенными через COM1 посредством кабеля]

1. На какое прерывание вешать обработку сообщений от порта?
2. Если первым действием я просто инициализирую порт (LISTING 1) на ноутбуке, затем
на PC запускаю программу-терминал и посылаю какой-нибудь символ, то на ноутбуке,
запустив программку-считывания с 3f8(для первого порта) я ничего не получаю. Почему?
Учитывая, что при инициализации на ноутбуке последним делом я разрешаю обработку прерываний.
Такое ощущение, что прерывание попросту не работает. Я также пробывал проверять 3f9 для
фиксации флагов появления прерываний, одновременно термналом посылая символы.
3. Программы, приведенные в листингах верны - они тестировались. Прочтя множества
материала, запутался окончательно в последовательности итераций. Намекните на возможную ошибку.

В общем не удается перехватить прерывание идущее на порт

Приложение:

Отправлен: 11.04.2007, 07:52
Вопрос задал: Nikkidemo (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, Nikkidemo!

Посмотри мои исходники. Может быть, помогут.
http://eugene-ivanov.narod.ru/research_mou3.htm

---------
Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 11.04.2007, 10:04

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Nikkidemo!
для прямого кабельного соединения необходим нуль-модемнный кабель
есть для COM,LPT и LAN
посмотрите распайку тут:
http://www.hardwarebook.info
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 10-ый класс)
Ответ отправлен: 11.04.2007, 10:47


Вопрос № 82.050
необходимо составить в памяти таблицу ascii символов с диапазоном кодов от 51 до 219 по столбцам из 12 символов.затем вывести на экран. помогите.
Отправлен: 11.04.2007, 10:25
Вопрос задал: Biggle (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 10)

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

Пишете макрос:
Number = 51
AsciTable label byte
rept (219-51+1)
db Number
Number = Number +1
endm
в память будут записаны последовательно цифры от 51 до 219
AsciTable - начало таблицы.
Удачи
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 10-ый класс)
Ответ отправлен: 11.04.2007, 10:40

Отвечает: An42
Здравствуйте, Biggle!
Программу составил, если это то, что нужно, то рад помоч

Удачи

Приложение:

Ответ отправил: An42 (статус: 1-ый класс)
Ответ отправлен: 12.04.2007, 00:42


Вопрос № 82.060
Уважаемые эксперты, вопрос может быть не по теме, но очень нужно.
Не подскажите ли какую либо WinAPI функцию которая берет указатель и возвращает этот же указатель, ничего не меняя в памяти на которую указывает этот указатель.
Отправлен: 11.04.2007, 11:49
Вопрос задал: Ярков Роман Александрович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Пашка
Здравствуйте, Ярков Роман Александрович!

Можно применить функции для работы со строками:
char* strstr(source1,source2) - находин первое вхождение строки source2 в source1.
Фишка такая:
strstr(source1,source1)
Например:
#include <string.h>
#include <stdio.h>

void main(){
char source1[] = "Angelina";
printf("%s ",strstr(source1,source1));
}
Осталось только найти похожую API-функцию.
Ответ отправил: Пашка (статус: 1-ый класс)
Ответ отправлен: 11.04.2007, 13:16


Вопрос № 82.130
Здравствуйте,уважаемые эксперты!!подскажите пожалуйста как примерно составить следующую программу:при нажатии и отпускании клавиши на экране должен появляться scan-код этой клавиши и ascii-код (для символьных клавиш).
Отправлен: 11.04.2007, 20:19
Вопрос задал: YU678LYA (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, YU678LYA!
mov ah,00h
int 16h
читает символ с клавиатуры:
al-символ
ah-скен-код
mov ah,01h
int 16h
проверяет состояние ввода:
если символ есть:
флаг НУЛЯ сброшен
al-символ
ah-скен-код
если символа нет
флаг НУЛЯ установлен

Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 10-ый класс)
Ответ отправлен: 11.04.2007, 20:37
Оценка за ответ: 5

Отвечает: Лысков Игорь Витальевич
Здравствуйте, YU678LYA!
Для ДОС-а ? Нет ничего проще...
Строим такой цикл:
wait_key:
mov ah,0
int 16h ; ждем очередное нажатие
; получаем в ah скан-код, в al ASCII-код
cmp ah, 1 ;проверим, например, на Esc (чтобы выйти)
je exit ;конец
; преобразовываем к нужному виду коды и выводим (тут проблем, надеюсь, нет?)
jmp wait_key ;повтор
exit: int 20h

---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 11.04.2007, 20:44
Оценка за ответ: 5


Вопрос № 82.135
Здравствуйте. У меня такое задание:
Вывести на экран те слова, которые отличны от последнего слова строки и первая буква этого слова входит в него ещё раз.
Опыта работы со строками в асме вообще нет. Как найти последнее слово и те слова, что отличны от него? Желательно без стека. Работаю с tasm'ом. Заранее спасибо
Отправлен: 11.04.2007, 21:03
Вопрос задал: InviZible (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 8)

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

См. приложение:
Если совсем без строковых команд то команду - lodsb
замените на
mov al,[si]
dec si
и команда
stc
будет не нужна.

Удачи!

Приложение:

---------
И только наступив на грабли мы преобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: 10-ый класс)
Ответ отправлен: 12.04.2007, 18:54


Вопрос № 82.141
такой пример 100100,как перевести из двоичной системы в десятичную.
Отправлен: 11.04.2007, 21:24
Вопрос задал: George Cracker Crackerovich (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, George Cracker Crackerovich!
число_десятичное=0x2^7+0x2^6+1x2^5+0*2^4+0x2^3+1x2^2+0x2^1+0x2^0
где:
0x2^0-степень основания(в даном случае двойки)
| | | |
| | | знак степени
| | основание(в даном случае двойка)
| знак умножения
цифра из Вашего числа

степени двойки в Вашем числе:543210
Ваше число из вопроса :100100

Удачи
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 10-ый класс)
Ответ отправлен: 11.04.2007, 21:57

Отвечает: Sov
Здравствуйте, George Cracker Crackerovich!
100100=1*2^5+0*2^4+0*2^3+1*2^2+0*2^1+0*2^0=36
Ответ отправил: Sov (статус: 1-ый класс)
Ответ отправлен: 12.04.2007, 06:16

Отвечает: An42
Здравствуйте, George Cracker Crackerovich!

двоичное число 100100
номер позиции 543210
перевод в десятичную 100100=1*2^5+0*2^4+0*2^3+1*2^2+0*2^1+0*2^0=32+0+0+4+0+0=36
или слева на право первую цифру умножаем на 2 и прибавляем последующую цифру, затем к полученный результат умножаем на 2 и прибавляем последующую цифру и т.д.

другой способ
перевод 100100
номера шагов 123456
первый шаг: первую с лева цифру умножаем на 2 и прибавляем следящую цифру 0, 1*2+0=2
второй шаг: полученный результат первого шага умножаем на 2 и прибавляем следующую цифру 0, 2*2+0=4
третий шаг: полученный результат второго шага умножаем на 2 и прибавляем следующую цифру 0, 4*2+1=9
четвертый шаг: полученный результат второго шага умножаем на 2 и прибавляем следующую цифру 1, 9*2+0=36
последний шаг к полученному результату прибавить последнюю цифру в нашем примере это 0, 36+0=36

Удачи
Ответ отправил: An42 (статус: 1-ый класс)
Ответ отправлен: 12.04.2007, 09:45


Вопрос № 82.144
КАК ПОЛЬЗОВАТЬСЯ ПРОГРАММОЙ MASM 6.12
Отправлен: 11.04.2007, 21:54
Вопрос задал: George Cracker Crackerovich (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

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

1)В любом редакторе набираете текст программы на языке ассемблера.
2)Сохраняете на диске в папку BIN каталога MASM.
3)Дальше "ПУСКПРОГРАММЫ"(STARTPROGRAMS) ищете значек "Сеанс ДОС"(MS-DOS Prompt") запускаете его(.
4)Используя команды ДОСа переходите в папку BIN каталога MASM.
5)Вводите команду ML PROGR.ASM
6)Если есть ошибки начинаете с п.1(исправление ошибок)
7)Запускаете программу.
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 10-ый класс)
Ответ отправлен: 11.04.2007, 22:13

Отвечает: P@lach
Здравствуйте, George Cracker Crackerovich!
Для компиляции используется файл ml.exe [имя_файла.asm]
Например необходимо скомпилировать файл prog1.asm в com файл, тогда в командной строке нужно писать ml.exe prog1.asm /AT
Ответ отправил: P@lach (статус: 2-ой класс)
Ответ отправлен: 12.04.2007, 10:01


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.50 (beta) от 15.04.2007
Яндекс Rambler's Top100

В избранное