Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 27.05.2019, 10:54   #1
xwicked
Профессионал
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Адрес: Россия, г. Старый Оскол
Сообщений: 1,350
Репутация: 444

icq: 624801702
skype: labfreetech.org
Восклицание Размер программы assembler'a или какой мусор добавляют компиляторы других языков?

Приветствую!
Вот код программы ассемблера:
Код:
data    segment para public 'data'
message db 'Hello World! No war and bomb! Let us live fiendly and learn assembler language. $'
data    ends
stk segment stack
    db 256 dup ('?')
stk ends
code    segment para public 'code'
main    proc
    assume cs:code,ds:data,ss:stk
    mov ax,data
    mov ds,ax
    mov ah,9
    mov dx,offset message
    int 21h
    mov ax,4c00h
    int 21h
main    endp
code    ends
end main
А вот код программы C:
Код:
#include <stdio.h>
void main()
{
printf("Hello World! No war and bomb! Let us live fiendly and learn assembler language.");
scanf("%s");
}
Код ассемблера собирался Masm 6.11d, размер программы получился 821 байт. Код С собирал TurboC++ 3.5, размер программы получился 11,5 КБ, т.е. в 14,3 раза больше. Вопрос "Почему?".
Можно было бы предположить, что в код C добавляются все обработчики исключительных ситуаций или можно модифицировать программу дизассемблером и добавить вызов любой функции из модуля <stdio.h> и программа корректно вызовет его, но это не так, при добавлении до компиляции вызова ещё одной функции приведёт к большему увеличению размера ЕХЕшника.
В этой теме моя задача будет самостоятельно или с Вашей помощью выяснить это и проверить так ли хорошо компиляторы оптимизируют скорость, как многим людям внушили.

Про время разработки я ЗНАЮ, что долго, здесь это не обсуждается. Отписывайтесь по теме, пожалуйста.
__________________
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума   Ответить с цитированием
Старый 27.05.2019, 11:12   #2
Alex11223
Модератор
Заслуженный модератор
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 18,994
Репутация: 3738

icq: 512-765
skype: alexp.frl
По умолчанию

Так дизассемблируйте и посмотрите что в коде.
Alex11223 вне форума   Ответить с цитированием
Старый 27.05.2019, 11:55   #3
xwicked
Профессионал
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Адрес: Россия, г. Старый Оскол
Сообщений: 1,350
Репутация: 444

icq: 624801702
skype: labfreetech.org
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так дизассемблируйте и посмотрите что в коде.
На данном этапе изучения ассемблера это не представляется возможным. Просто когда все смеются и говорят "Не лезь, там всё оптимизировано!", то пусть также смеясь напишут, что оптимизировано. Я буду собирать аргументы и перепроверять. Конечно, если это им не сложно. Просто профессионалы не всегда охотно хотят помогать новичкам, но вдруг?
__________________
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума   Ответить с цитированием
Старый 27.05.2019, 11:56   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,681
Репутация: 2631
По умолчанию

Цитата:
Сообщение от xwicked Посмотреть сообщение
В этой теме моя задача будет самостоятельно или с Вашей помощью выяснить это и проверить так ли хорошо компиляторы оптимизируют скорость, как многим людям внушили.
Очень хорошо.

Цитата:
Сообщение от xwicked Посмотреть сообщение
Код ассемблера собирался Masm 6.11d, размер программы получился 821 байт. Код С собирал TurboC++ 3.5, размер программы получился 11,5 КБ, т.е. в 14,3 раза больше. Вопрос "Почему?".
А можно еще древнее компиляторы взять? Можно еще опции не указывать. Дебаг версию собирать и доп.инфу не стрипать. Можно еще забыть, что короче код не значит быстрее.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 27.05.2019, 11:58   #5
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,681
Репутация: 2631
По умолчанию

Цитата:
Сообщение от xwicked Посмотреть сообщение
Я буду собирать аргументы и перепроверять. Конечно, если это им не сложно.
Так вперед - есть https://godbolt.org/ и бенчмарк "от них". Есть диз.асм вкладка в ИДЕ.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 27.05.2019, 12:06   #6
xwicked
Профессионал
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Адрес: Россия, г. Старый Оскол
Сообщений: 1,350
Репутация: 444

icq: 624801702
skype: labfreetech.org
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А можно еще древнее компиляторы взять? Можно еще опции не указывать. Дебаг версию собирать и доп.инфу не стрипать. Можно еще забыть, что короче код не значит быстрее.
А что не так с компиляторами? Ты думаешь может взять 64 бита для изучения основ, чтобы окончательно запутаться в большом количестве кода? Я полагаю, что в 16-битном коде проще будет разобраться, когда программа не виндовая и нет вызовов к системным либам, которые весят 100500 тонн и анализ моего ассемблерного кода будет невозможен.
Про стрип я знаю. Просто не успел вчера сделать. Но опыт мне подсказывает, что стрип или релиз-версия уберут до 60%, то есть будет не в 14, а в 5 раз, но всё равно больше. Вечером сделаю и отпишусь.

Цитата:
Сообщение от p51x Посмотреть сообщение
Так вперед - есть https://godbolt.org/ и бенчмарк "от них". Есть диз.асм вкладка в ИДЕ.
Так не пойдёт. Мне нужно самому проверить, а не посмотреть на что-то готовое. В чьих-то бенчмарках может быть много мусора, как и в компиляторах. Я не знаю почему, просто предположение такое...
__________________
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook

Последний раз редактировалось xwicked; 27.05.2019 в 12:09.
xwicked вне форума   Ответить с цитированием
Старый 27.05.2019, 12:09   #7
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,681
Репутация: 2631
По умолчанию

Тогда принтф со сканфом не используйте. Кстати, где сканф вариант в вашем асме?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 27.05.2019, 12:14   #8
xwicked
Профессионал
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Адрес: Россия, г. Старый Оскол
Сообщений: 1,350
Репутация: 444

icq: 624801702
skype: labfreetech.org
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Тогда принтф со сканфом не используйте. Кстати, где сканф вариант в вашем асме?
Вот это хорошее замечание, исправлю. А printf почему не использовать, в С есть что-то более низкоуровневое?
__________________
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума   Ответить с цитированием
Старый 27.05.2019, 12:21   #9
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,681
Репутация: 2631
По умолчанию

Потому что принтф содержит форматную строку и ее разбор, даже в ИДЕ для микроконтроллеров есть опция использовать либу с полным принтфом, урезанным и без поддержки форматирования. И вы взялись сравнивать асм с С/С++?

Цитата:
в С есть что-то более низкоуровневое?
Например, cputs
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 27.05.2019, 12:26   #10
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,833
Репутация: 5617
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Тогда принтф со сканфом не используйте.
не знаю, но, имхо, какое-то ядро линкёр всё равно пристыкует.
у меня пустая программа
Код:
void main()
{
}
скомпилировалась в T6.OBJ размером 289 байт
и EXE получился размером 6036 байт.
после TDSTRIP.exe размер EXE получился 4256 байт
Serge_Bliznykov вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация других языков в Visual Basic pikachu_182 Помощь студентам 0 27.05.2012 16:11
Как компиляторы для языков программирования пишутся на самих себе? bullvinkle Свободное общение 29 19.03.2010 16:47
вместо номера телефона выводится на экран какой-то мусор le_den Общие вопросы C/C++ 2 25.11.2008 21:45
компиляторы и трансляторы PDP-10 FORTRAN, PDP-1 Assembler и PERL akimovster Assembler 2 24.07.2007 05:59


17:05.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.