Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2012, 20:33   #1
Человек Панда
Пользователь
 
Регистрация: 04.02.2011
Сообщений: 75
По умолчанию Печать матрицы в ассемблере.

Здравствуйте.Только недавно стал изучать ассемблер.Столкнулся с проблемой:имею матрицу,задаю значения элементов программно.Хотел распечатать её построчно.В отладчике вижу,как печатает элемент за элементом,когда вроде бы конец начинает печатать 0(получается вроде как зацикливание).Что делать.Вот код:


Код:
Include masm32.inc

IncludeLib kernel32.lib
IncludeLib masm32.lib

         .CONST
MsgExit  DB    "Press Enter to Exit",0AH,0DH,0

         .DATA
Ishod DB 'Ishodnaya matrix:',13,10,0
Result1 DB '  '
ResStr1  DB  16 DUP (' '),13,10,0
Freestr DB     13,10,' ',13,10,0


A SBYTE 1,2,3,4,5
  SBYTE 21,22,23,24,25
  SBYTE 31,32,33,34,35
  SBYTE 41,42,43,44,45
  SBYTE 51,52,53,54,55 
  SBYTE 61,62,63,64,65

         .DATA?
inbuf    DB    100 DUP (?)

         .CODE
Start:
      Invoke StdOut,ADDR Ishod
      mov EBX,0;встаем на первый элемент матрицы
      mov ECX,6;организуем проход по 6 строкам
cycle1: 
       
       Invoke StdOut,ADDR Freestr;начинаем с новой строки
        
        push ECX;запоминаем в стек значение ЕСХ(изначально 6)
        mov ECX,5;организуем проход в n-ой строке
        ;ECX=5 поскольку 5 столбцов
cycle2:       
        Invoke dwtoa,A[EBX],ADDR ResStr1;переводим значение эл-та в строку
        Invoke StdOut,ADDR Result1;выводим на печать элемент    
        inc EBX;проходим по строке на 1 байт дальше
        loop cycle2;уменьшаем счетчик ЕСХ на 1
        ;если конец строки=> восстанавливаем ЕСХ из стека
        pop ECX;берем есх из стека
        loop cycle1;уменьшаем ЕСХ на 1 и идем на повтор
       
       
         XOR    EAX,EAX
         Invoke StdOut,ADDR MsgExit
         Invoke StdIn,ADDR inbuf,LengthOf inbuf		
	
         Invoke ExitProcess,0
         End    Start
Человек Панда вне форума Ответить с цитированием
Старый 04.03.2012, 23:02   #2
Человек Панда
Пользователь
 
Регистрация: 04.02.2011
Сообщений: 75
По умолчанию

Сам спросил-сам отвечу.Оказывается,печать в консоль (Invoke) "портит" регистр еcx.Отсюда и зацикливание происходит
Человек Панда вне форума Ответить с цитированием
Старый 04.03.2012, 23:13   #3
Juffin
Форумчянин
Форумчанин
 
Аватар для Juffin
 
Регистрация: 05.04.2009
Сообщений: 446
По умолчанию

Ну вот, хорошо заданный вопрос - половина ответа
Nobody expects Spanish Inquisition!
Juffin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод матрицы на печать в определенном порядке Annet555 Помощь студентам 3 29.03.2009 00:16
Умножение матрицы на столбец в ассемблере hecz Помощь студентам 0 04.12.2007 09:55