Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Как ввести и вывести на экран матрицу
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Одна страница
Модераторы: paradise, KMA
  

Nikolai M


Удален

Объясните кто-нить пожалуйста как можно организовать ввод матрицы 2х2 и потом вывести её на экран.
При этом её элементы должны вводится с клавиатуры. Ниже приведено, что я сделал. Но когда я запуская tasm, то он пишет что *FATAL* Line too long (что это означает?).

----------------------------------------------------------------------------------

STACK 100h                ;100h памяти под сегмент
mSize    equ 2                ;Размер матрицы

data    segment                       ;Начало сегмента данных
    matrix    db mSize*mSize dup(?)

     prompt1 db 'Введите число:','$'
     endl     db 13,10,'$'        ; перевод на след. строчку
     prompt2 db 'Полученая Матрица:','$'        
     endl     db 13,10,'$'        ;
     
data    ends                    ;Конец сегмента данных

code    segment                ;Начало сегмента
   assume cs:code,ds:data        ;Обещаем выставить cs=code,ds=data

start:                    ;Точка входа в программу

;doEnterMatrix    proc near -  процедура ввода

doEnterMatrix    proc near         ;Начало описания процедуры ввода
   
    mov si,OFFSET prompt1              ;ds:si указывает на строку prompt1
    call    doPrintStr            ;Печатаем на экране строку prompt1

       push    es                ;Сохраняем es в стеке
       push    di                ;Сохраняем di в стеке
       push    si                ;Сохраняем si в стеке
       push    cx                ;Сохраняем cx в стеке
       push    ax                ;Сохраняем ax в стеке
     
doEnterMatrix  endp                          ;Конец описания процедуры


;doOutMatrix proc near - процедура вывода


doOutMatrix    proc near                        ;Начало описания процедуры вывода

      mov    si,OFFSET prompt2         ;ds:si указывает на prompt2
      call    doPrintStr            ;
      pop    ax                ;Восстанавливаем ax из стека
      pop    cx                ;Восстанавливаем cx из стека
      pop    si                ;Восстанавливаем si из стека
      pop    di                ;Восстанавливаем di из стека
      pop    es                ;Восстанавливаем es из стека
      ret                    ;Выходим из процедуры

doOutMatrix    proc near    endp    

; doPrintStr - Вывод DOS строки на экран


doPrintStr     proc near                ;Начало описания процедуры
   push    dx            ;Сохраняем dx в стеке
   push    ax            ;Сохраняем ax в стеке
   
   mov    ah,09h                ;ah = 09h
       mov    dx,si            ;dx = si
   int    21h            ;Прерывание 21h(DOS) выв. строки

   pop    ax            ;Восстанавливаем из стека ax
   pop    dx            ;Восстанавливаем из стека dx
   ret                ;Выходим из процедуры
doPrintStr    endp            ;Конец описания процедуры

code    ends              ;Конец сегмента кода
end    start          ;Конец программы

-----------------------------------------------------------------

Помогите, если можете. заранее спасибо.

Всего сообщений: N/A | Присоединился: N/A | Отправлено: 12 янв. 2006 19:36 | IP
KMA



Долгожитель


Цитата: Nikolai M написал 12 янв. 2006 19:36
Ниже приведено, что я сделал. Но когда я запуская tasm, то он пишет что *FATAL* Line too long (что это означает?).


Линия слишком большая, посмотри повнимательнее, куда курсор устанавливается, и сократи свои пояснения.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 12 янв. 2006 20:38 | IP
Nikolai M


Удален

Добавил такую вещь. Запускаю tasm: ошибок нет. Но когда запускаю готовый exe-файл, то на экране творится не пойми что.
-----------------------------------------------------------
start:                    ;Точка входа в программу
       mov ax,data
       mov  ds,ax

      mov cx,mSize*mSize
      mov si,OFFSET matrix
call doEnterMatrix
       mov si,OFFSET prompt1
call doPrintStr              
      mov  si,OFFSET matrix
      mov  cx,mSize*mSize
       call doPrintStr
       mov si,OFFSET endl
call   doPrintStr
       mov  si,OFFSET prompt2
call  doPrintStr                
        mov  cx,mSize*mSize
        mov  si,OFFSET matrix
 ----------------------------------------------------------------------------
Тяжеловато разобраться. Искал в интернете примеры, но не нашел.


(Сообщение отредактировал Nikolai M 12 янв. 2006 21:07)

Всего сообщений: N/A | Присоединился: N/A | Отправлено: 12 янв. 2006 21:05 | IP
KMA



Долгожитель

Самому разбираться в лом, я ведь тоже только начинаю в Ассемблере разбираться, а так похожая информа есть  на сайте внешняя ссылка удалена в разделе TASM найдешь все для решения данной программы.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 12 янв. 2006 21:27 | IP
Guest



Новичок

приведи полный текст. сначала ты забыл проинициализировать DS, и сейчас, вероятно, что-то забыл или что-то неаккуратно пишешь в регистры

Всего сообщений: Нет | Присоединился: Never | Отправлено: 15 янв. 2006 23:30 | IP

Отправка ответа:
Имя пользователя   Вы зарегистрировались?
Пароль   Забыли пароль?
Сообщение

Использование HTML запрещено

Использование IkonCode разрешено

Смайлики разрешены

Опции отправки

Добавить подпись?
Получать ответы по e-mail?
Разрешить смайлики в этом сообщении?
Просмотреть сообщение перед отправкой? Да   Нет
 

Переход к теме
<< Назад Вперед >>
Одна страница

Форум работает на скрипте © Ikonboard.com