Вывод красной горизонтальной линии с использование адресации - 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 — Выполнение операции
stosw30 раз, начиная с адреса 0xc020. - xor ah,ah — Переменная
ahустанавливается в 0. - int 16h — Выполнение команды interrupt 16h.
- ret — Конец выполнения программы.
- x dw 40 — Объявление переменной
xтипаdw(слова) со значением 40. - y db 10 — Объявление переменной
yтипаdb(байты) со значением 10.