АВТ
Язык:

Дистанционный практикум по программированию

Задачи Online статус Соревнования
Новости Справка СДО
 
Здравствуйте, Гость! Войдите с паролем или зарегистрируйтесь.

1293. Ассемблер

Ограничение времени: 1 сек.
Ограничение памяти:132768 КБайт
Баллы:100
Статистика Послать на проверку Задачу добавил debug

В настоящее время широко применяются архитектуры процессоров x86 и ARM. Программа на языке ассемблера для RISC-процессоров ARM может быть распознана по характерным командам LDR (load register), STR (store register) для загрузки данных из памяти в регистр и обратно. Векторные варианты данных инструкций содержат префикс 'V' (VLDR, VSTR). В программах для архитектуры x86 таких команд нет.

Ассемблерные программы для процессоров x86 (Intel, AMD, Cyrix) могут быть записаны в синтаксисе Intel или AT&T, рассчитаны на 16, 32 или 64-битную архитектуру, использовать FPU (сопроцессор для вычислений с плавающей запятой) или нет.

Определять разрядность в данной задаче будем следующим образом. Если в тексте программы встречаются 64-битные регистры (rax, rbx, rcx, rdx, rsp, rbp, rsi, rdi), то считаем, что архитектура 64-разрядная. Если 64-битные регистры не используются, но встречаются 32-битные (eax, ebx, ecx, edx, esp, ebp, esi, edi), то считаем, что архитектура 32-разрядная. Если нет ни 64-битных, ни 32-битных регистров, то полагаем, что архитектура 16-разрядная.

Синтаксис AT&T можно опознать по символу '%' перед регистрами (например, %esp, %bp). В синтаксисе Intel перед названием регистров спецсимволов нет. Если в программе не встречается ни одного регистра, то предполагается синтаксис Intel.

Для распознавания работы с FPU в данной задаче ограничимся тремя командами: finit (проинициализировать FPU), fld (загрузить данные в сопроцессор) и fst (выгрузить данные из сопроцессора).

Вам дан фрагмент программы на ассемблере, требуется определить для него вышеописанные характеристики.

При решении данной задачи можно считать, что верны следующие допущения:

- все используемые в программе идентификаторы (названия регистров, команд, процедур и т.д.) могут содержать только заглавные и строчные латинские буквы, цифры, символы '_' (подчеркивание), '.' (точка) и не могут начинаться с цифры;

- в программах для архитектуры x86 не встречается идентификаторов с именами LDR, STR, VLDR, VSTR (в любом регистре);

- в тексте программ не встречается комментариев;

- в тексте программ возможны строковые константы, которые записываются в двойных кавычках (символ "). Они могут содержать произвольный текст, который никак не влияет на ответ. Внутри строковых констант символ " не встречается;

- регистр символов не учитывается.

Входные данные представляют собой фрагмент программы на языке ассемблера.

Выходные данные: вначале выведите целое число 86 (если обнаружена архитектура x86) либо 0 (если обнаружена архитектура ARM).

В случае x86 выведите ещё три целых числа, разделяя их пробелом:

 -  1, если используется синтаксис AT&T, и 0, если Intel;

 -  1, если используется FPU, и 0, если нет;

 -  16, 32 или 64 — максимальная обнаруженная разрядность.

В случае архитектуры ARM выведите 1, если используются векторные инструкции, и 0, если нет.

Примеры

Входные данные

Выходные данные

Finit

xor %rax, %rbx

86 1 1 64

 

.LC1:

  .string "xor rax, rbx"

mov ecx, edx

mov eax, 1

mul ecx

add ah, al

86 0 0 32

LDR R1, Value

0 0

vldr R1, Value

0 1

 

 


Статистика Послать на проверку Обсуждение задачи Автор/источник:
Задачи с соревнований и сборов / Межвузовские олимпиады / XVII Межвузовская олимпиада 2014 /
1292. I - Стрельба 1293. 1294. K - Крестики-нолики
Задачи с соревнований и сборов / Школьные олимпиады и курсы Вологодской области / Импульс, смена 2019 / Вступительная олимпиада /
1292. 09 - Стрельба 1293. 1294. 11 - Крестики-нолики
 
время генерации 0.657 сек.
© Copyright ВоГУ, АВТ, Носов Д.А., Андрианов И.А.