Таблица ASCII, объясните пожалуйста код, если можно то по строчкам - Assembler

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

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

.model tiny
.code
org 100h
start: mov ax, 0003h
int 10h
mov dx, 0
mov si, 256
mov al,0
mov ah, 9
mov cx, 1
mov bl,01110001b
cloop:int 10h
push ax
mov ah,2
inc dl
int 10h
pop ax
inc al
test al,0fn
jnzcontine_loop
push ax
mov ah,2
inc dh
mov dl,0
int 10h
pop ax
contine_loop: decsi
jnzcloop
ret
mov ah,4ch
int 21h
end start

Решение задачи: «Таблица ASCII, объясните пожалуйста код, если можно то по строчкам»

textual
Листинг программы
        .model  tiny
        .code
        org 100h    ; Начало COM-файла
start:
;        mov ax,0003h
;        int 10h ; Видеорежим 3 (очистка экрана и установка курсора в 0,0)
        mov dl,0    ; DH и DL будут использоваться для хранения положения
        mov dh,0
                push    ax  ; Сохранить текущий символ и номер функции
        mov ah,2    ; Номер видеофункции 2 - изменить положение курсора     
        int 10h ;
                ; курсора. Начальное положение - 0,0
        mov si,256   ; SI будет счетчиком цикла
        mov al,0   ; Первый символ - с кодом 0
        mov ah,9    ; Номер видеофункции "вывод символа с атрибутом"
        mov cx,1    ; Выводится один символ за раз
        mov bl,00011111b    ; атрибут символа - белый на синем
cloop:
        int 10h ; Вывести символ на экран
 
        push    ax  ; Сохранить текущий символ и номер функции
        mov ah,2    ; Номер видеофункции 2 - изменить положение курсора
        inc dl  ; Увеличить текущий столбец на 1
        int 10h ; Переместить курсор
        mov ax,0920h ; AH = 09, AL = 20h (ASCII-код пробела)
        int 10h ; Вывести пробел
        mov ah,2    ; Номер видеофункции 2
        inc dl  ; Увеличить столбец на 1
        int 10h ; Переместить курсор
        pop ax  ; Восстановить номер функции в ah и текущий символ в al
    
        inc al  ; Увеличить AL на 1 - следующий символ
        test    al,0Fh  ; Если AL не кратен 16,
        jnz continue_loop ; продолжить цикл,
 
        push    ax  ; иначе сохранить номер функции и текущий символ
        mov ah,2    ; Номер видеофункции 2
        inc dh  ; Увеличить номер строки на 1
        mov dl,0    ; Столбец = 0
        int 10h ; Установить курсор на начало следующей строки
        pop ax  ; Восстановить номер видеофункции и текущий символ
 
continue_loop:
        dec si  ; Уменьшить SI на 1, если он не стал нулем - продолжить
        jnz cloop   ; CX используется внутри цикла, так что нельзя
                ; использовать команду LOOP для его организации
        
;        mov ah,0Ch  ; Очистка буфера клавиатуры
;        mov     al,1
;        int     21h
 
        mov ah,08h  ; Приглашение на ввод символа
        int     21h
 
;        mov ax,0003h
;        int 10h ; Видеорежим 3 (очистка экрана и установка курсора в 0,0)
 
 
        int 20h     ; Завершение COM-файла
        end start

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

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