Главная страница
Навигация по странице:

  • 38. Многозадачный режим с управлением от клавиатуры.

  • готовая печатка. 1. Техника безопасности 5 Изучение требования безопасности на рабочем месте 7


    Скачать 1.09 Mb.
    Название1. Техника безопасности 5 Изучение требования безопасности на рабочем месте 7
    Анкорготовая печатка
    Дата31.01.2023
    Размер1.09 Mb.
    Формат файлаdocx
    Имя файлаGotovaya_pechatka.docx
    ТипРеферат
    #914139
    страница21 из 22
    1   ...   14   15   16   17   18   19   20   21   22

    37. Форматирование вывода и команды передачи управления.



    Команды ввода-вывода

    Микропроцессор может передавать данные в порты ввода-вывода, которые поддерживаются аппаратно и используют соответствующие своим предназначениям линии ввода-вывода процессора. Аппаратное адресное пространство ввода-вывода процессора не является физическим адресным пространством памяти (таблица 1).
    Таблица 1 Команды ввода вывода

    При описании формата команд передачи управления на языке ассемблера будут использоваться следующие условные обозначения:

    -op – мнемоника инструкции (например «b», «bl»);

    -{} – фигурные скобки; указывают, что содержащееся в них выражение не является обязательным и может быть опущено;

    -{cond} – необязательный предикативный суффикс для реализации условного выполнения команды перехода (подробнее см. п. 2);

    -label – метка в тексте программы;

    -Rm – регистр, содержащий адрес, по которому будет сделан переход.

    5.2Форматы записи команд передачи управления


    Выполнение большинства команд, например таких, как в листинге 3, происходит последовательно (сверху вниз по тексту). Выполнив одну команду процессор переходит на следующую. Однако на практике часто встречаются ситуации, когда требуется прервать такое последовательное выполнение и сразу перейти по некоторому известному адресу в памяти. Команды, которые позволяют осуществить такой переход, называются командами перехода или командами передачи управления. Различные виды команд передачи управления представлены в табл. 6.

    Для большинства команд передачи управления допускается использование предикативных суффиксов (т. е. с выполнением при соблюдении определённого условия), что позволяет реализовать условные переходы (таблица 2).
    Таблица 2 - Виды команд передачи управления


    Вид команды

     

    Мнемоники

    Формат

     

     

     

     

    Переход на метку

     

    b

    op{cond} label

    Переход по адресу в регистре

     

    bx

    op{cond} Rm

    Вызов подпрограммы

     

    bl

    op{cond} label

    Вызов подпрограммы по адресу

    в

    blx

    op{cond} Rm

    регистре

     

     

     

    Вызов подпрограммы со сменой набора

    blx

    op label



    38. Многозадачный режим с управлением от клавиатуры.



    В многозадачной системе должна быть предусмотрена возможность переключения с задачи на задачу по каким-либо событиям, например, истечению заданного кванта времени или командам с клавиатуры. Чтобы реализовать режим многозадачности с управлением с клавиатуры на языке ассемблера, вам нужно будет использовать эти механизмы для создания задач или потоков и для обработки ввода с клавиатуры. Ниже приведен пример программы на языке ассемблера x86 (с использованием синтаксиса NASM), которая реализует режим многозадачности с помощью управления с помощью прерываний и обработки исключений:

    section .data

    task1 db "Task 1 running", 10

    task1_len equ $ - task1

    task2 db "Task 2 running", 10

    task2_len equ $ - task2

    key_a db "Key 'a' pressed", 10

    key_a_len equ $ - key_a

    key_b db "Key 'b' pressed", 10

    key_b_len equ $ - key_b
    section .text

    global _start
    _start:

    ; Initialize the multitasking system

    mov eax, 0x5A5A5A5A

    mov [multitasking_initialized], eax
    multitasking:

    ; Check if the 'a' key is pressed

    mov al, [0x60]

    cmp al, 0x1E

    je key_a_pressed
    ; Check if the 'b' key is pressed

    mov al, [0x60]

    cmp al, 0x30

    je key_b_pressed
    ; Run task 1

    mov eax, 4 ; System call number for write

    mov ebx, 1 ; File descriptor (1 = stdout)

    mov ecx, task1 ; Address of the task1 string

    mov edx, task1_len ; Length of the string

    int 0x80 ; Invoke the kernel
    ; Run task 2

    mov eax, 4 ; System call number for write

    mov ebx, 1 ; File descriptor (1 = stdout)

    mov ecx, task2 ; Address of the task2 string

    mov edx, task2_len ; Length of the string

    int 0x80 ; Invoke the kernel
    jmp multitasking
    key_a_pressed:

    ; Handle key 'a' press

    mov eax, 4 ; System call number for write

    mov ebx, 1 ; File descriptor (1 = stdout)

    mov ecx, key_a ; Address of the key_a string

    mov edx, key_a

    1   ...   14   15   16   17   18   19   20   21   22


    написать администратору сайта