Где нужно исправить - Assembler

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

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

нужно вывести в asciii 32 символа начиная с '1' с начала строчки в одну строчку. я вроде написала, но выводит не сначала строчки
        .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,32   ; SI будет счетчиком цикла
        mov al,49   ; Первый символ - с кодом 49h
        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,1Fh  ; Если 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)

        ret     ; Завершение COM-файла
        end start

Решение задачи: «Где нужно исправить»

textual
Листинг программы
    .model  tiny
    .code
    org 100h            ; Начало COM-файла
start:
    xor ax, ax
    mov es, ax
    mov cx, ax
    mov dh, es:[484h]       ; rows on screen
    mov dl, es:[44Ah]       ; cols -//-
    mov ah,6
    mov bx, 1F00h
    int 10h
    mov dx, cx
    xchg    bh,bl
    mov ah,2
    int 10h
    mov cx, 32
    mov si,0E31h
    mov dx,0E20h
@@: mov ax, si
    inc si
    int 10h
    mov ax, dx
    int 10h
    loop    @@
    xor ax,ax
    int 16h
    ret             ; Завершение COM-файла
    end start

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


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

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

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