<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Архитектура компьютера</title>
	<atom:link href="http://itblock.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://itblock.ru</link>
	<description></description>
	<lastBuildDate>Tue, 12 May 2009 17:12:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Расширение кода операций</title>
		<link>http://itblock.ru/uank/282</link>
		<comments>http://itblock.ru/uank/282#comments</comments>
		<pubDate>Tue, 12 May 2009 17:12:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[код операции]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=282</guid>
		<description><![CDATA[В предыдущем подразделе мы увидели, что короткие адреса препятствуют удачной дискретности памяти. В этом разделе мы рассмотрим компромиссы, связанные с кодами операций и адресами. Рассмотрим команду размером п + k бит с кодом операции в k бит и одним адресом в п бит. Такая команда допускает 2k различных операций и 2п адресуемых ячеек памяти. В [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">В предыдущем подразделе мы увидели, что короткие адреса препятствуют удачной дискретности памяти. В этом разделе мы рассмотрим компромиссы, связанные с кодами операций и адресами. Рассмотрим команду размером <em>п + k </em>бит с кодом операции в <em>k </em>бит и одним адресом в <em>п </em>бит. Такая команда допускает <em>2<sup>k</sup> </em>различных операций и <em>2<sup>п</sup> </em>адресуемых ячеек памяти. В качестве альтернативы те же <em>п + k </em>бит можно разбить на код операции в <em>k &#8211; </em>1 бит и адрес в <span class="font2"><strong>/2</strong></span>+1 бит. При этом будет либо в два раза меньше команд, но в два раза больше памяти, либо то же количество памяти, но дискретность вдвое выше. Код операции в <em>k </em>+ 1 бит и адрес в <em>п &#8211; </em>1 бит дает большее количество операций, но ценой этого является либо меньшее количество ячеек памяти, либо не очень удачная дискретность при том же объеме памяти. Наряду с подобными простыми компромиссами между битами кода операции и битами адреса существуют и более сложные. Обсуждаемый здесь механизм называется <strong>расширением кода операций.</strong></span></p>
<p><span class="font3">Понятие расширения кода операций можно пояснить на примере. Рассмотрим машину, в которой длина команд составляет 16 бит, а длина адресов — 4 бита, как показано на рис. 5.8. Это вполне разумно для машины, содержащей 16 регистров (а следовательно, 4-разрядный адрес регистра), с которыми совершаются все арифметические операции. Один из возможных вариантов — включение в каждую команду 4-разрядного кода операции и трех адресов, что дает 16 трехадресных команд.<span id="more-282"></span></span></p>
<p style="text-align: center;"><img class="aligncenter" style="width: 309.72pt; height: 85.68pt;" src="/images/uanc/Untitled0-9.png" alt="" /></p>
<p><span class="font3">Если разработчикам нужно 15 трехадресных команд, 14 двухадресных команд, 31 одноадресная команда и 16 безадресных команд, они могут использовать коды операций от 0 до 14 в качестве трехадресных команд, а код операции 15 уже интерпретировать по-другому (рис. 5.9).</span></p>
<p style="text-align: center;"><img class="aligncenter" style="width: 320.28pt; height: 495pt;" src="/images/uanc/Untitled0-10.png" alt="" /></p>
<p><span class="font3">Это значит, что код операции 15 содержится в битах с 8-го по 15-й, а не с 12-го по 15-й. Биты с 0-го по 3-й и с 4-го по 7-й, как и раньше, формируют два адреса. Все 14 двухадресных команд содержат число 1111 в старших четырех битах</span></p>
<p><span class="font3">и числа от 0000 до 1101 в битах с 8-го по 11-й. Команды с числом 1111 в старших четырех битах и числом 1110 или 1111 в битах с 8-го по 11-й рассматриваются особо. Они трактуются так, как будто их коды операций находятся в битах с 4-го по 15-й. В результате получаем 32 новых кода операций. А поскольку требуется всего 31 код, то код 111111111111 означает, что действительный код операции находится в битах с 0-го по 15-й, что дает 16 безадресных команд.</span></p>
<p><span class="font3">Как видим, код операции становится все длиннее и длиннее: трехадресные команды имеют 4-разрядный код операции, двухадресные команды — 8-разрядный, одноадресные команды — 12-разрядный, а безадресные команды — 16-разрядный.</span></p>
<p><span class="font3">Идея расширения кода операций наглядно демонстрирует компромисс между пространством для кодов операций и пространством для другой информации. Однако на практике все не так просто и понятно, как в нашем примере. Есть только два способа изменения размера кода операций. С одной стороны, можно иметь все команды одинаковой длины, приписывая самые короткие коды операций тем командам, которым нужно больше всего битов для спецификации чего-либо другого. С другой стороны, можно свести к минимуму <em>средний </em>размер команды, если выбрать самые короткие коды операций для часто используемых команд и самые длинные — для редко используемых.</span></p>
<p><span class="font3">Если довести эту идею до конца, можно свести к минимуму среднюю длину команды, закодировав каждую команду, чтобы максимально уменьшить число требуемых битов. К сожалению, это ведет к наличию команд разных размеров, причем не выровненных в границах байтов. Пока существуют архитектуры команд с таким свойством (например, Intel 432), выравнивание будет иметь большое значение для быстрого декодирования команд. Тем не менее, эта идея часто применяется на уровне байтов. Далее мы рассмотрим архитектуру JVM-команд, чтобы показать, как можно менять форматы команд, чтобы максимально уменьшить размер программы.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/282/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Критерии разработки форматов команд</title>
		<link>http://itblock.ru/uank/279</link>
		<comments>http://itblock.ru/uank/279#comments</comments>
		<pubDate>Tue, 12 May 2009 17:07:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[CDC]]></category>
		<category><![CDATA[Cyber]]></category>
		<category><![CDATA[IJVM]]></category>
		<category><![CDATA[UltraSPARC III]]></category>
		<category><![CDATA[ОЗУ]]></category>
		<category><![CDATA[ПЗУ]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=279</guid>
		<description><![CDATA[Если разработчикам нужно выбрать форматы команд для их машины, они должны принять во внимание ряд факторов. Нельзя недооценивать сложность этого
решения. Если компьютер с коммерческой точки зрения получается удачным, набор команд может существовать на протяжении 20 лет и более. Имеет огромное значение возможность на протяжении некоторого времени добавлять новые команды и другие элементы, но только в [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">Если разработчикам нужно выбрать форматы команд для их машины, они должны принять во внимание ряд факторов. Нельзя недооценивать сложность этого</span></p>
<p><span class="font3">решения. Если компьютер с коммерческой точки зрения получается удачным, набор команд может существовать на протяжении 20 лет и более. Имеет огромное значение возможность на протяжении некоторого времени добавлять новые команды и другие элементы, но только в том случае, если архитектура (и компания, создавшая эту архитектуру) протянет достаточно долго.</span></p>
<p><span class="font3">Эффективность конкретной архитектуры команд зависит от технологии, которая применялась при разработке компьютера. За длительный период времени эта технология значительно изменится, и некоторые характеристики архитектуры команд окажутся (если оглянуться лет на 20 назад) неудачными. Например, если доступ к памяти осуществляется быстро, то подойдет стековая архитектура (как в IJVM), но если доступ к памяти медленный, тогда желательно иметь множество регистров (как в UltraSPARC III). Тем читателям, которые считают, что выбор сделать просто, мы предлагаем взять лист бумаги и записать следующие предположения:<span id="more-279"></span></span></p>
<p><span class="font3">♦ Какова будет типичная частота тактового генератора через 20 лет?</span></p>
<p><span class="font3">♦ Каково будет типичное время доступа к ОЗУ через 20 лет?</span></p>
<p><span class="font3">Аккуратно сложите этот лист бумаги и спрячьте его в надежном месте, а через 20 лет разверните и прочитайте, что на нем написано. Те из вас, кто принял этот вызов, могут, чтобы не пачкать бумагу, выставить свои пророчества в Интернете.</span></p>
<p><span class="font3">Даже дальновидные разработчики не всегда могут сделать правильный выбор. А если бы и смогли, то проработали бы недолго, поскольку если предлагаемая ими архитектура команд окажется дороже, чем у конкурентов, компания долго не продержится.</span></p>
<p><span class="font3">Если речь идет об одинаковых машинах, то лучше иметь короткие команды, чем длинные. Программа, состоящая из <em>п </em>16-разрядных команд, занимает в два раза меньше пространства памяти, чем программа из <em>п </em>32-разрядных. Поскольку цены на память постоянно падают, этот фактор не имел бы значения в будущем, но, к сожалению, программное обеспечение разрастается гораздо быстрее, чем снижаются цены.</span></p>
<p><span class="font3">Более того, минимизация размера команд может усложнить их декодирование и перекрытие. Следовательно, стремление уменьшить размер команд должно уравновешиваться стремлением сократить время их декодирования и выполнения.</span></p>
<p><span class="font3">Есть еще одна очень важная причина минимизации длины команд, и она становится все важнее с увеличением скорости работы процессоров: пропускная способность памяти (число битов в секунду, которое память может предоставлять). Значительное повышение быстродействия процессоров за последнее десятилетие не соответствует увеличению пропускной способности памяти. Ограничения здесь связаны с неспособностью системы памяти передавать команды и операнды с той же скоростью, с которой процессор может их обрабатывать. Пропускная способность памяти зависит от технологии разработки. Встречаемые на этом пути трудности имеют отношение не только к основной памяти, но и ко всем видам кэш-памяти.</span></p>
<p><span class="font3">Если пропускная способность кэш-памяти команд составляет <em>t </em>бит/с, а средняя длина команды — r<em> </em>бит, то кэш-память способна передавать самое большее</span></p>
<p><span class="font3"><em>t/r </em>команд в секунду. Отметим, что это — <em>верхний предел </em>скорости, с которой процессор может выполнять команды, хотя в настоящее время предпринимаются попытки преодолеть данный барьер. Ясно, что скорость, с которой могут выполняться команды (то есть быстродействие процессора), может ограничиваться длиной команд. Чем короче команды, тем быстрее работает процессор. Поскольку современные процессоры способны выполнять несколько команд за один цикл, то вызов нескольких команд за цикл обязателен. Этот аспект применения кэш-памяти команд делает размер команд важным критерием, который нужно учитывать при разработке.</span></p>
<p><span class="font3">Еще один критерий — достаточный объем пространства в формате команды для представления всех требуемых операндов. Машина, поддерживающая <em>2<sup>п </sup></em>операций и длину команды менее <em>п </em>бит, невозможна. В этом случае в коде операции было бы недостаточно места для того, чтобы указать, какая нужна команда. К тому же история снова и снова доказывает, что обязательно нужно оставлять большое количество свободных кодов операций для будущих дополнений набора команд.</span></p>
<p><span class="font3">Третий критерий связан с числом битов в адресном поле. Рассмотрим проект машины с 8-разрядными символами и основной памятью, которая должна содержать 2<sup>32</sup> символов. Разработчики вольны были приписать последовательные адреса блокам по 8, 16, 24 или 32 бита.</span></p>
<p><span class="font3">Представим, что бы случилось, если бы команда разработчиков разбилась на две воюющие группы, одна из которых утверждает, что основной единицей памяти должен быть 8-разрядный байт, а другая требует, чтобы основной единицей памяти было 32-разрядное слово. Первая группа предложила бы память из 2<sup>32</sup> байт с номерами 0, 1, 2, 3,4 294 967 295. Вторая группа предложила бы память из 2<sup>30</sup> слов с номерами 0, 1, 2, 3,    1 073 741 823.</span></p>
<p><span class="font3">Первая группа скажет, что для того, чтобы сравнить два символа при организации по 32-разрядным словам, программе приходится не только вызывать из памяти слова, содержащие эти символы, но и выделять соответствующий символ из каждого слова для сравнения. А это потребует дополнительных команд и, следовательно, дополнительного пространства. 8-разрядная организация, напротив, обеспечивает адресацию каждого символа, что значительно упрощает процедуру сравнения.</span></p>
<p><span class="font3">Сторонники 32-разрядной организации скажут, что их проект требует всего лишь 2<sup>30</sup> отдельных адресов, что дает длину адреса всего 30 бит, тогда как при 8-разрядной организации требуется целых 32 бита для обращения к той же самой памяти. Если адрес короткий, то и команда будет более короткой. Она займет меньше пространства в памяти, и к тому же для ее вызова потребуется меньше времени. В качестве альтернативы они могут сохранить 32-разрядный адрес для обращения к памяти в 16 Гбайт вместо каких-то там 4 Гбайт.</span></p>
<p><span class="font3">Этот пример демонстрирует, что для получения оптимальной дискретности памяти требуются более длинные адреса и, следовательно, более длинные команды. Одна крайность — это организация памяти, при которой адресуется каждый бит (например, Burroughs В1700). Другая крайность — это память, состоящая из очень длинных слов (например, серия CDC Cyber содержала 60-разрядные слова).</span></p>
<p><span class="font3">Современные компьютерные системы пришли к компромиссу, который, в каком-то смысле, объединил в себе худшие качества обоих вариантов. Они требуют, чтобы адреса были у отдельных байтов, но при обращении к памяти всегда считываются одно, два, а иногда даже четыре слова сразу. В результате считывания одного байта из памяти на машине UltraSPARC III единовременно вызываются минимум 16 байт (см. рис. 3.44), а иногда и вся строка кэш-памяти размером 64 байта.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/279/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Форматы команд</title>
		<link>http://itblock.ru/uank/276</link>
		<comments>http://itblock.ru/uank/276#comments</comments>
		<pubDate>Tue, 12 May 2009 16:53:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[Форматы команд]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=276</guid>
		<description><![CDATA[Команда состоит из кода операции и некоторой дополнительной информации, позволяющей узнать, например, откуда поступают операнды и куда должны отправляться результаты. Процесс определения, где находятся операнды (то есть их адреса), называется адресацией.
На рис. 5.6 показано несколько возможных форматов команд уровня архитектуры набора команд. Команды всегда содержат код операции. В команде могут присутствовать ни одного, один, два [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">Команда состоит из кода операции и некоторой дополнительной информации, позволяющей узнать, например, откуда поступают операнды и куда должны отправляться результаты. Процесс определения, где находятся операнды (то есть их адреса), называется <strong>адресацией.</strong></span></p>
<p><span class="font3">На рис. 5.6 показано несколько возможных форматов команд уровня архитектуры набора команд. Команды всегда содержат код операции. В команде могут присутствовать ни одного, один, два или три адреса.<span id="more-276"></span></span></p>
<p style="text-align: center;"><img class="aligncenter" style="width: 362.16pt; height: 150.96pt;" src="/images/uanc/Untitled0-7.png" alt="" /></p>
<p><span class="font3">В одних машинах все команды но длине одинаковы, в других могут быть разными. Кроме того, команды по длине могут быть короче слова, длиннее слова или быть равными слову. Если все команды одной длины, то это упрощает декодирование, но часто требует излишнего пространства, поскольку все команды должны быть такой же длины, как самая длинная. На рис. 5.7 показано несколько возможных соотношений между размерами команды и слова.</span></p>
<p style="text-align: center;"><img class="aligncenter" style="width: 371.88pt; height: 109.32pt;" src="/images/uanc/Untitled0-8.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/276/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Типы данных 8051</title>
		<link>http://itblock.ru/uank/274</link>
		<comments>http://itblock.ru/uank/274#comments</comments>
		<pubDate>Tue, 12 May 2009 16:33:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[микросхема 8051]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=274</guid>
		<description><![CDATA[Количество типов данных в микросхеме 8051 строго ограничено. Разрядность всех регистров, а значит, целых чисел и символов, составляет 8 бит. По существу, единственным типом данных для выполнения арифметических операций, который поддерживается аппаратно, является 8-разрядный байт (табл. 5.4).

Кроме того, 8051 поддерживает еще один тип данных, который не используется при выполнении арифметических операций, — бит. Блок из [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">Количество типов данных в микросхеме 8051 строго ограничено. Разрядность всех регистров, а значит, целых чисел и символов, составляет 8 бит. По существу, единственным типом данных для выполнения арифметических операций, который поддерживается аппаратно, является 8-разрядный байт (табл. 5.4).</span></p>
<p style="text-align: center;"><img class="aligncenter" style="width: 380.28pt; height: 125.4pt;" src="/images/uanc/Untitled0-6.png" alt="" /></p>
<p><span class="font3"><span id="more-274"></span>Кроме того, 8051 поддерживает еще один тип данных, который не используется при выполнении арифметических операций, — бит. Блок из 16 байт, начинающийся с адреса 32, являет собой память с битовой ориентацией. Путем смещения от 0 до 127 можно обращаться индивидуально к каждому биту. Бит 0 занимает в байте 32 крайнее правое положение, бит 1 расположен сразу за ним, и т. д. Для битов предусмотрены команды установки, сброса, выполнения операций И и ИЛИ, образования дополнения, перехода к битам и проверки. Во встроенных системах состояния переключателей, световых индикаторов и других устройств ввода-вывода сохраняются именно в отдельных битах, поэтому возможность непосредственного управления ими очень важна.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/274/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Типы данных машины UltraSPARC III</title>
		<link>http://itblock.ru/uank/271</link>
		<comments>http://itblock.ru/uank/271#comments</comments>
		<pubDate>Tue, 12 May 2009 16:18:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[UltraSPARC]]></category>
		<category><![CDATA[UltraSPARC III]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=271</guid>
		<description><![CDATA[UltraSPARC III поддерживает множество форматов данных (табл. 5.3). Эта машина может обрабатывать 8-, 16-, 32- и 64-разрядные целочисленные операнды со знаком и без знака. Целые числа со знаком представлены в дополнительном коде. Кроме того, имеются операнды с плавающей точкой по 32, 64 и 128 бит, которые соответствуют стандарту IEEE 754 (для 32- и 64-разрядных чисел). [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">UltraSPARC III поддерживает множество форматов данных (табл. 5.3). Эта машина может обрабатывать 8-, 16-, 32- и 64-разрядные целочисленные операнды со знаком и без знака. Целые числа со знаком представлены в дополнительном коде. Кроме того, имеются операнды с плавающей точкой по 32, 64 и 128 бит, которые соответствуют стандарту IEEE 754 (для 32- и 64-разрядных чисел). Двоично-десятичные числа не поддерживаются. Все операнды должны быть выровнены в памяти.</span></p>
<p style="text-align: center;"><img class="aligncenter" style="width: 381.36pt; height: 126.48pt;" src="/images/uanc/Untitled0-5.png" alt="" /></p>
<p><span class="font3"><span id="more-271"></span>UltraSPARC III имеет регистровую структуру, и почти все команды оперируют 64-разрядными регистрами. Символьные и строковые типы данных специальными командами аппаратного обеспечения не поддерживаются.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/271/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Типы данных процессора Pentium 4</title>
		<link>http://itblock.ru/uank/268</link>
		<comments>http://itblock.ru/uank/268#comments</comments>
		<pubDate>Tue, 12 May 2009 16:08:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[ASCII]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[Pentium 4]]></category>
		<category><![CDATA[Процессор]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=268</guid>
		<description><![CDATA[Pentium 4 поддерживает двоичные целые числа со знаком, целые числа без знака, числа двоично-десятичной системы счисления и числа с плавающей точкой по стандарту IEEE 754 (табл. 5.2). Эта машина является 8/16-разрядной и оперирует целыми числами такой же длины. Она поддерживает многочисленные арифметические команды, булевы операции и операции сравнения. Операнды не обязательно должны быть выровнены в [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">Pentium 4 поддерживает двоичные целые числа со знаком, целые числа без знака, числа двоично-десятичной системы счисления и числа с плавающей точкой по стандарту IEEE 754 (табл. 5.2). Эта машина является 8/16-разрядной и оперирует целыми числами такой же длины. Она поддерживает многочисленные арифметические команды, булевы операции и операции сравнения. Операнды не обязательно должны быть выровнены в памяти, но если адреса слов кратны значению 4 байта, имеет место более высокая производительность.<span id="more-268"></span></span></p>
<p style="text-align: center;"><img class="aligncenter" style="width: 382.44pt; height: 127.44pt;" src="/images/uanc/Untitled0-4.png" alt="" /></p>
<p><span class="font3">Pentium 4 также может манипулировать 8-разрядными ASCII-символами: существуют специальные команды для копирования и поиска строк символов. Эти команды используются и для строк, длина которых известна заранее, и для строк, в конце которых стоит специальный терминальный символ. Строковые команды часто объединяются в библиотеки.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/268/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Нечисловые типы данных</title>
		<link>http://itblock.ru/uank/265</link>
		<comments>http://itblock.ru/uank/265#comments</comments>
		<pubDate>Tue, 12 May 2009 16:04:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[ASCII]]></category>
		<category><![CDATA[CPP]]></category>
		<category><![CDATA[JMPC]]></category>
		<category><![CDATA[LV]]></category>
		<category><![CDATA[Mic-x]]></category>
		<category><![CDATA[SP]]></category>
		<category><![CDATA[UNICODE]]></category>
		<category><![CDATA[битовая карта]]></category>
		<category><![CDATA[битовое отображение]]></category>
		<category><![CDATA[Нечисловые типы данных]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=265</guid>
		<description><![CDATA[Хотя самые первые компьютеры работали в основном с числами, современные машины часто используются для выполнения нечисловых приложений, например, для обработки текстов или управления базами данных. Для этих приложений нужны другие, нечисловые, типы данных. Они часто поддерживаются командами уровня архитектуры набора команд. Здесь очень важны символы, хотя не каждый компьютер обеспечивает аппаратную поддержку для них. Наиболее [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">Хотя самые первые компьютеры работали в основном с числами, современные машины часто используются для выполнения нечисловых приложений, например, для обработки текстов или управления базами данных. Для этих приложений нужны другие, нечисловые, типы данных. Они часто поддерживаются командами уровня архитектуры набора команд. Здесь очень важны символы, хотя не каждый компьютер обеспечивает аппаратную поддержку для них. Наиболее распространенными символьными кодами являются ASCII и UNICODE. Они поддерживают 7-разрядные и 16-разрядные символы соответственно. Эти коды обсуждались в главе 2.</span></p>
<p><span class="font3">На уровне архитектуры набора команд часто имеются особые команды, предназначенные для операций со строками. Эти строки иногда разграничиваются специальным символом в конце. Вместо терминального символа для определения конца строки может использоваться поле длины строки. Строковые команды позволяют выполнять копирование, поиск и редактирование строк, а также другие действия.<span id="more-265"></span></span></p>
<p><span class="font3">К нечисловым относится также очень важный логический тип данных, содержащий булевы значения. Этих значений два: истина и ложь. Теоретически булево значение можно представлять единственным битом: 0 — ложь, 1 — истина (или наоборот). На практике же используется байт или слово, поскольку отдельные биты в байте не имеют собственных адресов и, следовательно, к ним трудно обращаться. В обычных системах применяется следующее соглашение: 0 означает ложь, а любое другое значение — истину.</span></p>
<p><span class="font3">Единственная ситуация, в которой булево значение представлено одним битом — это массив битов, поэтому 32-разрядное слово может содержать 32 булевых значения. Такая структура данных называется <strong>битовым отображением, </strong>или</span></p>
<p><span class="font3"><strong>битовой картой. </strong>Битовое отображение встречается в различных контекстах, например, оно позволяет отслеживать свободные блоки на диске — в этом случае каждый быт отображает состояние каждого блока. Если диск содержит <em>п </em>блоков, тогда битовое отображение будет содержать <em>п </em>бит.</span></p>
<p><span class="font3">Последний тип данных — это указатели, которые представляют собой машинные адреса. Мы уже неоднократно рассматривали указатели. В машинах Mic-x регистры SP, PC, LV и СРР — это примеры указателей. Доступ к переменной на фиксированном расстоянии от указателя (а именно так работает команда IL0AD) широко поддерживается всеми машинами.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/265/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Числовые типы данных</title>
		<link>http://itblock.ru/uank/263</link>
		<comments>http://itblock.ru/uank/263#comments</comments>
		<pubDate>Tue, 12 May 2009 16:01:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[Числовые типы данных]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=263</guid>
		<description><![CDATA[Типы данных можно разделить на две категории: числовые и нечисловые. Среди числовых типов данных главными являются целые числа. Они бывают различной длины: обычно 8, 16, 32 и 64 бита. Целые числа применяются для подсчета различных предметов (например, позволяют узнать, сколько на складе отверток), для идентификации различных объектов (например, банковских счетов), а также для других целей. [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">Типы данных можно разделить на две категории: числовые и нечисловые. Среди числовых типов данных главными являются целые числа. Они бывают различной длины: обычно 8, 16, 32 и 64 бита. Целые числа применяются для подсчета различных предметов (например, позволяют узнать, сколько на складе отверток), для идентификации различных объектов (например, банковских счетов), а также для других целей. В большинстве современных компьютеров целые числа хранятся в двоичном виде, хотя в прошлом использовались и другие системы. Двоичные числа обсуждаются в приложении А.</span></p>
<p><span class="font3">Некоторые компьютеры поддерживают целые числа и со знаком, и без знака. В целом числе без знака нет знакового бита, и все биты содержат данные. Этот тип данных имеет преимущество: у него есть дополнительный бит, поэтому 32-разрядное слово может содержать целое число без знака от 0 до 2<sup>32</sup>-1 включительно. Двоичное целое число со знаком, напротив, может содержать числа только до 2<sup>31</sup>-1, но зато включает и отрицательные числа.<span id="more-263"></span></span></p>
<p><span class="font3">Для выражения нецелых чисел (например, 3,5) используются числа с плавающей точкой. О них рассказывается в приложении Б. Их длина составляет 32, 64, а иногда и 128 бит. В большинстве компьютеров есть команды для выполнения операций с числами с плавающей точкой. Во многих компьютерах имеются отдельные регистры для целочисленных операндов и для операндов с плавающей точкой.</span></p>
<p><span class="font3">Некоторые языки программирования, в частности COBOL, допускают в качестве типа данных указывать десятичные числа. Машины, предназначенные для программ на языке COBOL, часто поддерживают десятичные числа аппаратно, обычно кодируя десятичный разряд четырьмя битами и затем объединяя два десятичных разряда в байт (двоично-десятичный формат). Однако результаты арифметических действий над такими десятичными числами будут некорректны, поэтому требуются специальные команды для коррекции десятичной арифметики. Эти команды должны контролировать перенос бита 3. Вот почему код условия часто содержит бит служебного переноса. Между прочим, проблема 2000 года возникла из-за программистов, пишущих на языке COBOL, которые решили, что дешевле представлять год в виде двух десятичных разрядов, а не в виде 16-разрядного двоичного числа.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/263/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Типы данных</title>
		<link>http://itblock.ru/uank/261</link>
		<comments>http://itblock.ru/uank/261#comments</comments>
		<pubDate>Tue, 12 May 2009 15:59:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[Типы данных]]></category>
		<category><![CDATA[числа удвоенной точности]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=261</guid>
		<description><![CDATA[Всем компьютерам нужны данные. Для многих компьютерных систем основной задачей является обработка финансовых, промышленных, научных, технических и других данных. Внутри компьютера данные должны быть представлены в ка-
кой-либо особой форме. На уровне архитектуры набора команд используются различные типы данных. Они описаны в этом разделе.
Ключевым вопросом является вопрос о том, имеется ли аппаратная поддержка того или иного [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">Всем компьютерам нужны данные. Для многих компьютерных систем основной задачей является обработка финансовых, промышленных, научных, технических и других данных. Внутри компьютера данные должны быть представлены в ка-</span></p>
<p><span class="font3">кой-либо особой форме. На уровне архитектуры набора команд используются различные типы данных. Они описаны в этом разделе.</span></p>
<p><span class="font3">Ключевым вопросом является вопрос о том, имеется ли аппаратная поддержка того или иного типа данных. Под аппаратной поддержкой подразумевается, что одна или несколько команд ожидают данные в определенном формате, и пользователь не может задействовать другой формат. Например, бухгалтеры привыкли писать знак «минус» у отрицательных чисел справа, а специалисты по вычислительной технике — слева. Предположим, что, пытаясь произвести впечатление на своего начальника, глава компьютерного центра в бухгалтерской фирме изменил все числа во всех компьютерах, чтобы знаковый бит был самым правым (а не самым левым). Несомненно, это произведет большое впечатление на начальника, поскольку все программное обеспечение откажется нормально функционировать. Аппаратное обеспечение требует определенного формата для целых чисел и не перестанет работать должным образом, если целые числа поступят в другом формате.<span id="more-261"></span></span></p>
<p><span class="font3">Теперь рассмотрим другую бухгалтерскую фирму, только что заключившую договор на проверку федерального долга (размера задолженности правительства США всем контрагентам). 32-разрядная арифметика здесь не подойдет, поскольку числа превышают значение 2<sup>32</sup> (около четырех миллиардов). Одно из возможных решений — использовать два 32-разрядных целых числа для представления каждого числа, то есть все 64 бита. Если машина не поддерживает такие <strong>числа удвоенной точности, </strong>все арифметические операции над ними должны выполняться программно, то есть эти две части могут располагаться в памяти в произвольном порядке, поскольку для аппаратного обеспечения это не важно. Это — пример типа данных без аппаратной поддержки и, следовательно, без аппаратной реализации. В следующих подразделах мы рассмотрим типы данных, которые поддерживаются аппаратно и для которых требуются специальные форматы.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/261/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Обзор уровня архитектуры набора команд микросхемы 8051</title>
		<link>http://itblock.ru/uank/254</link>
		<comments>http://itblock.ru/uank/254#comments</comments>
		<pubDate>Tue, 12 May 2009 15:51:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Уровень архитектуры набора команд]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[Pentium 4]]></category>
		<category><![CDATA[TCON]]></category>
		<category><![CDATA[TMOD]]></category>
		<category><![CDATA[UltraSPARC III]]></category>
		<category><![CDATA[архитектура набора команд]]></category>
		<category><![CDATA[микросхема 8051]]></category>
		<category><![CDATA[ОЗУ]]></category>
		<category><![CDATA[ПЗУ]]></category>

		<guid isPermaLink="false">http://itblock.ru/?p=254</guid>
		<description><![CDATA[В качестве третьего примера мы традиционно рассматриваем микросхему 8051. В отличие от процессоров Pentium 4 (которые в основном используются в настольных компьютерах и серверных фермах) и UltraSPARC III (которые по большей части устанавливаются в крупных серверных, особенно мультипроцессорных, системах), микросхемы 8051 обычно встраиваются в бытовые устройства (от уличных светофоров до будильников) для обработки сигналов от [...]]]></description>
			<content:encoded><![CDATA[<p><span class="font3">В качестве третьего примера мы традиционно рассматриваем микросхему 8051. В отличие от процессоров Pentium 4 (которые в основном используются в настольных компьютерах и серверных фермах) и UltraSPARC III (которые по большей части устанавливаются в крупных серверных, особенно мультипроцессорных, системах), микросхемы 8051 обычно встраиваются в бытовые устройства (от уличных светофоров до будильников) для обработки сигналов от кнопок, световых индикаторов и других элементов пользовательского интерфейса. История этого процессора довольно проста. Когда в 1974 году компания Intel выпустила</span></p>
<p><span class="font3">микросхему 8080, успех был ошеломляющим. Производители принялись встраивать 8080 в электронные устройства, и с учетом этой тенденции через некоторое время было решено сконструировать микросхему, на которой можно было бы разместить не только процессор, но также модули памяти и контроллеры ввода-вывода. В результате появилась модель 8048, а за ней — 8051. Несмотря на почтенный возраст (а может быть, и благодаря ему), эта микросхема до сих пор пользуется обширным спросом, что объясняется в основном крайне низкой стоимостью, которая во встроенных системах является решающим фактором. В данном подразделе представлена краткая техническая характеристика 8051 и родственных микросхем.<span id="more-254"></span></span></p>
<p><span class="font3">8051 умеет работать в одном-единственном режиме; никаких аппаратных средств защиты в этой микросхеме не предусмотрено. Они и не нужны — ведь 8051 никогда не выполняет одновременно больше одной программы. Модель памяти невероятно проста. Существует два адресных пространства по 64 Кбайт: для программ и для данных. Эти пространства разделены, что делает возможной реализацию пространства программ в ПЗУ, а пространства данных — в ОЗУ.</span></p>
<p><span class="font3">Допускается несколько вариантов реализации памяти. В простейшем из них предусматривается 4 Кбайт ПЗУ для программ и 128 байт ОЗУ для данных. Как ПЗУ, так и ОЗУ размещаются в одном корпусе с микросхемой. Учитывая область применения 8051, такого объема памяти в большинстве случаев вполне достаточно, а совместное размещение процессора и двух модулей памяти считается серьезным достоинством. В модели 8051 емкость обоих модулей увеличена вдвое: 8 Кбайт ПЗУ и 256 байт ОЗУ. В случае применения этой модели программа записывается в ПЗУ на этапе производства и пользователю недоступна.</span></p>
<p><span class="font3">В то же время систему 8051 можно оснастить внешним ПЗУ для размещения программ емкостью 64 Кбайт и внешним ОЗУ аналогичной емкости для данных. Кроме того, допускается установка единого для программ и данных внешнего модуля ОЗУ все той же емкости.</span></p>
<p><span class="font3">Вместе с тем, 8051 поддерживает промежуточную модель, в которой 4 Кбайт памяти программ и 128 байт памяти данных размещаются в одном корпусе с микросхемой, а остальная память — вовне. Применимость той или иной модели зависит от напряжения, подаваемого на выводы микросхемы.</span></p>
<p><span class="font3">Механизм работы с регистрами в 8051 весьма оригинален. Большинство программ для 8051 составляются с расчетом на восемь 8-разрядных регистров. Это совершенно естественный подход, поскольку многие команды содержат 3-разрядное поле с указанием целевого регистра. Имена регистров находятся в диапазоне от R0 до R7. Существует четыре набора регистров, хотя в каждый конкретный момент активным является только один из них. Активный регистр определяется значением в 2-разрядном поле регистра PSW. Наличие нескольких наборов регистров позволяет существенно ускорить обработку прерываний. При обнаружении прерывания обработчик не сохраняет содержимое всех регистров, а просто переходит к другому набору. Это обстоятельство позволяет 8051 обрабатывать огромное количество прерываний, что очень важно для процессора, встраиваемого в системы реального времени.</span></p>
<p><span class="font3">Еще одной особенностью регистров 8051 является то, что все они представлены в адресном пространстве памяти. Байт 0 пространства данных соответствует</span></p>
<p><span class="font3">регистру R0 из набора 0. Если команды изменяет содержимое R0, а затем считывает байт 0, в нем обнаруживается новое значение R0. Аналогичным образом байт 1 памяти соответствует регистру R1, и т. д. Байты 8-15 памяти соответствуют набору регистров 1, и т. д. до байта 31, связанного с регистром R7 в наборе 3. Эта схема изображена на рис. 5.5.</span></p>
<p style="text-align: center;"><img class="aligncenter" style="width: 352.44pt; height: 326.76pt;" src="/images/uanc/Untitled0-3.png" alt="" /></p>
<p><span class="font3">Непосредственно над четырьмя банками регистров, по адресам памяти 32-47, расположены 16 байт памяти с побитовой адресацией (0-127). В 8051 предусмотрен набор команд установки, сброса, выполнения операций И и ИЛИ, а также проверки отдельных битов, обращение к которым осуществляется по числам в диапазоне от 0 до 127. Эти команды работают с байтами от 32 до 47. Полезны они тем, что во встроенных процессорах для записи или установки переключателей, индикаторов и других устройств ввода-вывода часто применяются битовые переменные. Наличие специальных ячеек памяти позволяет 8051 обращаться к битовым перемененным, не вызывая байты целиком (а значит, не устанавливая их заново и не маскируя ненужные биты). Для простого процессора такая схема очень удобна, особенно в том, что касается управления булевыми переменными.</span></p>
<p><span class="font3">Помимо 4 наборов из 8 регистров, в 8051 есть несколько специальных регистров, самые важные из которых изображены на рис. 5.5, <em>б. </em>В регистре PSW содержатся (слева направо): бит переноса, бит служебного переноса, бит, определяющий набор регистров, бит переполнения и бит четности. Значения всех этих битов, за исключением того, который указывает на набор регистров, вычисляются арифметически. Заштрихованные поля не заняты.</span></p>
<p><span class="font3">Регистр IE позволяет включать/отключать прерывания вместе или по отдельности. Если бит в регистре IE обнулен, все прерывания отключены. Сброс этого бита позволяет отключать последующие прерывания одной командой. Установка этого бита разрешает любые прерывания, для которых установлены индивидуальные биты. Биты Е2, Е1 и ЕО включают или выключают три канала таймеров. Если все эти каналы включены, разрешается одновременная работа трех счетчиков, которые по истечении времени выполнения порождают прерывания. Бит ES включает или отключает последовательные прерывания каналов. Остальные два бита включают или отключают прерывания от внешних источников. Когда они установлены, прерывания принимаются от внешних устройств, подключенных к двум выводам 8051. Соответственно, если эти биты сброшены, такие прерывания не принимаются.</span></p>
<p><span class="font3">Регистр IP определяет приоритеты для прерываний. Предусмотрено всего два уровня приоритета: низкий и высокий. Обслуживание прерывания с низким приоритетом может быть отложено в пользу прерывания с высоким приоритетом, но обратная ситуация невозможна. Бит, равный единице, присваивает соответствующему прерыванию высокий приоритет; сброшенный бит задает низкий приоритет.</span></p>
<p><span class="font3">Регистр TCON регулирует главные таймеры 0 и 1. Биты Ol и О0 устанавливаются аппаратно в случае переполнения соответствующего таймера. R1 и R0 — это биты контроля выполнения, которые позволяют включать и отключать таймеры программно. Остальные биты переводят оба таймера из режима запуска по фронту в режим запуска по уровню, и наоборот.</span></p>
<p><span class="font3">Последний оставшийся регистр — TMOD — определяет разрядность таймеров (8, 13 или 16 бит), переключает их из режима таймера истинного времени в режим счетчика и обратно, а также регулирует подконтрольность таймеров аппаратным сигналам. Есть и другие регистры, связанные с управлением питанием и работой последовательного порта, но они на нашей схеме не показаны.</span></p>
<p><span class="font3">Все вышеупомянутые специальные регистры, а также ряд других (в частности, сумматор и порты ввода-вывода), находятся в диапазоне памяти 128-255. Обращение к ним осуществляется так же, как и к регистрам R0-R7. К примеру, <strong>сумматор, </strong>применяемый для выполнения большинства арифметических операций, находится по адресу 240. В процессоре 8052 с реальной памятью в диапазоне от 128 до 255 специальные регистры пересекаются с адресным пространством памяти. Поэтому для обращения к специальным регистрам в этом процессоре используется прямая адресация, а для обращения к ОЗУ (через указатели в регистрах) — косвенная.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://itblock.ru/uank/254/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
