Другие языки программирования и технологии

Как на TASM Assembler вывести число 12345 с помощью цикла ?

Я сделал так.
А нужно коротко, с помощью цикла

.modeltiny
.code
org100h
start:

mov y,12345

movdx,0
movax,y
movbx,10000
idivbx
addax,30h
movbx,0
movbuf [bx],al

movax,dx
movdx,0
movbx,1000
idivbx
addax,30h
movbx,1
movbuf [bx],al
movax,dx

movdx,0
movbx,100
idivbx
addax,30h
movbx,2
movbuf [bx],al
movax,dx

movdx,0
movbx,10
idivbx
addax,30h
movbx,3
movbuf [bx],al

movbx,4
movax,dx
addax,30h
movbuf [bx],al
movah,9
movdx,offset buf
int21h
ret

ydw(?)
bufdb'AAAAA' ,'$'
.model tiny
.code
    org 100h

start:
    mov y,12345

;Способ 1. Используя вспомогательную переменную
    mov ax,y
    xor si,si
    mov di,10000
    mov bx,10
    xor dx,dx
Way1:
    div di
    add al,30h
    mov buf[si],al
    mov ax,dx
    xor dx,dx
    xchg ax,di
    div bx
    xchg di,ax
    inc si
    or dx,dx
    jz Way1
    mov ah,9
    mov dx,offset buf
    int 21h

;Способ 2. Заполнение буфера с конца.
    mov ax,y
    mov si,offset buf+4
    mov bx,10
Way2:
    xor dx,dx
    div bx
    add dl,'0'
    mov [si],dl
    dec si
    or ax,ax
    jnz Way2
    inc si
    mov ah,9
    mov dx,si
    int 21h

;Способ 2а. То же самое, но с выводом незначащих нулей в старших разрядах
    mov ax,y
    mov si,4
    mov cx,5
    mov bx,10
Way2a:
    xor dx,dx
    div bx
    add dl,30h
    mov buf[si],dl
    dec si
    loop Way2a
    mov ah,9
    mov dx,offset buf
    int 21h

;Способ 3. С использованием стека
    mov ax,y
    mov cx,5
    mov bx,10
Way3:
    xor dx,dx
    div bx
    or dl,'0'
    push dx
    loop Way3
    mov cx,5
    mov ah,2
Out3:
    pop dx
    int 21h
    loop Out3
    mov dx,offset buf+5
    mov ah,9
    int 21h

;Способ 3a. То же, но без вывода незначащих нулей
    mov ax,y
    xor cx,cx
    mov bx,10
Way3a:
    xor dx,dx
    div bx
    or dl,30h
    push dx
    inc cx
    test ax,ax
    jnz Way3a
    mov ah,2
Out3a:
    pop dx
    int 21h
    loop Out3a

    ret

y dw (?)
buf db 'AAAAA',13,10,'$'
    end start
Анатолий Заиграев
Анатолий Заиграев
51 590
Лучший ответ