Установить курсор в определенное по заданым координатам - Assembler

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

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

run macro i,j
MOV AH,02h 
 
MOV DH, i 
MOV DL, j 
 
INT 10h  
ENDM
 
ORG 100h
 
run 15,15
MOV AH,0Eh
Mov al,'t'
int 10h
 
RET
Вопрос: Правильно что мы заносим в регистры dh и dl ? Искал, пишет что строчка и столпец, но на практике не могу понять, т.к. при 15,15 в теории символ должно вывести в вершину воображаемого квадрата, но на самом деле все не так.

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

textual
Листинг программы
; welcome.asm
;
; tasm /ml /m2 welcome
; tlink welcome
;
 
IDEAL
MODEL   small
STACK   256
 
DATASEG     ; Сегмент данных.
exCode  db 0
welcome db 'Di3 Bitch...',10,13,'$'
 
CODESEG     ; Сегмент кода.
 
;* Подпрограмма, устанавливает координаты курсора.
proc    ScGotoXY
push    ax
mov ah, 15
int 10h
mov ah, 2
int 10h
pop ax
ret
endp    ScGotoXY
 
;*** _Точка входа. ***
Start:
mov ax, @data   
mov ds, ax
 
mov dh, 10      ; Y
mov dl, 30      ; X
call    ScGotoXY
 
mov dx, offset welcome
mov ah, 9
int 21h
 
;* Ожидание нажатие любой клавиши...
mov ax, 0
int 16h
 
mov ah, 04Ch
mov al, [exCode]
int 21h
 
END Start

Объяснение кода листинга программы

  1. Кодирование на языке Assembler: Скрипт написан на языке Assembler.
  2. Установка координат курсора: Процедура ScGotoXY устанавливает координаты курсора. Код выполняет следующие действия:
    • push ax: В стеке хранится текущее значение регистра ax.
    • mov ah, 15: Регулярное выражение 15h перенаправляет вызов функции BIOS в графический режим.
    • int 10h: Вызов функции BIOS для установки курсора.
    • mov ah, 2: Регулярное выражение 2 перенаправляет вызов функции BIOS в графический режим.
    • int 10h: Вызов функции BIOS для установки курсора.
    • pop ax: Из стека извлекается сохраненное значение регистра ax.
    • ret: Код возвращает управление в вызывающую программу.
  3. Точка входа: Процедура Start является точкой входа в скрипт. Код выполняет следующие действия:
    • mov ax, @data: Регистр ax получает сегмент данных.
    • mov ds, ax: Сегмент данных копируется в регистр ds.
    • mov dh, 10: Регистр dh получает значение 10, что устанавливает Y-координату курсора.
    • mov dl, 30: Регистр dl получает значение 30, что устанавливает X-координату курсора.
    • call ScGotoXY: Вызывается процедура ScGotoXY для установки координат курсора.
    • mov dx, offset welcome: Регистр dx получает смещение строки Di3 Bitch....
    • mov ah, 9: Регулярное выражение 9 перенаправляет вызов функции BIOS в графический режим.
    • int 21h: Вызов функции BIOS для вывода строки на экран.
    • mov ah, 04Ch: Регулярное выражение 04Ch перенаправляет вызов функции BIOS для чтения с клавиатуры.
    • mov al, [exCode]: В регистр al записывается значение переменной exCode.
    • int 21h: Вызов функции BIOS для чтения с клавиатуры.
  4. Ожидание нажатия любой клавиши: Процедура ожидает, пока пользователь не нажмет любую клавишу. Код выполняет следующие действия:
    • mov ax, 0: Регистр ax получает значение 0.
    • int 16h: Вызов функции BIOS для ожидания нажатия клавиши.
  5. Вывод сообщения: После ожидания нажатия клавиши выводится сообщение Di3 Bitch....

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

14   голосов , оценка 3.714 из 5
Похожие ответы