Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Линейная программа 
:(
    Опции темы
R'Dock
Дата 23.9.2004, 17:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Студент, начинающий учить Ассемблер. Не могу составить программу, которая выдаёт код нажатой клавиши.
  Вверх
Akina
Дата 23.9.2004, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



xor ah,ah
int 16h

В результате в AH - скан-код, в AL - ASCII-код. Если AH=0, то в AL - расширенный скан-код.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Guest
Дата 24.9.2004, 16:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А вот этот код на Фасме выводит на экран содержимое bl.
Код
org 100h
start:

mov bl,0A3h; 2

mov al,bl
shr al,4
call adding

mov byte[txt+0],al
mov al,bl
and al,00001111b
call adding
mov byte[txt+1],al

mov ah,09h; 2
mov dx,txt; 3
mov byte[txt+2],'$'; 5
int 21h; 2
int 20h; 2

adding:
cmp al,0Ah
jb decD
add al,37h
jmp exit
decD:
add al,30h
exit:
ret

txt:

  Вверх
Akina
Дата 24.9.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Код
; This 3 procedures types the content of AX (SAY_16), AL (SAY_8)
; or lower 4-bit part of AL (SAY_B) on screen in HEX digits.


SAY_16         PROC    NEAR
               PUSH    AX
               PUSH    CX
               PUSH    DX
               XOR     DX,DX
               XCHG    AH,DL
               PUSH    AX
               MOV     AX,DX
               CALL    SAY_8
               POP     AX
               CALL    SAY_8
               POP     DX
               POP     CX
               POP     AX
               RETN
SAY_16         ENDP

SAY_8          PROC    NEAR
               PUSH    AX
               PUSH    CX
               PUSH    DX
               XOR     AH,AH
               MOV     CL,4
               SHL     AX,CL
               SHR     AL,CL
               XOR     DX,DX
               XCHG    AH,DL
               PUSH    AX
               CALL    SAY_B
               POP DX
               CALL    SAY_B
               POP     DX
               POP     CX
               POP     AX
               RETN
SAY_8          ENDP

SAY_B          PROC    NEAR
               MOV     AH,2
               ADD     DL,30H
               CMP     DL,3AH
               JB      SAY_B_
               ADD     DL,7
SAY_B_:        INT     21H
               RETN
SAY_B          ENDP



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Гость_R'Dock
Дата 25.9.2004, 04:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я вроде разобрался в программе. Вот в таком виде:
#make_COM#

ORG 100h
start:
mov ah,09h ;ф-ция вывода строки
mov dx,offset msg ;адрес строки
int 21h ;прерывание

mov ah,01h ;ф-ция ожидания ввода символа
int 21h ;прерывание

mov bl,al ;скопируем содержимое al в bl, т.к. нек. ф-ции изменяют al

mov ah,09h ;ф-ция вывода строки
mov dx,offset msg_2 ;адрес строки
int 21h ;прерывание

mov cl,0 ;это будет счетчик
conv:
mov dl,1 ;это будет выводимый символ(один бит из кода)
shl bl,1 ;смещение содержимого bl влево на один бит, старший бит помещается в cf
jc zer ;условный переход, если cf=1
mov dl,0
zer:
add dl,30h ;доводим цыфру до аски кода
mov ah,02h ;ф-ция вывода символа из dl
int 21h ;прерывание
inc cl ;увеличиваем счетчик
cmp cl,8 ;проверка счетчика
jnz conv ;если ещё не выведено 8 символов, то работаем дальше

ret

msg db "Press any key: ",13,10,"$"
msg_2 db " : $"
end start

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1013 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.