Статус нашего сайта: |
ICQ Information Center |
ICQ SHOP 5-значные 6-значные 7-значные 8-значные 9-значные Rippers List ОПЛАТА СТАТЬИ СЕКРЕТЫ HELP CENTER OWNED LIST РОЗЫСК!New! ICQ РЕЛИЗЫ Протоколы ICQ LOL ;-) Настройка компьютера Аватарки Смайлики СОФТ Mail Checkers Bruteforces ICQTeam Soft 8thWonder Soft Other Progs ICQ Patches Miranda ICQ ФорумАрхив! ВАШ АККАУНТ ICQ LiveJournal
РекламаНаш канал:irc.icqinfo.ru |
Таненбаум Э.- Архитектура компьютера. стр.399В-третьих, компилятор должен либо на выходе производить программу, которая может использоваться ассемблером, либо самостоятельно выполнять ассемблирование. Таким образом, знание языка ассемблера существенно для понимания того, как работает компьютер. И вообще, кто-то ведь должен писать компилятор (и его ассемблер). Наконец, ассемблер дает прекрасное представление о реальной машине. Для тех кто изучает архитектуру компьютеров, написание ассемблерного кода — единственный способ узнать, что собой представляет машина. Формат оператора в ассемблере Хотя структура ассемблерного оператора отражает структуру соответствующей машинной команды, языки ассемблера для разных машин и разных уровней во многом похожи, что позволяет говорить о языке ассемблера в целом. В листингах 7.1-7.3 показаны фрагменты программ на ассемблерах Pentium 4, Motorola 680x0 и (Ultra)SPARC. Все эти программы выполняют вычисление формулы N = I + J. Во всех трех примерах операторы над пустой строкой выполняют вычисление, а операторы под пустой строкой резервируют память для переменных I, J и N. То есть последние операторы не являются символьными представлениями машинных команд. Для компьютеров семейства Intel существует несколько ассемблеров, которые отличаются друг от друга синтаксисим. В этой книге мы будем использовать язык ассемблера Microsoft MASM. И хотя мы будем говорить о процессоре Pentium 4, все сказанное применимо и к процессорам 386, 486, Pentium и Pentium Pro. Для процессора SPARC мы будем использовать ассемблер Sun, а все сказанное применимо и к более ранним 32-разрядным версиям. В книге коды операций и регистры всегда обозначаются прописными буквами, причем не только для ассемблера Pentium 4, как это обычно принято, но и для ассемблера Sun, где по соглашению буквы строчные. Листинг 7.1. Вычисление выражения N = I + J на ассемблере Pentium 4 FORMULA: MOV ЕАХ,I ; регистр ЕАХ = I ADD ЕАХ,J ; регистр ЕАХ = I + J MOV N,ЕАХ ; N = I + J I DD 3 ; резервирование 4 байт ; и их инициализация значением 3 J DD 4 ; резервирование 4 байт ; и их инициализация значением 4 N DD 0 ; резервирование 4 байт ; и их инициализация значением О Листинг 7.2. Вычисление выражения N = I + J на ассемблере Motorola 680x0 FORMULA MOVE.L I,DO ; регистр DO = I ADD.L J.DO ; регистр DO = I + J MOVE.L DO.N ; N = I + J I DC.L 3 ; резервирование 4 байт ; и их инициализация значением 3 J DC.L 4 ; резервирование 4 байт ; и их инициализация значением 4 N DC.L 0 ; резервирование 4 байт ; и их инициализация значением О Листинг 7.3. Вычисление выражения N = ! + J на ассемблере SPARC FORMULA: SETHI ЯНКП.Ш ! Rl = старшие биты адреса I LD [Ш+ШХ1)].Ш ! Rl = I SETHI %HI(J),%R2 ! R2 = старшие биты адреса J LD OT2+£L0(J)].*R2 ! R2 = J NOP ! ожидаем получения J из памяти ADD *R1.*R2.*R2 ! R2 = Rl + R2 |