Вывод символов таблицы ASCII в указанном диапазоне (программа выводит только один символ) - Assembler

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

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

Есть программа, она должна выводить указанные символы таблицы ASCII. Указываем начальный индекс и конечный индекс и программа выводит символы в этом диапазоне. Но есть проблема, она выводит только 1 символ и всё. Помогите пожалуйста! Работаю в EMU8086.
.model small
org 100h
.data
dbStart db  10,13,'enter start index:$'
dbStop  db  10,13,'enter stop index:$'
.code
MOV    AX,@DATA   
    MOV    DS,AX
start:
    lea dx,dbStart
    call    inpnum
    push    di
    lea dx,dbStop
    call    inpnum
    mov al,13
    mov ah,2
mov dl,al
int 21h
    mov al,10
    mov ah,2
mov dl,al
int 21h
    pop ax
@@00:   mov ah,2
mov dl,al
int 21h
    inc ax
    cmp ax,di
    jbe @@00
    xor ax,ax
    int 16h
    ret
inpNum: mov ah,09
    int 21h
    xor di,di
    mov bx,10
@@01:   xor ax,ax
    int 16h
    cmp al,13
    jz  stop
    cmp al,'0'
    jb  @@01
    cmp al,'9'
    ja  @@01
    mov ah,2
mov dl,al
int 21h
    and ax,0fh
    xchg    ax,di
    xor dx,dx
    mul bx
    add di,ax
    jmp @@01
stop:   ret
 
    end start

Решение задачи: «Вывод символов таблицы ASCII в указанном диапазоне (программа выводит только один символ)»

textual
Листинг программы
.model tiny
org  100h
;.data
.code
org  100h
start:
;MOV    AX,@DATA   
;    MOV    DS,AX
; вводим число(1) ======================================
   mov   ah,9           ;
   mov   dx,offset dbStart     ;
   int   21h            ;
   call  inpNum         ;
; обрабатываем ошибку ==================================
   or    di,di          ; DI равен нулю?
   jnz   ok             ; нет - ОК!
clear:                  ; да - ошибка!
   mov   ah,9           ;
   mov   dx,offset error       ;
   int   21h            ;
   jmp   start          ; заново...
; вводим число(2) ======================================
ok:                     ;
   push  di             ; сохраняем число(1)
   mov   ah,9           ;
   mov   dx,offset dbStart     ;
   int   21h            ;
   call  inpNum         ;
   push  di             ; сохраняем число(2)
   mov   ah,9           ;
   mov   dx,offset crlf        ; перевод строки..
   int   21h            ;
; расчёт символов для вывода ===========================
   pop   cx bx          ; снимаем со-стека оба числа
   sub   cx,bx          ; разница будет счётчиком
   jns   next           ; второе число меньше первого?
   jmp   clear          ; да - ошибка!
; вывод ASCII символов =================================
next:                   ;
   mov   al,bl          ; число(1) отправляем в символ
@b:                     ;
   int   29h            ; выводим его на экран
   inc   al             ; сл.символ СХ-раз..
   loop  @b             ;
 
exit:                   ;
   xor   ax,ax          ;
   int   16h            ;
   int   20h            ;
 
;*******************************************************
inpNum:
   xor   di,di
   mov   bx,10
@@:
   xor   ax,ax
   int   16h
   cmp   al,13
   jz    stop
   cmp   al,'0'
   jb    @@
   cmp   al,'9'
   ja    @@
   int   29h
   and   ax,0fh
   xchg  ax,di
   xor   dx,dx
   mul   bx
   add   di,ax
   jmp   @@
stop:
   ret
 
dbStart  db  10,13,'Start index: $'
dbStop   db  10,13,' Stop index: $'
error    db  13,10,7,'<--Bad index! Press any key..'
crlf     db  13,10,'$'
end start

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

[1] .model tiny [2] org 100h [3] .data [4] .code [5] org 100h [6] start: [7] mov ah,9 [8] mov dx,offset dbStart [9] int 21h [10] call inpNum [11] or di,di [12] jnz clear [13] mov ah,9 [14] mov dx,offset error [15] int 21h [16] jmp start [17] [18] ok: [19] push di [20] mov ah,9 [21] mov dx,offset dbStart [22] int 21h [23] call inpNum [24] push di [25] mov ah,9 [26] mov dx,offset crlf [27] int 21h [28] [29] pop cx bx [30] sub cx,bx [31] jns next [32] jmp clear [33] [34] next: [35] mov al,bl [36] int 29h [37] inc al [38] loop next [39] [40] exit: [41] xor ax,ax [42] int 16h [43] int 20h [44] [45] inpNum: [46] xor di,di [47] mov bx,10 [48] @@: [49] xor ax,ax [50] int 16h [51] cmp al,13 [52] jz stop [53] cmp al,'0' [54] jb @@ [55] cmp al,'9' [56] ja @@ [57] int 29h [58] and ax,0fh [59] xchg ax,di [60] xor dx,dx [61] mul bx [62] add di,ax [63] jmp @@ [64] stop: [65] ret [66] [67] dbStart db 10,13,'Start index: $' [68] dbStop db 10,13,' Stop index: $' [69] error db 13,10,7,'<--Bad index! Press any key..' [70] crlf db 13,10,'$' [71] end start

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


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

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

10   голосов , оценка 3.6 из 5
Похожие ответы