Другие языки программирования и технологии

Сравнение языка Ассемблера и Си

Сравните системы целочисленных типов языка 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. Ну, я думаю, профессор на лекции вам объяснил свою точку зрения, и теперь хочет, чтобы Вы ее озвучили. У меня же угадать нет шансов. Они определены так, потому что, во-первых, их надо было как-то определить, во-вторых, Си, как и другие языки высокого уровня - потомки Ассемблера, и логично строить типы переменных, основываясь на тех, что были в Ассемблере (машинный код будет так же опрерировать регистрами процессора) ; в-третьих, все довольно логично, привычно и естественно.
АА
Александр Анатольевич
30 035
Лучший ответ
Я знаю вот что: Ассемблер самый быстрый, но это бездушный машинный код, а С хоть понятный :D
Assembly низкоуровневый сам по себе, а CИ больше как то на "поверхности" плывет.