Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод и вывод матрицы, как ввести и вывести на экран. 
:(
    Опции темы
Zekkson_M
Дата 12.1.2006, 00:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

Код

[color=purple]
                
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          ;Конец программы[/color]


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
































































  Вверх
Chingachguk
Дата 13.1.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

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



Вот так компиллируется, но у тебя тама все равно каша ;)

Код

.model small
.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,'$'        ;
      db 13,10,'$'        ;
      
data    ends                    ;Конец сегмента данных

code    segment                ;Начало сегмента
    assume cs:code,ds:data        ;Обещаем выставить cs=code,ds=data
 
start:                    ;Точка входа в программу

   mov ax,seg data
   mov ds,ax

;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
doOutMatrix 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          ;Конец программы[/color]



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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