Программа запускается, но не выполняет никаких действий - Assembler

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

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

есть текст программы набранный с ученика (проверял его правильность неоднократно). Что программа делает я понимаю. после получения com файла ,запускаю его в командной строке, программа запускается предлагает мне нажать клавишу и завершается. до этого была такая же проблема, но после нескольких перенаборов проблема решилась. пользуюсь masm32 запустил на нём уже около 10 программ, а тут застрял. вот текст программы:
cseg segment
assume cs:cseg, ds:cseg, es:cseg, ss:cseg
org 100h
start:
    mov ax,0b800h
    mov es,ax
    mov ah,31
    mov al,1
    mov cx,254
 
next_screen:
    mov di,0
    call face
    inc al
    loop next_screen
    
    mov ah,10h
    int 16h
    
    int 20h
    
face proc
    mov dx,cx
    mov cx,2000
cycle_face:
    mov es:[di],ax
    add di,2
loop cycle_face
    mov cx,dx
    ret 
face endp
 
cseg ends
end start

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

textual
Листинг программы
; masm dos com #
.286
.model tiny
.code
org 100h
start:  mov ax,3; установим 3 текстовый видеорежим 
    int 10h
    les di,x; es=0B800h di=0
    mov ax,2F01h;ah=31  al=1
    mov dx,25; число столбцов в режиме 3 (80х25)
next_screen:call face;выводим строку символов
    inc ax; следующий символ
    dec dx; последняя строка экрана?
    jnz next_screen
    mov ah,0;ждем нажатия на клавиатуру
    int 16h    
    ret; выход из программы    
face proc
    mov cx,80; число строк в режиме 3 (80х25)
    rep stosw   ;mov es:[di],ax add di,2
    ret 
face endp
x dd 0b8000000h
end start

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

  1. Установка текстового видеорежима 3: mov ax,3 int 10h
  2. Установка начального адреса видеопамяти: les di,x mov ax,2F01h mov dx,25
  3. Вывод строки символов на экран: call face
  4. Увеличение индекса строки на 1: inc ax
  5. Уменьшение количества столбцов на 1: dec dx
  6. Проверка на условие: jnz next_screen
  7. Ожидание нажатия на клавиатуру: mov ah,0 int 16h
  8. Выход из программы: ret
  9. Определение процедуры вывода строки символов: face proc
  10. Указание числа строк в режиме 3: mov cx,80
  11. Вывод строки символов в видеопамять: rep stosw
  12. Возврат из процедуры вывода строки символов: ret
  13. Объявление переменной x: x dd 0b8000000h
  14. Конец программы: end start

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


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

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

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