Вложенная петля в сборке 8086 ( - PullRequest
0 голосов
/ 23 октября 2018

;(У меня проблема с печатью этой серии 122222223222) Можете ли вы посмотреть код и указать мою ошибку?

.model small 
.stack 100h 
.code 
start:
mov cx,3

l1:

mov ah, 02
mov dl, 49
int 21h 
inc dl

mov bx,cx
mov cx, 3

l2:

mov ah, 02
mov dl,50
int 21h 

loop l2

mov cx,bx
inc dl
loop l1

mov ah, 4ch
int 21h 

end start

1 Ответ

0 голосов
/ 04 ноября 2018

Ваша программа почти в порядке.В настоящее время выводом является «122212221222».

Этот символ «1», который повторяется, происходит из-за того, что вы повторно используете непосредственное значение 49 в цикле, в котором вы должны были хранитьэто число за пределами цикла!
Я предлагаю вам сохранить его в регистре DH, извлечь его оттуда и увеличивать DH на каждой итерации:

    mov  dh, "1"   ; ASCII=49
    mov  cx, 3
outerLoop:
    mov  ah, 02h
    mov  dl, dh    ; Successively "1", "2", "3"
    inc  dh
    int  21h

    mov  bx, 3
innerLoop:
    mov  ah, 02h
    mov  dl, "2"   ; ASCII=50
    int  21h 
    dec  bx
    jnz  innerLoop

    dec  cx
    jnz  outerLoop

Пожалуйстаобратите внимание, что вместо использования BX для сохранения счетчика внешнего цикла вы можете так же легко использовать BX в качестве счетчика для внутреннего цикла.

Для удобства чтения вы можете:

  • использовать больше описательных меток
  • вставлять пустые строки, чтобы выделить внутренний цикл
  • писать функциональные комментарии
...