Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

 

  Вопрос: Давайте покончим с этим Добавлено: 25.04.05 23:55  

Автор вопроса:  Pavel.asm | ICQ: 255-950-543 

  Ответы Всего ответов: 129  

Номер ответа: 46
Автор ответа:
 Pavel.asm



ICQ: 255-950-543 

Вопросов: 1
Ответов: 11
 Профиль | | #46 Добавлено: 26.04.05 17:47
Здраствуйте!
Я действительно запутался в ваших словах так как они для меня не несут информативный характер в связи с незнакомой терминалогией. Решил как то создать методику по обучению самого себя с целью овладения Асма и в следствии написать книгу которая поэтапно будет объяснять всё что касается данного языка. Только я должен сделать эту книгу шедевром так как макулатуры достаточно. Приветсвуются люди вступающие в совместный проект по написанию бесцелера.
Начиная свой нелёгкий путь к постижению Ассемблера хотелось бы чтоб вы (более продвинутые) тоже закрепляли свои знания путём обсуждения трудноперевареемых сторон этого языка, и кто вообще только недавно узнал что ассм является самым актуальным среди высококвалифицированных программистов языком присоединяйтесь ко мне, будем учить его вместе. Так будет веселей.
В качестве начальной литературы я взял электронный вариант книги
Юрова В. И. - "Справочная система по языку ассемблера IBM PC"
которую можно скачать от сюда http://argumentation.narod.ru/assembl.rar
В отличии от полиграфического варианта она(как подсказал freeloader)
более компактна и несёт только реально нужные стороны и ненагружает кору головного мозга непонятными терминами (хотя последнии имеются,но я надеюсь что мы с вами вместе решим это всё без труда).
Скажим "бисмила аллах агбар" и начнем..........
Номер ответа: 47
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #47
Добавлено: 26.04.05 17:49
16.5 кб (не сжатый). немного для делфи, не правда ли? Консольное правда и повыкинул лишние библиотеки (а нафиг они?).
Не знаю, практической пользы от него никакой, зато алгоритмы разрабатывать в нём просто до ужаса
Номер ответа: 48
Автор ответа:
 Pavel.asm



ICQ: 255-950-543 

Вопросов: 1
Ответов: 11
 Профиль | | #48 Добавлено: 26.04.05 17:49
Из главы "Программная модель микропроцессора"
я выясняю что самое главное устройство компьютера - микропроцессор имеет 16 пользовательских регистров(РОН) и 16 системных регистров.

далее идет описание пользовательских регистров.
Как пишет автор пользовательские регистры называются потому, что программист может использовать их при написании своих программ.

Далее идет описание регистров процессора которые как я понял, что, они мало могут сказать незная структуру памяти и в этой главе это не расматривается хотя такие понятия как сегмент, смещение употребляется часто. Остаётся в стороне как процессор обращается к памяти и что она вообще из себя представляет(что это последовательность пронумерованных ячеек это понятно только при чём здесь смещение,сегмент, база кадра стёка??????? по крайней мере для меня остаётся загадкой)
Вот она непоследовательная подача информации приводящяя к завихрению мыслей.
Ктонибудь сможет по человечески объяснить?
Номер ответа: 49
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #49
Добавлено: 26.04.05 18:03
Сегмент:Смещение тебе не нужно. Windows использует другую модель памяти, называемую Flat (плоская).
Номер ответа: 50
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #50
Добавлено: 26.04.05 18:52

написать книгу которая поэтапно будет объяснять всё что касается данного языка.

 А я лучше визуализатор напишу. Идея такова: есть TreeView, в котором по группам отсортированы русские представления мнемоник. Выбираешь мнемонику, операнды и добавляешь в список. Затем компилируешь и медитируешь :)
Номер ответа: 51
Автор ответа:
 Pavel.asm



ICQ: 255-950-543 

Вопросов: 1
Ответов: 11
 Профиль | | #51 Добавлено: 26.04.05 18:58
re : Сегмент:Смещение тебе не нужно. Windows использует другую модель памяти, называемую Flat (плоская).

Это очень интересно...
Может раскажешь что из себя представляет плоская модель памяти? И какие еще модели бывают
Номер ответа: 52
Автор ответа:
 Pavel.asm



ICQ: 255-950-543 

Вопросов: 1
Ответов: 11
 Профиль | | #52 Добавлено: 26.04.05 19:03
Лучше было бы если графически оформить всю работу процессора
Номер ответа: 53
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #53
Добавлено: 26.04.05 23:32
По моему split в один проход решается? или нет?

попробуй напиши, тебе понравится ;)
Условие - неиспользовать массивы, создавать нечто импровизированое...

Это очень интересно...
Может раскажешь что из себя представляет плоская модель памяти? И какие еще модели бывают

Тебе более будет полезен при возникновении - Зубков...

3.3.2. Модели памяти и упрощенные директивы определения сегментов
Модели памяти задаются директивой .MODEL

.model модель,язык,модификатор

где модель — одно из следующих слов:

TINY — код, данные и стек размещаются в одном и том же сегменте размером до 64 Кб. Эта модель памяти чаще всего используется при написании на ассемблере небольших программ;

SMALL — код размещается в одном сегменте, а данные и стек — в другом (для их описания могут применяться разные сегменты, но объединенные в одну группу). Эту модель памяти также удобно использовать для создания программ на ассемблере;

COMPACT — код размещается в одном сегменте, а для хранения данных могут использоваться несколько сегментов, так что для обращения к данным требуется указывать сегмент и смещение (данные дальнего типа);

MEDIUM — код размещается в нескольких сегментах, а все данные — в одном, поэтому для доступа к данным используется только смещение, а вызовы подпрограмм применяют команды дальнего вызова процедуры;

LARGE и HUGE — и код, и данные могут занимать несколько сегментов;

FLAT — то же, что и TINY, но используются 32-битные сегменты, так что максимальный размер сегмента, содержащего и данные, и код, и стек, — 4 Мб.

Язык — необязательный операнд, принимающий значения C, PASCAL, BASIC, FORTRAN, SYSCALL и STDCALL. Если он указан, подразумевается, что процедуры рассчитаны на вызов из программ на соответствующем языке высокого уровня, следовательно, если указан язык C, все имена ассемблерных процедур, объявленных как PUBLIC, будут изменены так, чтобы начинаться с символа подчеркивания, как это принято в C.

Модификатор — необязательный операнд, принимающий значения NEARSTACK (по умолчанию) или FARSTACK. Во втором случае сегмент стека не будет объединяться в одну группу с сегментами данных.

После того как модель памяти установлена, вступают в силу упрощенные директивы определения сегментов, объединяющие действия директив SEGMENT и ASSUME. Кроме того, сегменты, объявленные упрощенными директивами, не требуется закрывать директивой ENDS — они закрываются автоматически, как только ассемблер обнаруживает новую директиву определения сегмента или конец программы.

Директива .CODE описывает основной сегмент кода

               .code имя_сегмента

эквивалентно

_TEXT segment word public ’CODE’

для моделей TINY, SMALL и COMPACT и

name_TEXT segment word public ’CODE’

для моделей MEDIUM, HUGE и LARGE (name — имя модуля, в котором описан данный сегмент). В этих моделях директива .CODE также допускает необязательный операнд — имя определяемого сегмента, но все сегменты кода, описанные так в одном и том же модуле, объединяются в один сегмент с именем NAME_TEXT.

               .stack размер

Директива .STACK описывает сегмент стека и эквивалентна директиве

STACK segment para public ’stack’

Необязательный параметр указывает размер стека. По умолчанию он равен 1 Кб.

               .data

Описывает обычный сегмент данных и соответствует директиве

_DATA segment word public ’DATA’


               .data?

Описывает сегмент неинициализированных данных:

_BSS segment word public ’BSS’

Этот сегмент обычно не включается в программу, а располагается за концом памяти, так что все описанные в нем переменные на момент загрузки программы имеют неопределенные значения.

               .const

Описывает сегмент неизменяемых данных:

CONST segment word public ’CONST’

В некоторых операционных системах этот сегмент будет загружен так, что попытка записи в него может привести к ошибке.

               .fardata имя_сегмента

Сегмент дальних данных:

имя_сегмента segment para private ’FAR_DATA’

Доступ к данным, описанным в этом сегменте, потребует загрузки сегментного регистра. Если не указан операнд, в качестве имени сегмента используется FAR_DATA.

               .fardata? имя_сегмента

Сегмент дальних неинициализированных данных:

имя_сегмента segment para private ’FAR_BSS’

Как и в случае с FARDATA, доступ к данным из этого сегмента потребует загрузки сегментного регистра. Если имя сегмента не указано, используется FAR_BSS.

Во всех моделях памяти сегменты, представленные директивами .DATA, .DATA?, .CONST, .FARDATA и .FARDATA?, а также сегмент, описанный директивой .STACK, если не был указан модификатор FARSTACK, и сегмент .CODE в модели TINY автоматически объединяются в группу с именем FLAT — для модели памяти FLAT или DGROUP — для всех остальных моделей. При этом сегментный регистр DS (и SS, если не было FARSTACK, и CS в модели TINY) настраивается на всю эту группу, как если бы была выполнена команда ASSUME.
Номер ответа: 54
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #54
Добавлено: 27.04.05 00:17
2 sne:
ответ 42. но там с массивами правда, если вместо него поставить простой счётчик то и без массива обойдёмся, даже память сэкономим.
Номер ответа: 55
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #55
Добавлено: 27.04.05 00:59
2Morpheus,

1. у тебя нет ни массивов, ни типа такого! У тебя есть только память как единый и сплошной кусок! В связи с этим w[k]:= - не пойдет, за тебя никто расчитывать ничего не станет

2. у тебя нет length - пиши сам

3. у тебя нет copy - пиши сам

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

5. у тебя нет условий, юзай условные переходы, те же метки

6. SplitEx:=w[index]; - тоже ерунда, возвращаться, впрочем как и приниматься в качестве параметров, в лучшем случае может только DWORD (Long)...
Номер ответа: 56
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #56
Добавлено: 27.04.05 00:59
Так что пересмотри свой код в согласование с этими условиями и ты сможешь чмело свой код переписать на ассемблер...
Номер ответа: 57
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #57
Добавлено: 27.04.05 01:10
вроде на первый взгляд выполнимы все условия, только вот не знаю как без условий. и если нет условий, как сделать условные переходы? или ты имеешь в виду, что под одним if нельзя писать несколько операторов? тогда тоже реализуемо, хотя проблемы могут возникнуть, не исключаю.
Номер ответа: 58
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #58
Добавлено: 27.04.05 02:26
Похоже что все кроме меня понимают ассемблер как язык.
Не льсти себе :)
2All (тайно от Sharp'a)
а вообще зря так на паскаль, это же рулееез
ААА!!! Бейте его, ребята!!!
Приветсвуются люди вступающие в совместный проект по написанию бесцелера.
Сходи на wasm.ru, там народ собирался, вроде даже не все потухли.
зато алгоритмы разрабатывать в нём просто до ужаса
Для алгоритмов рулит C++, Haskell, Fortran, в конце концов. Паскакаль это побрякушка для ламеров-преподов и ламеров-студентов во второсортных втузах.

Split можно написать в один проход, примерно так:
mov ecx, offset StringToParse
invoke AddToMyStack, ecx
m0:
cmp byte ptr [ecx], 20h ;скажем, пропарсить надо пробелы
jnz m1
cmp byte ptr [ecx], 0
jz m2
mov [ecx],0
inc ecx
invoke AddToMyStack, ecx
dec ecx
m1:
inc ecx
jmp m0
m2:
Решение конечно не лучшее, но достаточность одного прохода демонстрирует.
Номер ответа: 59
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #59
Добавлено: 27.04.05 02:32
ААА!!! Бейте его, ребята!!!

падаю :-)) не зря же "тайно" написал. Ну думаю, что человека с таким большим опытом как ты нельзя переубедить, да и не нужно.
Просто я обожаю задачи олимпиадные, и решаю на паскале. решал бы на си-ну работали бы побыстрее, не большое дело, надо - переведу. а сплит на асме прикольно смотреть. как приятно, что можно эту всю хренотень не писать а написать просто split :-)))))))))))))))
Номер ответа: 60
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #60
Добавлено: 27.04.05 09:28
2Sharp, ты несколько упростил алгоритм, разделитель может быть строкой, mov [ecx],0 - точно не сработает byte ptr указать забыл ;)
Кстати о однопроходности - размер MyStack неизвестен, чтобы кзнать, надо пройти разок перед тем как выделить на него память...

Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам