Вывод строки используя прямой доступ к видеопамяти - Assembler
Формулировка задачи:
CSEG segment
org 100h
begin:
mov ax,dx
mov es,ax
mov al, 02h
mov ah, 00h
int 10h
mov bp,offset string
mov ax,1301h
mov bx,1
mov cx,len
mov dh,5;
mov dl,5;
int 10h
mov ax, 0B800h
mov es,ax
mov di,0h
mov cx,len
mov si, 0
mov ah,01
ccc:
mov al, [string]
mov es:[di],ax
add di,2
inc si
loop ccc
mov ax,4C00h
int 21h
string db 'Text'
len=$-string
CSEG ends
end beginРешение задачи: «Вывод строки используя прямой доступ к видеопамяти»
textual
Листинг программы
CSEG segment assume cs:CSEG, ds:CSEG ; <------- org 100h begin: mov ax,dx mov es,ax mov al, 02h mov ah, 00h int 10h mov bp,offset string mov ax,1301h mov bx,1 mov cx,len mov dh,5; mov dl,5; int 10h mov ax, 0B800h mov es,ax mov di,0h mov cx,len mov si, 0 mov ah,01 ccc: mov al, string[si] ; <----- mov es:[di],ax add di,2 inc si loop ccc int 20h ; <--- для *.com программ string db 'Text' len=$-string CSEG ends end begin
Объяснение кода листинга программы
Вывод строки Text с использованием прямого доступа к видеопамяти:
- Переменная
axиспользуется для хранения значения сегмента и индекса регистраdx. - Переменная
esполучает значение сегментаax. - Переменная
alполучает значение 02h. - Переменная
ahполучает значение 00h. - Выполняется команда
int 10h, которая выводит символ на экран. - Переменная
bpиспользуется для хранения смещения строкиText. - Переменная
axполучает значение 1301h. - Переменная
bxполучает значение 1. - Переменная
cxполучает значениеlen. - Переменные
dhиdlполучают значение 5. - Выполняется команда
int 10h, которая выводит символ на экран. - Переменная
axполучает значение 0B800h. - Переменная
esполучает значениеax. - Переменная
diполучает значение 0. - Переменная
cxполучает значениеlen. - Переменная
siполучает значение 0. - Переменная
ahполучает значение 01. - Начинается цикл
ccc. - В каждой итерации цикла значение переменной
alполучается из строкиTextпо индексуsi. - Значение
alзаписывается в видеопамять по адресуdi. - Значение
diувеличивается на 2. - Значение
siувеличивается на 1. - Цикл продолжается до тех пор, пока
siменьшеlen. - Выполняется команда
int 20h, которая используется для завершения работы программы для *.com файлов. - Строка
Textхранится в переменнойstring. - Длина строки
Textхранится в переменнойlen.