Ошибка в коде: Заполнить массив тридцатью нулями. (Использовать команду stos) - Assembler

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

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

Здравствуйте, помогите пожалуйста. У меня в коде скорее всего есть ошибка, не могу найти ее. Задание: Заполнить массив тридцатью нулями. (Использовать команду stos). И вывести массив на экран. Код представлен ниже:
.model small
.data
    mas dw 30 dup(?)    ; инициализация массива тридцатью элементами
.stack 100h         ; задание размера стека 256 байт
.code
begin:
    mov ax,@data
    mov ds,ax
 
    mov di,offset mas   ; в индекс приемника заносится смещение первого элемента массива
    mov cx,30       ; счетчик равен 30
    mov ax,0        ; значение, которым инициализируется массив
    cld         ; сброс флага направления (df) в 0
    rep stosw       ; сохранение элементов строки
    mov si,0
    mov cx,30
L1:
    push cx
    mov ax,mas[si]
    xor cx,cx
    mov bx,10
oi2:
    xor dx,dx
    div bx
    push dx
    inc cx
    test ax,ax
    jnz oi2
    mov ah,02h
oi3:
    pop dx
    add dl,'0'
    int 21h
loop oi3
    add si,type mas
    pop cx
loop L1
 
    mov ah,4ch
    int 21h         ; выход из программы
end begin
При проверке в дебаггере, программа ничего не выводит. Мне кажется, что ошибка будет в строках 10-14. Спасибо за помощь.

Решение задачи: «Ошибка в коде: Заполнить массив тридцатью нулями. (Использовать команду stos)»

textual
Листинг программы
.model small
.data
    mas dw 30 dup(?)                    ; инициализация массива тридцатью элементами
    message1  db "Array of 30 elements: $"   ; инициализация строки
    new_line  db 10,13,'$'          ; строка перевода на новую строку
.stack 100h                         ; задание размера стека 256 байт
.code
begin:
    mov ax,@data
    mov ds,ax
    mov es,ax
 
    mov di,offset mas                   ; в индекс приемника заносится смещение первого элемента массива
    mov cx,30                       ; счетчик равен 30
    mov ax,0                        ; значение, которым инициализируется массив
    cld                         ; сброс флага напрвления (df) в 0
    rep stosw                       ; сохранение элементов строки
    mov si,0
    mov cx,30
    mov dx,offset message1
    mov ah,9
    int 21h                 ; вывод строки message1
    mov dx,offset new_line
    mov ah,09h
    int 21h                 ; переход на новую строку
L1:
    push cx
    mov ax,mas[si]
    xor cx,cx
    mov bx,10
oi2:
    xor dx,dx
    div bx
    push dx
    inc cx
    test ax,ax
    jnz oi2
    mov ah,02h
oi3:
    pop dx
    add dl,'0'
    int 21h                 ; вывод вектора из 30 нулей
loop oi3
    add si,type mas
    pop cx
loop L1
 
    mov ah,4ch
    int 21h         ; выход из программы
end begin

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


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

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

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