Вопрос № 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
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
необходимо составить в памяти таблицу 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 - начало таблицы.
Удачи
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Отвечает: An42
Здравствуйте, Biggle!
Программу составил, если это то, что нужно, то рад помоч
Удачи
Приложение:
Ответ отправил: An42 (статус: 1-ый класс)
Ответ отправлен: 12.04.2007, 00:42
Вопрос № 82.060
Уважаемые эксперты, вопрос может быть не по теме, но очень нужно.
Не подскажите ли какую либо WinAPI функцию которая берет указатель и возвращает этот же указатель, ничего не меняя в памяти на которую указывает этот указатель.
Отвечает: Пашка
Здравствуйте, Ярков Роман Александрович!
Можно применить функции для работы со строками:
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
будет не нужна.
Удачи!
Приложение:
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Отвечает: Зенченко Константин Николаевич
Здравствуйте, George Cracker Crackerovich!
число_десятичное=0x2^7+0x2^6+1x2^5+0*2^4+0x2^3+1x2^2+0x2^1+0x2^0
где:
0x2^0-степень основания(в даном случае двойки)
| | | |
| | | знак степени
| | основание(в даном случае двойка)
| знак умножения
цифра из Вашего числа
степени двойки в Вашем числе:543210
Ваше число из вопроса :100100
Удачи
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Отвечает: 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
Отвечает: Зенченко Константин Николаевич
Здравствуйте, George Cracker Crackerovich!
1)В любом редакторе набираете текст программы на языке ассемблера.
2)Сохраняете на диске в папку BIN каталога MASM.
3)Дальше "ПУСКПРОГРАММЫ"(STARTPROGRAMS) ищете значек "Сеанс ДОС"(MS-DOS Prompt") запускаете его(.
4)Используя команды ДОСа переходите в папку BIN каталога MASM.
5)Вводите команду ML PROGR.ASM
6)Если есть ошибки начинаете с п.1(исправление ошибок)
7)Запускаете программу.
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Отвечает: P@lach
Здравствуйте, George Cracker Crackerovich!
Для компиляции используется файл ml.exe [имя_файла.asm]
Например необходимо скомпилировать файл prog1.asm в com файл, тогда в командной строке нужно писать ml.exe prog1.asm /AT
Ответ отправил: P@lach (статус: 2-ой класс)
Ответ отправлен: 12.04.2007, 10:01