Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Ввод и вывод матрицы


Автор: Zekkson_M 12.1.2006, 00:02
Объясните кто-нить пожалуйста как можно организовать ввод матрицы 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
Вот так компиллируется, но у тебя тама все равно каша ;)

Код

.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]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)