Přejít na hlavní obsah

Top 10 antivirů, které nezatěžují systém: hodnocení 2025

Programování v assembleru má širokou škálu aplikací a jednou z jeho zajímavých možností je použití přerušení z klávesnice. Přerušení může být užitečné pro vývojáře, kteří chtějí získat informace od uživatele v reálném čase. V tomto článku se podíváme na základy práce s přerušováním klávesnice v jazyce assembleru a uvedeme několik příkladů programů, které prokazují jejich použití.

Přerušení klávesnice je způsob interakce počítače a uživatele, který umožňuje programu získat informace o stisknutých klávesách. Když uživatel stiskne klávesu, počítač odešle příslušný signál zvaný přerušení, který je zachycen operačním systémem. Systém poté předá správu spustitelnému programu, který může zpracovat stisk klávesy nebo provést jakékoli jiné akce.

Pro práci s přerušováním klávesnice se v jazyce assembleru používají speciální příkazy a registry procesoru. Chcete-li například povolit zpracování přerušení klávesnice, musíte do registru s vlajkami nainstalovat příslušné vlajky. Program by pak měl přejít na adresu obslužné rutiny přerušení, která určuje, které akce by měly být provedeny, když stisknete klávesu.

Příklad programu na assembleru:

mov ah, 0x01 ; nastavíme registr ah na hodnotu 0x01

int 0x16; voláme přerušení z klávesnice

cmp al, 0x41; porovnáme hodnotu registru al s 0x41 (kód klávesy a)

jne not_a; pokud hodnoty nejsou stejné, přejděte na značku not_a

; akční kódy při stisknutí klávesy A

; .

not_a:

cmp al, 0x42 ; porovnáme hodnotu registru al s 0x42 (kód klávesy B)

jne not_b; pokud hodnoty nejsou stejné, přejděte na značku not_b

; akční kódy při stisknutí klávesy B

; .

not_b:

; .

V tomto příkladu používáme příkazy mov a int Chcete-li nastavit ah registr a volat přerušení z klávesnice. Poté porovnáme hodnotu registru al (který obsahuje kód stisknuté klávesy) s určitými hodnotami odpovídajícími klávesám A A B.pokud jsou hodnoty stejné, program provede určité akce, jinak přejde na následující pokyny.

Co je přerušení z klávesnice?

Přerušení z klávesnice se provádí pomocí speciálních hardwarových přerušení, ke kterým dochází při stisknutí klávesy nebo změně stavu kláves na klávesnici. Pokud dojde k přerušení, procesor zastaví provádění aktuální instrukce a přejde na rutinu přerušení, která poté zpracovává vstup z klávesnice a může podle nich provádět určité kroky.

Programátor může napsat svou obslužnou rutinu přerušení z klávesnice zadáním funkcí, které by měly být provedeny, když stisknete konkrétní klávesu nebo kombinaci kláves. K tomu se používají speciální pokyny pro assembler, které vám umožňují ovládat hardwarová přerušení a manipulaci s klávesami na nízké úrovni.

Jak funguje přerušení z klávesnice?

Přerušení z klávesnice funguje na následujícím principu:

  • Když uživatel stiskne klávesu na klávesnici, elektrický signál je generován klávesou a přenášen do ovladače klávesnice.
  • Ovladač klávesnice překládá signál do binárního kódu, který představuje stisknutou klávesu.
  • Ovladač klávesnice odesílá binární kód prostřednictvím systémové sběrnice do procesoru.
  • Procesor obdrží kód klávesy a vygeneruje přerušení pro příslušné zpracování dat - zpracování přerušení z klávesnice.
  • Obsluha přerušení z klávesnice provede příslušné kroky na základě získaného kódu klávesy. Například zobrazí symbol na obrazovku nebo uloží zadaná data do paměti.

Programátoři mohou použít přerušení z klávesnice pro různé účely, jako je implementace interaktivních aplikací, zpracování příkazů uživatele nebo zadávání dat.

Příklad programu na assembleru, který používá přerušení z klávesnice:

segment .dataMsg db 'Hello, World!', 0segment .textglobal _start_start:; Ожидание прерывания с клавиатурыcli ; Запретить другие прерыванияmov ah, 0 ; Инициализация прерыванияint 16h ; Прерывание с клавиатурыsti ; Разрешить другие прерывания; Вывод сообщения на экранmov ah, 9mov dx, Msgint 21h; Завершение программыmov ah, 4Chint 21h

V tomto příkladu program očekává stisknutí klávesy na klávesnici a poté zobrazí zprávu " Hello, World!"na obrazovce a dokončuje svou práci.

Příklad programu v jazyce Assembler

Zde je příklad programu v jazyce Assembler, který ukazuje jednoduchou operaci sčítání dvou čísel:

section .datamessage db 'Результат сложения: ', 0section .textglobal _start_start:mov eax, 5 ; помещаем первое число в регистр eaxmov ebx, 10 ; помещаем второе число в регистр ebxadd eax, ebx ; складываем числа и сохраняем результат в eaxmov ecx, message ; помещаем адрес строки в регистр ecxcall print_string ; вызываем функцию для печати строкиmov edx, eax ; помещаем значение eax в регистр edxcall print_int ; вызываем функцию для печати числаcall exit_prog ; вызываем функцию для завершения программыprint_string:; код функции для печати строки; . print_int:; код функции для печати числа; . exit_prog:mov eax, 1 ; код завершения программыxor ebx, ebx ; статус завершенияint 0x80 ; вызов системного вызова для завершения программы

Tento program přijme dvě čísla (5 a 10), složí je a zobrazí výsledek (15) na obrazovku. K provádění operací a ukládání dat se zde používají různé ukazatele a registry, jako je eax, ebx, ecx a edx.