![]() |
|
|
![]()
|
|
| igSde |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Мне нужен аналог данного Pascal кода на Ассемблере.
if KeyPressed then S := readKey; Спасибо. |
|||
|
||||
| airyashov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 1.7.2008 Репутация: 2 Всего: 6 |
пользуемся поиском int 16h
-------------------- icq:3(один)7748666 mail:airyashov( а )inbox.ru |
|||
|
||||
| iff |
|
||||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
или высокоуровнево при помощи прерываний ДОС:
Это сообщение отредактировал(а) iff - 23.5.2010, 12:00 -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
||||
|
|||||
| igSde |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Только сегодня проверил предложенные решения,
к сожалению, во обоих случаях программа не работает. AL обнуляется во время вызова прерываний : mov ah,11h int 16h mov ah,0bh int 21h DSEG SEGMENT s db 0 DSEG ENDS ;--------------- stack segment ------------------------------- SSEG SEGMENT STACK DW 100h DUP(?) SSEG ENDS ;---------------- code segment -------------------------------- CSEG SEGMENT ASSUME DS:DSEG,SS:SSEG,CS:CSEG START:mov AX,DSEG mov DS,AX mov ah, 01h int 21h ; mov ah, 0bh ; int 21h ; cmp al, 0 ; jz exit ; mov ah, 7 ; int 21h ; mov s, al mov ah,11h int 16h cmp al, 0 jz exit mov s, al exit: ;--------------------- return to Dos ------------ mov AH,4ch int 21h CSEG ENDS END START В чем проблема/ошибка? Cпасибо. Это сообщение отредактировал(а) igSde - 22.5.2010, 19:16 |
|||
|
||||
| igSde |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Только сегодня проверил предложенные решения,
к сожалению, во обоих случаях программа не работает. AL обнуляется во время вызова прерываний : mov ah,11h int 16h mov ah,0bh int 21h DSEG SEGMENT s db 0 DSEG ENDS ;--------------- stack segment ------------------------------- SSEG SEGMENT STACK DW 100h DUP(?) SSEG ENDS ;---------------- code segment -------------------------------- CSEG SEGMENT ASSUME DS:DSEG,SS:SSEG,CS:CSEG START:mov AX,DSEG mov DS,AX mov ah, 01h int 21h ; mov ah, 0bh ; int 21h ; cmp al, 0 ; jz exit ; mov ah, 7 ; int 21h ; mov s, al mov ah,11h int 16h cmp al, 0 jz exit mov s, al exit: ;--------------------- return to Dos ------------ mov AH,4ch int 21h CSEG ENDS END START В чем проблема/ошибка? Cпасибо. |
|||
|
||||
| airyashov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 1.7.2008 Репутация: 2 Всего: 6 |
вы случаем не расширенные клавиши нажимаете
-------------------- icq:3(один)7748666 mail:airyashov( а )inbox.ru |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
1. Используйте тег код!
2. А что значит не работает? Дело в том, что в вашей программе, при исполнении того-самого куска кода (который я раньше предложил), не будет в находится в очереди в буфере клавиатуры какой-либо символ. (если вы конечно не умудритесь нажать клавишу в нужный момент или не переопределите поток ввода, например из файла). И ещё некоторое замечание: функция 11h прерывания int 16h не очищает буфер от очереди символов. Для очистки буфера клавиатуры можно использовать например функцию 00h прерывания int 16h. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| igSde |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Перед Вашим кодом я ввожу символ ( не расширенные клавиши ) и проверяю в TD содержимое AL.
;-------------------Первый вариант---------------- mov ah, 01h int 21h mov ah, 0bh int 21h AL обнуляется здесь cmp al, 0 jz exit mov ah, 7 int 21h mov s, al ; --------------Второй вариант---------------- mov ah, 01h int 21h mov ah,11h int 16h AL обнуляется здесь cmp al, 0 jz exit mov s, al exit: Cпасибо. |
|||
|
||||
| iff |
|
||||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
1. Пользуйтесь тегом код!!!
2. Когда вы считываете символ функцией 1 прерывания 21, он УДАЛЯЕТСЯ из буфера и более не остается там. Поэтому всё правильно: когда программа пордходит к тому месту, где проходит проверка буфера, то в нем нет символов. 3. Во втором варианте у меня ошибка: строку cmp al, 0 нужно убрать. поличится:
или (другая аналогичная функция этого прерывания):
Добавлено через 1 минуту и 42 секунды Правда при применении этих функций символ в буфере так и останется. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
||||
|
|||||
| igSde |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Разобрался сам, еще раз спасибо!
Это сообщение отредактировал(а) igSde - 25.5.2010, 11:35 |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
Чего разобрался сам, всё же объяснено выше)))))))))))
-------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| igSde |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Я было написал еще одно сообщение (с кодом, который работал не на все 100%),
да что-то его не вижу в форуме. А следующее, когда разобрался с ошибкой, в наличии. Отсюда и "разобрался сам" ... А как прочитать расширенный код? |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
Имееш ввиду скан-код?
-------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| igSde |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Спасибо.
|
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |