Нумерация списка - Assembler

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

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

Здравствуйте, написал вот такую программу, которая выводит количество и список разделов, мне нужно сделать нумерацию списка по порядку, но у меня не получается это сделать как видно на скриншоте, подскажите как исправить ошибку
.386
dseg  segment use16
    buffer db 446 dup (0)
    part1   db   16 dup(0)
    part2   db   16 dup(0)
    part3   db   16 dup(0)
    part4   db   16 dup(0)
    sign    db   02 dup(0)
 
    errr   db 'Attention sector read error! $'  
    razdel db 13,10,'Kolichestvo razdelov: $'
    mes    db 13,10,'Pazdel(1): $'
 
    ;Пакет дискового адреса 
    paket db 16         ;длинна пакета 
      db 0  
      db 1          ;кол-во секторов для чтения
      db 0
      dw buffer         ;внутрисегментная адресация области буфера 
      dw dseg       ;значение указателя сегмента данных
      dq 0          ;номер сектора в LBA
 
    rest    db  'Razshireniy.razdel $'
    txtntfs db  'NTFS $'
    txtfat16    db  'FAT16 $'
    txtfat32    db  'FAT32 $'
 
dseg  ends
cseg  segment use16
 
assume ds:dseg, cs:cseg
 
m1:
mov cx, dseg
mov ds, cx
 
    mov ah,42h  
    mov dl,80h  ;номер устройства
    lea si,paket    ;смещение пакета диского адреса в сегмент данных
    
    int 13h
    jc  short eerr
 
        mov   ah,9
    lea   dx,razdel
    int   21h
 
        lea si,part1+4
        mov   cx,4
        mov   al,'0'
 
find:   cmp   byte ptr [si],0     ; проверка очередного флага
        jz    next
        inc   al             ; счётчик, если не нуль
next:   add   si,16          ; адрес сл.флага..
        loop  find
        int   29h
 
; показываем типы найденных разделов
 
n1: 
    lea si,buffer   ;
    add si,01c2h    ; 
    mov cx,4
    mov dl,0h   
srav:   cmp cx,0
    jz  exit    ;выход из проверки
    
    mov bl,ds:[si]
 
    cmp bl,07h  ;ntfs
    jz  ntfs
c1: cmp bl,06h  ;fat16
    jz  fat16
c2: cmp bl,0bh  ;FAT32
    jz  fat32
c3: cmp bl,0fh  ;расширенный раздел
    jz  rashraz
        cmp bl,05h
        jz rashraz
c4:
    
        mov ah, 9       ;вывод списка разделов
        lea dx,mes
        int 21h
 
        dec cx
    add si,16
    jmp srav
 
;завершение исполнения
exit:   mov ah,4ch
    int 21h
 
eerr:
    mov   ah,9
    lea   dx,errr
    int   21h
    jmp   short exit 

;вывод сообщений о найденных типах разделов
 
ntfs:   
 
    mov   ah,9
    lea   dx,txtntfs
    int   21h
 
    jmp   c1
 
fat16:
 
    mov   ah,9
    lea   dx,txtfat16
    int   21h
    jmp   c2
 
fat32:
 
    mov   ah,9
    lea   dx,txtfat32
    int   21h
    jmp   c3
 
rashraz:
    mov   ah,9
    lea   dx,rest
    int   21h
    jmp   c4

cseg ends
end m1

Решение задачи: «Нумерация списка»

textual
Листинг программы
        mov  ah, 9       ;вывод списка разделов
        lea  dx,mes
        int  21h
        inc  byte[mes+9]

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

  1. mov ah, 9 — в данном случае переменная ah используется как регистр для хранения номера сегмента, который необходим для обращения к памяти. Значение 9, переданное в регистр ah, определяет функцию, которую мы хотим выполнить — в данном случае это вывод списка разделов.
  2. lea dx, mes — здесь переменная dx используется как регистр для хранения номера сегмента, а mes — это адрес памяти, где хранится строка, которую мы хотим вывести. lea означает перенести адрес.
  3. int 21h — это команда для вызова функции BIOS, которая занимается выводом на экран.
  4. inc byte[mes+9] — это команда для увеличения значения в памяти по адресу mes+9 на единицу. byte означает, что мы обращаемся к памяти как к массиву байтов, а inc означает увеличить на единицу.

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

14   голосов , оценка 3.643 из 5