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