Вывод строки используя прямой доступ к видеопамяти - Assembler

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

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

Листинг программы
  1. CSEG segment
  2. org 100h
  3. begin:
  4. mov ax,dx
  5. mov es,ax
  6. mov al, 02h
  7. mov ah, 00h
  8. int 10h
  9. mov bp,offset string
  10. mov ax,1301h
  11. mov bx,1
  12. mov cx,len
  13. mov dh,5;
  14. mov dl,5;
  15. int 10h
  16.  
  17. mov ax, 0B800h
  18. mov es,ax
  19. mov di,0h
  20. mov cx,len
  21. mov si, 0
  22. mov ah,01
  23. ccc:
  24. mov al, [string]
  25. mov es:[di],ax
  26. add di,2
  27. inc si
  28. loop ccc
  29. mov ax,4C00h
  30. int 21h
  31. string db 'Text'
  32. len=$-string
  33.  
  34. CSEG ends
  35. end begin
Что не так?

Решение задачи: «Вывод строки используя прямой доступ к видеопамяти»

textual
Листинг программы
  1. CSEG segment
  2. assume cs:CSEG, ds:CSEG   ; <-------
  3. org 100h
  4. begin:
  5.     mov ax,dx
  6.     mov es,ax
  7.  mov al, 02h
  8.  mov ah, 00h
  9.  int 10h
  10.  
  11.  mov bp,offset string
  12.  mov ax,1301h
  13.  mov bx,1
  14.  mov cx,len
  15. mov dh,5;
  16. mov dl,5;
  17.  int 10h
  18.  
  19.   mov  ax, 0B800h
  20.   mov es,ax
  21.   mov di,0h
  22.   mov cx,len
  23.   mov si, 0
  24.   mov  ah,01
  25.  ccc:
  26.   mov al, string[si]     ; <-----
  27.     mov  es:[di],ax
  28.     add di,2
  29.     inc si
  30.    loop ccc
  31.  
  32.  int 20h   ; <--- для *.com программ
  33.  
  34.  string  db 'Text'
  35. len=$-string
  36.  
  37. CSEG ends
  38. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут