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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2019, 09:54   #1
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Восклицание Размер программы 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, 10:12   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так дизассемблируйте и посмотрите что в коде.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 27.05.2019, 10:55   #3
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

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

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

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

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

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

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

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

Тогда принтф со сканфом не используйте. Кстати, где сканф вариант в вашем асме?
p51x вне форума Ответить с цитированием
Старый 27.05.2019, 11:14   #8
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

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

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

Цитата:
в С есть что-то более низкоуровневое?
Например, cputs
p51x вне форума Ответить с цитированием
Старый 27.05.2019, 11:26   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

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


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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