Бройдо В.Л., Ильина О.П. Архитектура ЭВМ и систем (2006) (1186249), страница 86
Текст из файла (страница 86)
Закрытие главной процедуры пта1п, сегмента кодов и выход из программы: МЯ1й епбр СООЕ5Е6 епбз епб МА1й С!51е рго9.азв зтасйзед зедвепс ; задание поля паияти для стека 55аскзед епбз Оасазед зедвепь ; задание полей паияти для данных и определение всех констант и перененных оагазед епоз собезед зедвепс аззове С5:собезед. 05:бааазед, 55:зтасйзед ватп ргос таг розй ох 5ОЬ АХ. ЯХ рО5Ь ЯХ воч АХ.
ба1азед воч 05, АХ : основной текст програииы 390 Глава 18. Элементы программирования нв языке ассемблера ; тексты ближних процедур жатп епбр собезед епбз епб иа(п Рис. 18.2. Алгоритм извлечения квадратного корня из числа л Т1Т!Е 508.д5И : Извлечение корня квадратного 51аскзд зеджепй раса загася '5гаск' ; назначить область панятн для стека Ои 32 быр(32) зсаскзд епоз Оаьазд зедяепг раса 'ОаСа' ; определить данные чч ОЬ чзч ОЬ зг оЬ бЬ ЬыГ бЬ и би е бы 'введите аргуиент и (до 64 тыс.) 5' 10. 13,'значение корня - 5' 3 бор(0) 13.10.'$' 5.0.0.0.0,0.0,0 7 1 В качестве примера рассмотрим алгоритм и программу 80й.АЗВД извлечения квадратного корня из числа и.
Алгоритм решения задачи показан на рис. 18.2, Структура программы на языке ассемблера для получения исполняемого файла 391 убег а би ? Ь би ? ча1 би 7 сне бы 2 басаьд епбз собезд зедвепс рага 'Собе' ; программный сегмент аззиве сессобезд,бз;басазд.зз:зСаскзд Ьедтп ргос таг риай б5 аиЬ ах,ах ризй ах воч ах.ба1азд мюч ба.ах мюч аЬ, 9 мюч бх,оттзес чч т'пС 21Ь воч аЬ, Оай мюч бх,оттзес Ьит т пс 21П са11 аСг2Ьтп мюч бх,д мюч ах,п тпс ах бтч сио ьиЬ бх.бх воч а.ах воч ах.п бтч а абб ах.а воч бх.д бтч сио зиЬ бх бх пюч Ь.ах аиЬ ах.а свр ах,е ОЬе вес вач ах,Ь воч а,ах бвр тсег вес; пюч ап.д пюч бх.оттаес чтч т пС 21Ь са11 Ьтп2зсг аюч аЬ.9 воч бх.зт т пС 21Ь гес 392 Ы П25СГ псаГ сх.10 51,011585 5Г+2 ах,Ь бх,бх сх 01.ЗОЬ [511 А1 51 ах.О В1 Ь1П251Г 5СГ2Ы и пеаг 01.1 сх.ОаЬ 51, Отт5ЕС Ьвт+1 ЬЬ,ЬЬ Ы.
[Ьог+Ц а1, 151+ЬХ1 ах,ОГЬ 01 п,ах ах А1 сх 01.ах Ьх В2 5СГ2Ы и Ьед1п собе59 епд Ьед Основные сведения о листинге и его структуре Листинг программы на ассемблере используется как при создании ассемблерных программ, так и в качестве источника информации для квалифицированных программистов при отладке и оптимизации программ, написанных на языках высокого уровня. Ни один другой компилятор и его листинг не дает программисту такого количества полезной технической информации, как ассемблер. Ведь одна из основных целей использования языков высокого уровня — как раз желание избежать не очень сушественных технических подробностей. Но если программист хочет разобраться с подробностями созданной программы, то большинство отладчиков могут распечатать объектный зквивалент созданной программы на ргос ВОЧ ВОЧ ВОЧ 5ОЬ б!Ч ОГ ВОЧ бес СВР 0'пе гег епбр ргос ВОЧ аЮч ВОЧ 5ОЬ ПЮЧ ПЮч апб ВО1 абб ВОЧ В81 ВОЧ бес Опе гет епбр епбр епб5 1П Глава 18.
Элементы программирования нв языке ассемблера 393 Основные сведения о листинге и вго структуре языке ассемблера. Эти распечатки позволяют программисту оценить качество программы и являются весьма полезными при ее оптимизации. Листинг программы ВОЯ.АЯМ МзсгозоТС (й) Масго Аззьчпо)ег Чегзтоп 5.10 3/19/04 23:44:19 50Й.Я5М : Извлечение норня нвадратного Т1ТСЕ 50й.азп); Извлечение норня нвадратного 0000 зСаскзд зедяепС рага зСасд '5Сасд' : назначить область паняти для стена 0000 00201 би 32 бор(32) 0020 1 0040 зСасКзд епбз 0000 баСазд зедяепС рага 'ОаСа' ; определить данные 0000 А2 А2 А5 А4 АВ Е2 чч бЬ 'введите аргумент и (до 64 тыс.)ь' А5 20 АО ЕО АЗ ЕЗ АС А5 АО Е2 20 6Е 20 28 А4 АЕ 20 36 34 20 Е2 ЕВ Е1 2Е 29 20 24 0021 ОА ОО Я? АО ЯО Е7 чтч бЬ 10.13.'значение нория = 3' А5 АО АВ А5 20 АА АЕ ЕО АО ЕГ 20 20 ЗО 20 24 0036 ОООЗЕ зг бЬ 3 бор(0) ОО 1 ООЗА ОО ОА 24 бЬ 13.10.'$' 0030 05 00 00 00 00 00 Ьыг бЬ 5.0,0,0.0,0.0.0 00 00 0045 0000 и сЬг ? 0047 0001 е сЬг 1 0049 ОООО а би ? 0048 0000 Ь бн ? 0040 0000 ча) би ? 004Г 0002 Сио би 2 0051 баСазд епбз 0000 собезд зедиепС рага 'Собе' ; програинный сегнент аззипе сз:собезд.бз:баСазд,зз:зСасдзд 0000 Ьед(п ргос Таг 0000 1Е рызЬ бв 0001 28 СО ьыЬ ах.ах 0003 50 розЬ ах 0004 88 ---- й споч ах,баСазд 0007 ВЕ 08 яоч бз,ах 0009 84 09 яоч ал.
9 394 Глава 18. Элементы программирования на языке ассемблера оооо й г1 ОА оозо й 21 ОО70 й оооо 0045 й ВОЧ 1пС воч воч 1пС 21Ь са11 5СГ2Ь!и пюч бх,о воч ах,п 1пс ах б!ч Сио 5ОЬ бХ.бХ кюч а,ах ег: воч ах.п б1Ч а абб ах.а воч бх,о б1ч Сио 5ОЬ бх,бх вач Ь,ах 5ОЬ ах.а свр ах,е ЗЬе веС воч ах.Ь воч а,ах Звр 1Сег воч аЬ.9 таоч бх.оГГ5еь ч!ч 1пС 21Ь са11 Ь1п25СГ воч аЬ.9 вон бх,5! 1пС 21ь геС РГОС ВОЧ ВОЧ воч ах,Ь 50Ь бх,бх б1Ч сх ог б1,30Ь воч 15!З,О1 бес 5! свр ах,о Зпе В1 геС епбр ргос ВОЧ 36 004Е й 02 0049 й 0045 й 1С 36 0049 й 06 0049 й 0000 36 004Р й 02 0048 й 06 0049 й 06 0047 й 08 0048 й 0049 й 07 09 веС оог1 й 21 0064 й 09 06 21 0000 Е1 ОООВ ВА ОООЕ СО 0010 84 0012 ВА 0015 СО 0017 ЕВ 001А ВА 0010 А1 0020 40 оог1 е7 0025 28 0027 АЗ ООВА А1 оого е7 0031 03 0035 ВА 0038 Е7 оозс гв ООЗЕ АЗ 0041 28 0045 38 0049 76 ОО4В А1 004Е АЗ 0051 ЕВ 0053 84 0055 ВА 0058 Со 005А ЕВ 0050 84 005Е 88 0061 Со 0063 СВ 0064 0064 89 0067 ВЕ 006А А1 0060 28 006Р Е7 0071 80 0074 88 0076 4Е ОО77 ЗО 007А 75 ОО7С СЗ ОО7О ОО7О 0070 ВЕ Ь1п25СГ ОООА ООЗА й ОО4В й 02 В1: Е1 СА 30 14 Ь1п25СГ 5Сггь!и 0001 бх,отт5еС чч 21Ь аЬ, Оап бх.оГСзеС Ьит пеаг сх,10 51,0ттзеС 5Г+2 Осноеные сееденил о листинге и его структуре 55Г2Ь!П Ьед!и собеад епо' ГООР5: Сепдс Туре 0080 89 ОООА 0083 ВЕ ООЗЕ й 0086 2А ЕР 0088 ВА 1Е ООЗЕ 8 008С ВА 00 в2: 008Е 25 ОООР 0091 Р7 Е7 0093 01 06 0045 й 0097 88 С7 0099 Р7 Е1 0098 88 РВ 0090 48 009Е 75 ЕС ООАО СЗ ООА1 ООА1 ООА1 5едвеп15 апо' 6 М а в е СООЕ56 .
ОЯТЯ56 . 5ТАСК56 . 5увЬо!5; М а в е А, В . ВЕ61М 81М2518 . ВЬР . Е . 1ТЕЙ . М1 . М2 . МЕТ . 58 . 5Т8281М ЧАС . Ч1Ч . ЧЧ . ВСРО . ВР11ЕМАМЕ . ФЧЕ8510М . 95 5оогсе Сппеп 95 ТЬСа! С!Пеп 28 5увЬо15 пюч сх.даП воч 5!.оугаес Ьог+1 5оь ЬП,ЬП ,оч Ь1,1ьоа+Ц пюч 41.[5!+Ьх1 апо' ах,ОУП ви! сй аео п .ах пюч ах О! во1 сх пюч сй.ах оес Ьх Зпг в2 гес епбр епор ЕПО5 Ьед!и П А1!дп Сопйнпе С1а55 . ООА1 РАМА йОМЕ 'СООЕ' . 0051 РАМА МОНЕ 'ВАТА' . 0040 РАВА 5ТАСК '5ТАСК' Ча1ие АССГ . 1 МОМО 0049 . 1 МОМО 0048 . Р РВОС 0000 .
й РМОС 0064 . 1 ВУТЕ 0030 . 1 МОМО 0047 .. !. МЕАМ 002А .. С МЕАМ 0060 .. С МЕАМ 008С . С МЕАМ 0053 . С НОВО 0045 .. С ВУТЕ 0036 . М РМОС 0070 . С ХОМО 004Р . 1 ИОМО 0040 . 1 ВУТЕ 0021 .. 1 ВУТЕ ОООО .. ТЕХТ 0101П , ТЕХТ 50ГЗ .. ТЕХТ 510 ОАТА56 ОАТА56 СООЕ56 Сепдсп - ООА1 СООЕ56 СепдСП - 0019 ОАТА56 ОАТА56 СООЕ56 СООЕ56 СООЕ56 СООЕ56 ОАТА56 ОАТА56 СепдСП - 0004 СООЕ56 СепдФ = 0024 ОАТА56 ОАТА56 ОАТА56 ОАТА56 396 Глава 18. Элементы программирования на языке ассемблера 47690 + 382785 ОуСез зукЬо! зрасе 1гее 0 Иагп1'п9 Еггогз 0 5ечеге Еггогз Формируемый при ассемблировании листинг состоит из двух частей: листинга программы и сводной информации о сегментах и идентификаторах. Листинг содержит команды исходной ассемблерной программы и соответствующие им обьектные коды в следующих форматах: Е1 левый столбец: 16-ричное значение смещения адреса команды (счетчик команд — 1Р) от начала сегмента; чз правая часть: содержит операторы и псевдооператоры ассемблера (команды и директивы программы); Е) в средней части объектные коды; О для сегмента стека и сегмента данных — числа, запоминаемые в соответствующих ячейках памяти; О для сегмента команд — коды машинных команд МП, соответствующие операторам ассемблера.
Сводная информация о сегментах (зеящепгз апт! ягопрз) и идентификаторах (паве) дает подробную их характеристику. В конце листинга приводятся сообщения об ошибках в программе. При ассемблировании и редактировании связей могут быть получены еще два листинга с дополнительной информацией: О листинг перекрестных ссылок указывает номер строки программы, в которой определен каждый идентификатор, и номера тех строк, в которых имеются на него ссылки (этот листинг можно получить, если на запрос ассемблера о Стой ге1егепсе ввести имя файла ргоя (а не Ь!и!.СКР— по умолчанию), при этом в основном листинге программы добавится столбец с номерами строк); О листинг распределения памяти содержит подробные сведения о сегментах всех блоков программы, объединяемых загрузчиком 1.1Ь!К (листинг содержится в файле ргоязпар).
Программа расчета сложных процентов Далее показана еще одна структурно более сложная программа: вводятся несколько исходных операндов, вывод результатов выполняется внутри цикла и оформляется в виде таблицы. Сущность задачи Капитал Я вкладывается в некоторое мероприятие, обеспечивающее ежегодный прирост капитала .Е) Оы Задача: определить текущую величину капитала в течение первых )ч' лет. Вот соответствующая АБМ-программа для создания исполняемого ЕХЕ-файла. Программа расчета сложных процентов 397 Программа Р)аас)тет Т1ТЕЕ йА5СНЕТ.А5М ; расчет сложных процентов 5ТАСК56 5ЕОМЕИТ 5ТАСК '5ТАСК' ОИ 64 ООР(?) 5ТАСК56 ЕИ05 ОАТЯ56 5ЕОМЕИТ 'ОАТА' ; задание перепелках ЧЧО ОВ ' Введите величину начального капитала (до 64 000)' ОВ 10, 13.'$' ОВ 10.