Вывод строки используя прямой доступ к видеопамяти - 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 с использованием прямого доступа к видеопамяти:

  1. Переменная ax используется для хранения значения сегмента и индекса регистра dx.
  2. Переменная es получает значение сегмента ax.
  3. Переменная al получает значение 02h.
  4. Переменная ah получает значение 00h.
  5. Выполняется команда int 10h, которая выводит символ на экран.
  6. Переменная bp используется для хранения смещения строки Text.
  7. Переменная ax получает значение 1301h.
  8. Переменная bx получает значение 1.
  9. Переменная cx получает значение len.
  10. Переменные dh и dl получают значение 5.
  11. Выполняется команда int 10h, которая выводит символ на экран.
  12. Переменная ax получает значение 0B800h.
  13. Переменная es получает значение ax.
  14. Переменная di получает значение 0.
  15. Переменная cx получает значение len.
  16. Переменная si получает значение 0.
  17. Переменная ah получает значение 01.
  18. Начинается цикл ccc.
  19. В каждой итерации цикла значение переменной al получается из строки Text по индексу si.
  20. Значение al записывается в видеопамять по адресу di.
  21. Значение di увеличивается на 2.
  22. Значение si увеличивается на 1.
  23. Цикл продолжается до тех пор, пока si меньше len.
  24. Выполняется команда int 20h, которая используется для завершения работы программы для *.com файлов.
  25. Строка Text хранится в переменной string.
  26. Длина строки Text хранится в переменной len.

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

12   голосов , оценка 4 из 5