Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 587
от 29.10.2006, 20:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 360, Экспертов: 32
В номере:Вопросов: 5, Ответов: 6


Вопрос № 59944: Здравствуйте, эксперты! 1) До сих пор программировал только на TASM'e и хотел бы узнать стоит ли осваивать MASM. Почему? 2) В чем преимущества и недостатки различных (tasm, nasm,goasm,masm и т.д.) ассемблеров. Есть ли разница на каком из ...
Вопрос № 59955: Здравствуйте, эксперты! 1) До сих пор программировал только на TASM'e и хотел бы узнать стоит ли осваивать MASM. Почему? 2) В чем преимущества и недостатки различных (tasm, nasm,goasm,masm и т.д.) ассемблеров. Есть ли разница на каком из ...
Вопрос № 59956: Всем привет! Я написал небольшую программу, которая выделяет память и считывает в память файл, а потом из памяти сливает считанные байты в другой файл. Но во втором файле получается совсем не то что нужно. Получается то что нужно только т...
Вопрос № 59960: Здравствуйте,все...! Вопрос по программированию AT89C2051: Как известно в данном микроконтроллере имеется два банка регистров общего назначения, первый это R0-R7 , а какие регистры у второго банка и как активизируется второй банк? Спаси...
Вопрос № 60043: Господа эксперты,я занимаюсь изучениаем Assembler'a по книге Калашникова,подскажите пожалуйста почему в программах используются для хранения данных и кода только регистры и область физической памяти (RAM),а где же так называемая КЭШ-память процессора...

Вопрос № 59.944
Здравствуйте, эксперты!
1) До сих пор программировал только на TASM'e и хотел бы узнать стоит ли осваивать MASM. Почему?
2) В чем преимущества и недостатки различных (tasm, nasm,goasm,masm и т.д.) ассемблеров.
Есть ли разница на каком из них программировать.
3) В МАСМ'e используются макросы, что преобразует читабельность кода до схожести с Си. Не сказывается ли это на оптимизации кода?
4) Также к плюсам МАСМА относят то, что он развивается, а ТАСМ нет. Что нового появляется в ассемблере, что необходимо его развитие?

Посоветуйте на каком ассемблере лучше программировать?

Заранее СПАСИБО.
Отправлен: 23.10.2006, 23:24
Вопрос задал: Patriotix-N (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Pinkbyte
Здравствуйте, Patriotix-N!

Вообще-то переходить на MASM стоит, потому что он развивается, вводится поддержка новых комманд процессора и т.п. Но если честно лучше учить FASM - проект новый и очень перспективный, синтаксис довольно простой. Поэтому если вы хотите забросить TASM - FASM по идее должен быть вашим выбором(я в свое время правда осовил MASM32 по хорошим туториалам Iczeliona, о чем не жалею). Только вот FASM лучше всего использовать под Win32, ибо я слышал, что под DOS там были заморочки. Насчет goasm не знаю ничего определенного, а NASM посоветую лишь извращенцам под Win32 - синтаксис там не приведи господь... NASM - идеальный вариант под Linux(если не единственный). Надеюсь я смог ответить на ваш вопрос...
---------
Нейтральность - высшее достижение сознания
Ответ отправил: Pinkbyte (статус: 3-ий класс)
Ответ отправлен: 25.10.2006, 11:33
Оценка за ответ: 5


Вопрос № 59.955
Здравствуйте, эксперты!
1) До сих пор программировал только на TASM'e и хотел бы узнать стоит ли осваивать MASM. Почему?
2) В чем преимущества и недостатки различных (tasm, nasm,goasm,masm и т.д.) ассемблеров.
Есть ли разница на каком из них программировать.
3) В МАСМ'e используются макросы, что преобразует читабельность кода до схожести с Си. Не сказывается ли это на оптимизации кода?
4) Также к плюсам МАСМА относят то, что он развивается, а ТАСМ нет. Что нового появляется в ассемблере, что необходимо его развитие?

Посоветуйте на каком ассемблере лучше программировать?
Какие ассемблеры бывают?
Заранее СПАСИБО.
Отправлен: 23.10.2006, 23:59
Вопрос задал: Patriotix-N (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Волков Павел Юрьевич
Здравствуйте, Patriotix-N!
1)
Все зависит от задач, которые необходимо решать.
Синтаксис у TASM и MASM схожи, если переходить, так только из-за инклудов, либ.

2)
Я писал в MASM,TASM,FASM и остановился на последнем.
Приемущества:
-многоплотформенность (есть версии для Windows, Linux, DOS, BSD, поддерживающие формат файлов ELF)
(формат выходных файлов: COFF,PE,ELF, для DOS :), драйвера (.sys))
-16,32,64-битный код.
-компактный (не содержит линковщика, необходимый формат выходного файла указывается в программе; для построения таблицы импорта не использует либ файлы)
-удобная система макросов, позволяет изменять макросы под себя, изменяя читабельность по-усмотрению.
-полный контроль над выходным файлом
(аттрибуты секций, порядок расположения кода, контроль до байта выходного файла, т.е. возможность "ручной" сборки)
-OpenSource, идет с исходниками.
-большая поддержка программистами (вопросы можно задать как на родном (англоязычном) форуме http://board.flatassembler.net/ так и на всем известном
http://www.wasm.ru/forum/index.php)
-постоянно развивается, последняя версия 1.67.12 от 10 October 2006.
Домашняя страница - http://flatassembler.net/.

Минусы:
-некоторые жалуются на недостаточную документацию. В составе версии для Windows есть краткая документация, на сайте тоже есть кое-какие доки, есть статьи на wasm.ru. Желательно владеть чтением англоязычных текстов.

3)
Для оценки потерь при использовании макросов скомпилируйте кусок без макросов и с ними.
Работу макросов в FASM можно посмотреть в сорцах :).

4)
Ассемблер как был для x86 так и осталься. Появляются 64-битные платформы, новые инструкции процессоров, изменяются библиотечные функции, структуры ОС. На эти изменения необходимо реагировать, добавлять инструкции, изменять обращение со структурами, функциями ОС.

5)
Какие ассемблеры бывают?
Недавно задавали этот вопрос, выяснилось :), что сейчас поддерживаются: masm32, fasm, goasm,nasm.

>Посоветуйте на каком ассемблере лучше программировать?
FASM.

Успехов.
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 8-ой класс)
Ответ отправлен: 24.10.2006, 08:21


Вопрос № 59.956
Всем привет! Я написал небольшую программу, которая выделяет память
и считывает в память файл, а потом из памяти сливает считанные байты
в другой файл. Но во втором файле получается совсем не то что нужно.
Получается то что нужно только тогда, когда трассирую в TD. Подскажите пожалуйста что это за трабл и как с ним бороться.

Приложение:

Отправлен: 24.10.2006, 00:02
Вопрос задал: Const (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Стас
Здравствуйте, Const!

_FileSize proc
mov ah, 42h
mov bx, [Handle]
mov dx, 0 ; на сколько продвинуть указатель
mov al, 2 ; перемещаемся к концу файла
int 21h
Здесь еще CX участвует, его тоже надо обнулить...
А возвращается размер в DX:AX, поэму хотябы вот это сделайте:
or dx,dx
jz ERRoverflow

mov ah, 3Fh ; читаем файл
mov bx, [Handle]
mov dx, zseg
mov cx, [FileSize]
int 21h
Куда это вы читаете файл? Считается в DS:DX то есть в ZSEG:ZSEG. А насколько а понял нужно в [BlockAddr]:0 т.е.:
push ds
mov bx, [Handle]
mov cx, [FileSize]
mov ax,[BlockAddr]
mov ds,ax
mov dx, 0
mov ah, 3Fh ; читаем файл
int 21h
pop ds
и соответственно далее в OpenFile2:

; write file
push ds
mov bx, [handle]
mov cx, [FileSize]
mov ax,[BlockAddr]
mov ds,ax
mov dx, 0
mov ah, 40h
int 21h
pop ds

И еще вместо конструкции:
call OutMessage
ret
используйте:
jmp OutMessage

Во первых меньше команд, во вторых и самое главное
OutMessage proc
pop cx
mov ah, 09h
в CX попадёт IP возврата (в случае с Call), а не номер сообщения.

Вообще, нафиг эти номера нужны?
push offset ErrSeekFileMsg
jmp OutMessage
или вообще:
lea dx,ErrSeekFileMsg
jmp OutMessage
и
mov ah, 09h
int 21h
stc; флаг что произошла ошибка, а то прога после ошибки продолжает работать как нив чем не бывало
ret
и обработка ошибки
call OpenFile
jc abort
call _FileSize
jc abort
call MemZip
jc abort
call GetMemory
jc abort
...
abort:
mov ax, 4C01h ;сообщить ДОС что была ошибка (не обязательно)
int 21h

Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 24.10.2006, 01:20
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо что помог!


Вопрос № 59.960
Здравствуйте,все...! Вопрос по программированию AT89C2051:
Как известно в данном микроконтроллере имеется два банка регистров общего назначения, первый это R0-R7 , а какие регистры у второго банка и как активизируется второй банк?

Спасибоmikrokomp...
Отправлен: 24.10.2006, 00:44
Вопрос задал: Peter Timm (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: ADSota
Здравствуйте, 1!

Именно с этим контроллером не работал, но по аналогии должно быть так:
За выбор текущего банка отвечают 2 бита из PSW:
RS1=PSW.4 RS0=PSW.3 Bank Addr
0 0 Bank0 0-7
0 1 Bank1 8-0fh
1 0 Bank2 10-17h
1 1 Bank3 18-1fh

---------
Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 24.10.2006, 09:27


Вопрос № 60.043
Господа эксперты,я занимаюсь изучениаем Assembler'a по книге Калашникова,подскажите пожалуйста почему в программах используются для хранения данных и кода только регистры и область физической памяти (RAM),а где же так называемая КЭШ-память процессора,почему её явно не используют,или я в чем-то ошибаюсь?
Отправлен: 24.10.2006, 16:38
Вопрос задал: DEVILL (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Луковкин Николай Иванович
Здравствуйте, DEVILL!
Кэш-память - это резервирование некоторой части ячеек оперативной памяти (RAM)для нужд конкретного устройства. Другие устройства не могут использовать зарезервированную область памяти. Проще говоря, это своего рода НЕПРИКОСНОВЕННЫЙ ЗАПАС.
Изменение объема кэш-памяти влияет на быстродействие операционной системы!
---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 3-ий класс)
Ответ отправлен: 24.10.2006, 22:14

Отвечает: Вiктор
Здравствуйте, DEVILL!
(отвечаю как сам знаю, может что и неправильно)
насклько я знаю, кеш-память процессора - это отдельные ячейки памяти в самом процессоре. Т.е. обычная память - в микросхемах на материнской плате, а кеш - сидит в самом процессоре.
процессор копирует в кеш те участки памяти, с которыми активно работает. Например, выполняемый код выполняется из кеша. А при переходах (если прыжок за пределы кеша) кеш очищается и заполняется по-новой, новым куском кода.
Я себе это представляю так: процессор - это студент. память - это учебник. кеш - это шпаргалка. "студент" пишет самое важное на "шпаргалку", потому что ей пользоваться быстрее. Ну а если надо что-то, чего в этой "шпаргалке" нет, то "студент" выкидывает старую, читает "учебник" и делает новую "шпаргалку".
насчёт уровней не знаю, но если судить по логике - чем выше уровень, тем меньше объём и тем выше скорость доступа, следовательно, туда запихивают самые критичные по скорости доступа данные.
Насколько я знаю, процессор сам управляет кешем. Хотя есть какие-то команды принудительной очистки кеша (типа far jump-ы).
---------
Флаг вам в руки! (sti, stc, etc)
Ответ отправил: Вiктор (статус: 7-ой класс)
Ответ отправлен: 24.10.2006, 23:30


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное