Вывод красной горизонтальной линии с использование адресации - Assembler
Формулировка задачи:
Нужно вывести красную горизонтальную линию из 30 знаков. Есть такой набросок кода (Assembler 8086), пока он только выводит один символ стандартного цвета. Была попытка использовать цикл, но он очевидно не работает. Буду рада любым подсказкам.
org 100h mov ax, 0B800h mov es, ax mov ax, [y] mov bx, 80 mul bx mov bp, ax add ax: [x] shl ax, 1 mov cx, 30 petla: mov byte [es:bp], 219 loop petla mov ax, 4c00h int 21h x: dw 40 y: dw 40
Решение задачи: «Вывод красной горизонтальной линии с использование адресации»
textual
Листинг программы
org 100h mov ax,3 int 10h mov ax,0xb800 mov es,ax mov al,160 mul [y] mov di,ax add di,[x] add di,[x] mov ax,0xc020 mov cx,30 rep stosw xor ah,ah int 16h ret x dw 40 y db 10
Объяснение кода листинга программы
- org 100h — Начало выполнения программы. Установка сегмента данных в 100h.
- mov ax,3 — Переменная
ax
содержит 3. - int 10h — Вывод числа 3 на экран.
- mov ax,0xb800 — Переменная
ax
содержит базовый адрес видеопамяти (0xb800). - mov es,ax — Установка сегмента стека в базовый адрес видеопамяти.
- mov al,160 — Переменная
al
содержит 160. - mul [y] — Умножение
al
на значение переменнойy
. Результат сохраняется вax
. - mov di,ax — Переменная
di
содержит результат умножения. - add di,[x] — Добавление значения
di
к значению по адресу[x]
. - add di,[x] — Добавление значения
di
к значению по адресу[x]
. - mov ax,0xc020 — Переменная
ax
содержит 0xc020. - mov cx,30 — Переменная
cx
содержит 30. - rep stosw — Выполнение операции
stosw
30 раз, начиная с адреса 0xc020. - xor ah,ah — Переменная
ah
устанавливается в 0. - int 16h — Выполнение команды interrupt 16h.
- ret — Конец выполнения программы.
- x dw 40 — Объявление переменной
x
типаdw
(слова) со значением 40. - y db 10 — Объявление переменной
y
типаdb
(байты) со значением 10.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д