[emu8086] Перемешивание цветных прямоугольников на экране - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Я в ассемблере плохо разбираюсь, поэтому прошу вас о помощи. По заданию нужно условно разделить весь экран на прямоугольники размером 10х5 символов; при нажатии кнопки Enter содержимое прямоугольников экрана должно перемешиваться случайным образом между собой до нажатия любой клавиши. С моим уровнем владения ассемблера смог нарисовать 4 прямоугольника10х5, разного цвета. пробовал менять цвет прямоугольников, но ничего не получается. Помогите с заданием пожалуйста, за ранее спасибо всем. вот мой код:
.model small
.code
start: mov ax,3
int 10h
mov ax,0B800h
mov es,ax
mov di,0
mov ax,0FDBh
 
call strip
mov di,20
mov ah,0Ch
call strip
mov ah,9
mov di,80*10+0
call strip
mov ah,10
mov di,40*20+20
call strip
 
mov ah,0
int 16h
mov ah,4Ch
int 21h
 
strip proc
mov cx,5
a1: push cx
mov cx,10 
rep stosw
 
add di,140
pop cx
loop a1
retn
strip endp
 
end start

Решение задачи: «[emu8086] Перемешивание цветных прямоугольников на экране»

textual
Листинг программы
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;инициализация
        ;-ГПСЧ
        call    Randomize
        ;-экрана
        call    FillScreen
 
        jmp     @@WaitKey
        @@Process:
                ;перемешивание прямоугольников
                mov     ax,     40
                call    Random
                mov     si,     ax
                mov     ax,     40
                call    Random
                mov     di,     ax
                ;ожидание нажатия ENTER
        @@WaitKey:
 
                mov     ah,     00h
                int     16h
                cmp     al,     kbEnter
                jnz     @@Break
 
                call    Exchange
                ;-проверка нажатия любой клавиши
                mov     ah,     01h
                int     16h
        jz      @@Process
@@Break:
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp

Объяснение кода листинга программы

  1. Переменные:
    • ax (аксиальный регистр) используется для хранения данных и команд в коде.
    • ds (сегментный регистр) используется для указания сегмента данных.
    • si (индексный регистр) используется для хранения индекса одного из перемешиваемых прямоугольников.
    • di (индексный регистр) используется для хранения индекса второго прямоугольника.
    • al (аксиальный регистр) используется для хранения нажатой клавиши.
  2. Процедуры:
    • @@Process (подпроцедура) используется для перемешивания прямоугольников на экране.
    • @@WaitKey (подпроцедура) используется для ожидания нажатия клавиши ENTER.
    • Exchange (подпроцедура) используется для обмена значениями двух переменных.
  3. Команды:
    • mov (команда пересылки данных) используется для перемещения данных между регистрами.
    • call (команда вызова подпрограммы) используется для вызова подпроцедур.
    • int (команда ввода/вывода) используется для ввода/вывода данных с клавиатуры.
    • jmp (команда перехода) используется для перехода к другой части кода.
    • jnz (команда перехода, если условие не равно нулю) используется для проверки нажатия клавиши.
    • cmp (команда сравнения) используется для сравнения двух значений.
    • and (команда логического И) используется для логического И двух значений.
    • not (команда логического отрицания) используется для получения противоположного значения.
    • or (команда логического ИЛИ) используется для логического ИЛИ двух значений.
    • sar (команда сдвига вправо с заполнение) используется для сдвига числа вправо.
    • rol (команда сдвига влево с заполнение) используется для сдвига числа влево.
    • xor (команда побитового исключающего ИЛИ) используется для побитового исключающего ИЛИ двух значений.
  4. Используемые значения:
    • 40 (значение, используемое для инициализации переменных si и di)
    • 00h (значение, используемое для вывода сообщения)
    • kbEnter (константа, обозначающая нажатие клавиши ENTER)
    • 4C00h (значение, используемое для завершения программы)

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы