Не работает обработчик - Assembler

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

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

При запуске в окне появляется надпись 'hello', и продолжает пока не нажать <CTRL+C>, но проблема в том, что не выключается и циклит дальше, где ошибка?
data segment
old_cs dw 0
old_ip dw 0
schet dw 0
message db 'hello',10,13,'$'
data ends
 
astack segment stack
dw 512 dup(?)
astack ends
 
code segment
assume cs:code, ds:data, ss:astack
 
NEW_INT PROC NEAR
PUSH AX 
push dx
MOV Dl, 07h
MOV Ah, 2h
INT 21h
INC schet
POP dX 
pop ax
IRET
NEW_INT ENDP
 
MAIN PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,data
MOV DS,AX
SUB AX,AX
 
MOV AH, 35h 
MOV AL, 23h 
INT 21h
MOV old_ip, BX 
MOV old_cs, ES 

PUSH DS
MOV DX, OFFSET NEW_INT 
MOV AX, SEG NEW_INT
MOV DS, AX 
MOV AH, 25H 
MOV AL, 23H 
INT 21H 
POP DS
 
cickl_m:
mov dx, offset message
mov ah, 9
int 21h
cmp schet, 05h
jb cickl_m
 
CLI    
PUSH DS 
MOV DX,old_ip 
MOV AX,old_cs 
MOV DS,AX
MOV AH,25h 
MOV AL,23h 
INT 21h 
POP DS 
STI 
ret
MAIN ENDP
start:
call MAIN
mov ax,4C00h
int 21h
CODE ENDS 
END MAIN

Решение задачи: «Не работает обработчик »

textual
Листинг программы
cmp cs:schet, 05h

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

  1. Перед нами стоит команда сравнения cmp, которая сравнивает две переменные.
  2. В качестве первого аргумента команды cmp выступает cs:schet, где cs - сегментный регистр, а schet - переменная в стеке.
  3. Команда cmp сравнивает значение переменной schet со значением 05h (в шестнадцатеричной системе счисления это число 5).
  4. Результат сравнения будет равен 0, если значения равны, и не равен 0 в противном случае.

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


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

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

12   голосов , оценка 3.833 из 5