Не могу выйти с бесконечного цикла - 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 ; завершение
Объяснение кода листинга программы
- MOV DI,0120h — вначале код переносит значение 120 в регистр DI.
- MOV AL,35h — затем код переносит значение 35 в регистр AL.
- MOV AH,39h — после этого код переносит значение 39 в регистр AH.
- MOV CX,0050h — и, наконец, код переносит значение 50 в регистр CX.
- @@For: — затем код переходит к блоку @@For.
- CMP [DI],AH — внутри блока @@For код сравнивает значение в регистре AH с значением по адресу, который хранится в регистре DI.
- JNZ @@Skip — если значение в регистре AH не равно значению по адресу, код переходит к блоку @@Skip.
- MOV [DI],AL — в противном случае (когда значение в регистре AH равно значению по адресу), код переносит значение из регистра AL по указанному адресу.
- INC DI — после этого код увеличивает значение в регистре DI на единицу.
- LOOP @@For — и цикл повторяется до тех пор, пока не будет выполнено условие цикла.
- INT 20h — когда условие цикла выполняется, код завершает работу программы с помощью функции INT 20h.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д