Другие языки программирования и технологии
Сравнение языка Ассемблера и Си
Сравните системы целочисленных типов языка C (в 32-разрядной версии Microsoft Visual C)и ассемблера MASM. Какие типы присутствуют в обоих языках, какие только в одном из них? Каким образом язык C определяет знаковые и беззнаковые типы? Какими свойствами обладают такие типы данных? Какими свойствами наделяет стандарт С89 эти типы данных? Как Вы думаете, почему типы данных языка С определены именно таким образом?
1. В Ассемблере есть три типа: db - 1 байт; dw - 2 байта (точнее - машинное слово) ; dd - 4 байта (точнее, двойное машинное слово) . В Си аналогом первого типа можно считать тип char (его называют строковой переменной, но его так же вполне можно интерпретировать как число от 0 до 255, или от -128 до 127); аналог второго типа - изначально int, но в более поздних компиляторах int стал двойным машинным словом - т. е. 4 байта для современных машин; аналогом третьего типа был long, но для компиляторов, считающих int двойным машинным словом, эти два типа слились. Как видно, довольно сложно сказать, какие типы есть только в Ассемблере, какие - только в Си - все зависит от компилятора. Компилятор Си, указанный в вопросе, считает int двойным машинным словом, т. е. 4 байта, т. е. аналога типа dw (одинарное машинное слово) в этом компиляторе Си нет. Легко понять, что все меняется при рассмотрении 16-битных или 64-битных компиляторов.
2. Перед указателем типа переменной появляется идентификатор signed или unsigned - знаковое, или беззнаковое. Например - signeg char (как раз заставляет представлять однобайтовую переменную как число со знаком от -128 до 127), или unsigned long.
3. Очевидно, смещается диапазон: sined char - от -128 до 127, unsigned char - от 0 до 255; signed long - от -2147483648 до 2147483647.
4. Странный вопрос. Все описанное ранее - и есть ANSI C, или C89, так что трудно сказать, какими свойствами этот стандарт "наделил" типы данных. Да никакими. Он их (эти типы) узаконил, сделал стандартом, чтобы один и тот же код нормально обрабатывался разными компиляторами. Еще раз: все свойства типов переменных в Си, которые упоминались ранее - это и есть C89. Да и C99 их практически не изменил. Касательно типов переменных - стало разрешено объявлять массивы неопределенной длины.
5. Ну, я думаю, профессор на лекции вам объяснил свою точку зрения, и теперь хочет, чтобы Вы ее озвучили. У меня же угадать нет шансов. Они определены так, потому что, во-первых, их надо было как-то определить, во-вторых, Си, как и другие языки высокого уровня - потомки Ассемблера, и логично строить типы переменных, основываясь на тех, что были в Ассемблере (машинный код будет так же опрерировать регистрами процессора) ; в-третьих, все довольно логично, привычно и естественно.
2. Перед указателем типа переменной появляется идентификатор signed или unsigned - знаковое, или беззнаковое. Например - signeg char (как раз заставляет представлять однобайтовую переменную как число со знаком от -128 до 127), или unsigned long.
3. Очевидно, смещается диапазон: sined char - от -128 до 127, unsigned char - от 0 до 255; signed long - от -2147483648 до 2147483647.
4. Странный вопрос. Все описанное ранее - и есть ANSI C, или C89, так что трудно сказать, какими свойствами этот стандарт "наделил" типы данных. Да никакими. Он их (эти типы) узаконил, сделал стандартом, чтобы один и тот же код нормально обрабатывался разными компиляторами. Еще раз: все свойства типов переменных в Си, которые упоминались ранее - это и есть C89. Да и C99 их практически не изменил. Касательно типов переменных - стало разрешено объявлять массивы неопределенной длины.
5. Ну, я думаю, профессор на лекции вам объяснил свою точку зрения, и теперь хочет, чтобы Вы ее озвучили. У меня же угадать нет шансов. Они определены так, потому что, во-первых, их надо было как-то определить, во-вторых, Си, как и другие языки высокого уровня - потомки Ассемблера, и логично строить типы переменных, основываясь на тех, что были в Ассемблере (машинный код будет так же опрерировать регистрами процессора) ; в-третьих, все довольно логично, привычно и естественно.
Я знаю вот что: Ассемблер самый быстрый, но это бездушный машинный код, а С хоть понятный :D
Assembly низкоуровневый сам по себе, а CИ больше как то на "поверхности" плывет.
Похожие вопросы
- Какие преимущества сохранил Ассемблер к Си?
- Вопрос по изучению языка Ассемблера под MS DOS. (Нужны советы по программному обеспечению/программированию)
- Почему разновидностей языка ассемблера так много?
- Вопрос про язык ассемблера
- Что лучше ассемблер или Си ??
- Для программирования микроконтролеров кроме знания ассемблера или Си нужны знания радиоэлектроники?
- Говорят что ассемблер быстрее СИ в 1000 раз. Это скорость компиляции или использования???
- Помогите с написанием программы на языке Ассемблер, алгоритм знаю, вот только команды самого языка - не очень.
- Как школьнику самостоятельно изучить язык Ассемблера?
- На что способен язык Ассемблер? И есть ли у него какие нибудь ограничение?