Не могу выйти с бесконечного цикла - Assembler

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

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

Есть код, пробую запустить в emu8086, но не могу выйти с бесконечного цикла суть задания - Поиск и замена символа "9" на "5" в диапазоне 120..16F
MOV DI,0120 ; DI<- 120
MOV AL,35   ; AL<- 35
MOV AH,39   ; AH<- 39
MOV CX,0050 ; CX<- 50

CMP [DI],AH ;
JNZ 0110    ; 
MOV [DI],AL ; 
INC DI      ; 
LOOP 010A   [/CODE]
 
INT 20      ; завершение

Решение задачи: «Не могу выйти с бесконечного цикла»

textual
Листинг программы
    MOV DI,0120h ; DI<- 120
    MOV AL,35h   ; AL<- 35
    MOV AH,39h   ; AH<- 39
    MOV CX,0050h ; CX<- 50
 
@@For:
    CMP [DI],AH ;
    JNZ @@Skip    ;
    MOV [DI],AL ;
@@Skip:
    INC DI      ;
    LOOP @@For   ;
 
    INT 20h      ; завершение

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

  1. MOV DI,0120h — вначале код переносит значение 120 в регистр DI.
  2. MOV AL,35h — затем код переносит значение 35 в регистр AL.
  3. MOV AH,39h — после этого код переносит значение 39 в регистр AH.
  4. MOV CX,0050h — и, наконец, код переносит значение 50 в регистр CX.
  5. @@For: — затем код переходит к блоку @@For.
  6. CMP [DI],AH — внутри блока @@For код сравнивает значение в регистре AH с значением по адресу, который хранится в регистре DI.
  7. JNZ @@Skip — если значение в регистре AH не равно значению по адресу, код переходит к блоку @@Skip.
  8. MOV [DI],AL — в противном случае (когда значение в регистре AH равно значению по адресу), код переносит значение из регистра AL по указанному адресу.
  9. INC DI — после этого код увеличивает значение в регистре DI на единицу.
  10. LOOP @@For — и цикл повторяется до тех пор, пока не будет выполнено условие цикла.
  11. INT 20h — когда условие цикла выполняется, код завершает работу программы с помощью функции INT 20h.

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

13   голосов , оценка 3.692 из 5