Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 2 / осн.Тех защ Ассемблер

.docx
Скачиваний:
0
Добавлен:
09.02.2024
Размер:
284.66 Кб
Скачать

Для интерпретации и запуска программы использовали dosbox.

  1. mount d: c:\asm – создаём виртуальный диск, где корень –папка asm

  2. d: - открываем созданный диск

  3. tasm code.asm – компилируем исходный код

  4. tlink code.obj – создаём исполняемый файл

  5. td code – запускаем debug

  6. F7 – делаем шаг в программе

Ключевые элементы:

1. db: это директива (оператор), используемая для определения байтовых данных (data byte). Например, binaryArray db 6 dup (?) выделяет массив из 6 байтов, каждый из которых инициализируется вопросительным знаком, обозначающим, что эти данные будут введены пользователем.

2. dup: это ключевое слово, используемое вместе с db, чтобы указать количество повторений. В данном случае, 6 dup (?) означает, что мы хотим создать массив из 6 байтов, каждый из которых инициализирован вопросительным знаком.

3. data segment и data ends: эти директивы определяют сегмент данных, где мы объявляем переменные и массивы данных.

4. mov: это инструкция, которая перемещает (копирует) данные из одного места в другое. Например, mov ax, data копирует адрес сегмента данных в регистр AX.

5. int 21h: это прерывание (interrupt), которое вызывает обработчик прерывания 21h (в DOS), предоставляющий доступ к различным службам, таким как ввод и вывод.

6. loop: это инструкция, которая выполняет цикл, уменьшая счетчик CX и переходя к метке, если счетчик не равен нулю.

7. code segment, code ends, assume cs:code: определяют сегмент кода и указывают, что сегмент кода находится в регистре CS.

8. ah, al, dx, cx, si, di: Регистры общего назначения.

9. 4Ch и int 21h: это прерывание DOS для завершения программы.

Листинг программы:

data segment

binaryArray db 6 dup (?) ; Объявляем массив из 6 байтов для ввода двоичных чисел

positiveArray db 6 dup (0) ; Массив для положительных чисел

negativeArray db 6 dup (0) ; Массив для отрицательных чисел

data ends

code segment

assume cs:code, ds:data

start:

mov ax, data

mov ds, ax

; Ввод массива из 6 двоичных чисел

mov cx, 6

mov si, 0

inputLoop:

mov ah, 1 ; Функция 1 для ввода символа

int 21h

mov [binaryArray + si], al ; Сохраняем введенный символ в массив

inc si

loop inputLoop

; Сортировка массива на два подмассива

mov cx, 6

mov si, 0

mov di, 0

sortLoop:

mov al, [binaryArray + si]

cmp al, '0'

je positiveNumber

mov [negativeArray + di], al

inc di

jmp nextIteration

positiveNumber:

mov [positiveArray + si], al

nextIteration:

inc si

loop sortLoop

; Вывод положительных чисел

mov cx, 6

mov si, 0

outputPositiveLoop:

mov dl, [positiveArray + si]

mov ah, 2 ; Функция 2 для вывода символа

int 21h

inc si

loop outputPositiveLoop

; Вывод отрицательных чисел

mov cx, 6

mov si, 0

outputNegativeLoop:

mov dl, [negativeArray + si]

mov ah, 2 ; Функция 2 для вывода символа

int 21h

inc si

loop outputNegativeLoop

exit:

mov ah, 4ch

int 21h

code ends

end start

Соседние файлы в папке Лаба 2