OSDev

для всех
Текущее время: 13 ноя 2018, 07:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
СообщениеДобавлено: 01 дек 2007, 02:53 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1353
Откуда: Зеленоград
Chizh

Цитата:
Тогда комментарии будут перегружены технической информацией


Они для того и нужны, чтобы содержать техническую информацию. Не стихи же там писать? ;)

Цитата:
Именно из-за повышенной сложности программирования, я бы "думающим" транслятором не стал пренебрегать


А) Откуда повышенная сложность программирования? Чем она сложнее, чем 30 лет назад?
Б) И о чём же транслятор ассемблера должен думать?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 дек 2007, 01:38 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1070
Откуда: Балаково
Цитата:
А) Откуда повышенная сложность программирования? Чем она сложнее, чем 30 лет назад?
Б) И о чём же транслятор ассемблера должен думать?
//SII 1.12.2007, 02:53

Это я про сам Ассемблер, в том смысле, что программы на нём сложнее любого другого ЯП. Хоть 30 лет назад, хоть сейчас.

В идеале, из синтаксиса языка должно быть ясно видно (как программисту так и компилятору), что именно в конечном итоге вычисляется. В данном же виде строения программ, результатом работы каждой команды является лишь какие-то изменения каких-то регистров. Программист должен постоянно анализировать взаимосвязь изменений регистров, чтобы представить, что же в конечном итоге получится. При указании типа конечного результата, компилятор может проследить ход вычислений, и выявить например логическую целостность результата (например тип позврата процедуры dword, а код вычисляет и возвращает только byte, оставляя старшие биты неопределёнными), или например перед командой "div ebx" регистры eax и ebx содержат dword числа, а edx содержит float, ptr или null (т.е. ни какой явной загрузки значения в регистр не было), получится что называется type mismatch.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 дек 2007, 06:28 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1353
Откуда: Зеленоград
Chizh

Теоретически контроль типов (а не только размеров операндов) в ассемблере сделать можно, только вот пользоваться им никто не будет: кому нужна гора лишней писанины? Ведь, считай, чуть ли не на каждую загрузку регистра потребуется писать, что было загружено.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 дек 2007, 14:50 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1070
Откуда: Балаково
Нет, типы данных должны быть описаны лишь у входных и выходных параметров процедур (само декларирование типов в языке уже есть), а компилятор должен проследить всю цепочку обработки данных, все регистровые зависимости, и выдавать предупреждения такие же как в Си. Т.е. в общем даже не обязательно считать их фатальными ошибками, достаточно генерации предупреждений. Нормальные программисты и так интерпретируют предупреждения как потенциальные ошибки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 дек 2007, 16:48 

Зарегистрирован: 16 ноя 2007, 02:36
Сообщения: 27
Цитата:
Chizh

Теоретически контроль типов (а не только размеров операндов) в ассемблере сделать можно, только вот пользоваться им никто не будет: кому нужна гора лишней писанины? Ведь, считай, чуть ли не на каждую загрузку регистра потребуется писать, что было загружено.
//SII 2.12.2007, 06:28

Когда ещё карточки были, программисты читали не свой исходняк, а распечатку компилятора со всякой дополнительной инфой. Так вот, оболочка разработки может показывать что написанная команда фактически делает и (по требованию?) добавлять это в виде комментария. Заодно и типы показывать.

А вот как защититься от описок и ошибок типа "забыл об этом подумать"? Человек - в принципе не надёжен. Программисты получше, но и они... Качество кода как не повышай, а ошибки всё равно будут. Как найти ошибку приведшую к сбою произошедшему через несколько тысяч комманд?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 дек 2007, 18:17 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1353
Откуда: Зеленоград
Chizh

Про типы параметров подпрограмм и их контроль в процессе манипуляций с ними подумаю. Определённый смысл в этом есть. Хотя если это у меня и будет, то не сразу: ассемблер и без этого проживёт по понятным причинам :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 дек 2007, 02:04 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1070
Откуда: Балаково
Вот встретил описание параметров на практике. Уже почти то, что надо http://wasm.ru/article.php?article=green2red03
Код:
SEHHandler proc uses edx pExcept:DWORD, pFrame:DWORD, pContext:DWORD, pDispatch:DWORD
       mov edx,pFrame
 assume edx:ptr SEH
     mov eax,pContext
       assume eax:ptr CONTEXT
 push [edx].SafeOffset
  pop [eax].regEip
       push [edx].PrevEsp
     pop [eax].regEsp
       push [edx].PrevEbp
     pop [eax].regEbp
       invoke MessageBox,0,offset seh,offset seh,0
    mov eax,ExceptionContinueExecution
     ret
SEHHandler endp

Синтаксис подразумевает и объявление локальных (стековых) переменных, только они здесь на используются. Интересно, из местных профи кто-нибудь так процедуры описывает?

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 дек 2007, 09:53 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1353
Откуда: Зеленоград
Chizh

В этом примере нет описания типов параметров, есть только указание на их размер, и ничего более.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 дек 2007, 16:46 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1070
Откуда: Балаково
Ну, будем считать их примитивными типами :) Размер тоже к типу относится, поскольку требует применения разнотипных ассемблерных инструкций.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 дек 2007, 17:30 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1353
Откуда: Зеленоград
Chizh

Размер-то я точно контролировать буду ;) Я насчёт типизации в смысле ЯВУ очень не уверен, хотя на досуге подумаю.

Кстати, время вроде стало появляться -- возобновил ковыряние в асме (а ведь писать его начал почти месяц назад, ещё 4 ноября). Пока вспоминаю, что успел наковырять :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу Пред.  1, 2, 3, 4, 5

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB