Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вывод массива 
V
    Опции темы
binarnik
Дата 18.4.2009, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.4.2009

Репутация: нет
Всего: нет



Вывод первых 12 чисел фибоначи
выводятся 1 1 2 3 5 8 дальше мусор, по видимому двузначные числа выводятся неккоректно. подскажите как правильно вывести массив.
и почему при односимвольном выводе мы пишем add dl,30h ?
Код

.model tiny
.code
CHISLA     DB       12 DUP(?) ;nash massiv
org 100h

Begin:

mov si,1
mov al,0
mov CHISLA[0],1
mov CHISLA[1],1
; заполняем массив
mov cx,10
ex:
dec si
mov al,CHISLA[si]
inc si
add al,CHISLA[si]
inc si
mov CHISLA[si],al
loop ex

;вывод
xor ax,ax
mov si,0
mov cx,12
show:
mov ah,02h
mov dl,CHISLA[si]
add dl,30h
int 21h
inc si
loop show

;выход = del
xor ax,ax
m1:
 MOV AH,00h 
 INT 16h
 CMP AH,53h 
 je m2
 jmp m1
m2:
int 20h;
end Begin




заранее спс
PM MAIL   Вверх
ФедосеевПавел
Дата 18.4.2009, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 4
Всего: 10



Смотри, 7-е число Фибоначи будет - 13. Чтобы его вывести на экран, нужно его разделить на 10. Частное от деления - 1 - поместить в dl и вывести на экран твоим кодом:
Код

show:
  mov ah,02h
  mov dl,частное
  add dl,30h
  int 21h

Затем, взять остаток от деления - 3 - поместить в dl и также вывести на экран.

Так в целом выглядит алгоритм вывода числа на экран. Но на практике при создании подпрограмм вывода не привязываются к конкретным значениям выводимого числа и алгоритм выглядит примерно так:
1. Исходное число делят на 10 (div).
2. Остаток помещают в стек (push dl).
3. Если частное>0, то Исходное=частное и перейти к п.1
4. Теперь выводим числа (на самом деле одиночные цифры) из стека на экран кодом, аналогичным приведённому тобой
Вот процедура вывода на экран содержимого ax
Код

; выводит число в регистре AX на экран
; входные данные:
; ax - число для отображения
Show_ax PROC
        mov     cx, 10
        xor     di, di          ; di - кол. цифр в числе
@@Conv:
        xor     dx, dx
        div     cx              ; dl = num mod 10
        add     dl, '0'         ; перевод в символьный формат
        inc     di
        push    dx              ; складываем в стек
        or      ax, ax
        jnz     @@conv
        ; выводим из стека на экран
@@Show:
        pop     dx              ; dl = очередной символ
        mov     ah, 2           ; ah - функция вывода символа на экран
        int     21h
        dec     di              ; повторяем пока di<>0
        jnz     @@show
        ret
Show_ax ENDP


Применять её примерно так:
Код

    mov al, CHISLO[si]
    mov ah, 00h                ; <-- т.к. в твоем случае размер выводимого числа 1 байт
    call  Show_ax


Можешь переделать Show_ax в Show_al, чтобы выводилось содержимое не ax, а al.

Еще хорошие примеры вывода чисел на экран http://forum.vingrad.ru/faq/topic-158522/u...ывод-числа.html

Цитата

и почему при односимвольном выводе мы пишем add dl,30h ?

Потому, что код символа "0" равен 30h, "1" - 31h ...

Это сообщение отредактировал(а) ФедосеевПавел - 18.4.2009, 07:56
PM   Вверх
binarnik
Дата 25.4.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.4.2009

Репутация: нет
Всего: нет



все доходчиво, спасибо разобрался)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.