АВТ
Language: Russian
English

Remote Training on Programming

Problems Online status Contests
News FAQ E-learning
For authors:
Register  ||  Login
 
Hello, Guest! Please login or register.

1293. Assembler

Time Limit: 1 seconds
Memory Limit:132768KB
Points:100
View Problem Statistics Submit Problem added 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

 

 


View Problem Statistics Submit Problem discussion Author/source:
Problems from Contests and Camps / Vologda Students Contests / XVII InterUni Olympiad 2014 /
1292. I - Shooting 1293. 1294. K - Tic-tac-toe
Problems from Contests and Camps / School olympiads and couses of Vologda region / Impulse - 2019 / Introductory Olympiad /
1292. 09 - Shooting 1293. 1294. 11 - Tic-tac-toe
time generating 0.797 sec.
© Copyright VSU, AVT, Nosov D.A., Andrianov I.A.