Опубликован: 21.08.2007 | Доступ: свободный | Студентов: 1620 / 143 | Оценка: 4.23 / 3.74 | Длительность: 15:37:00
Лекция 3:

Ассемблер

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Упражнение 3.1. Программа c имеет вид:

c =  (LD 3 ADD1 LDC 128 EQ STOP)

Пусть e = (101 102 103 104 105). Напишите последовательность состояний стека s при работе программы и сформулируйте, что она делает.

Ответ: Данная программа проверяет, меньше ли на 1 значение, хранящееся в контексте e по адресу 3, чем заданная в программе константа 128. При ее работе стек s проходит следующие состояния:

NIL  
(104 )  
(105 )  
(128 105 )  
(NIL )

Упражнение 3.2. Напишите управляющую программу, дающую результат, эквивалентный следующим выражениям:

(CADR e ) 
      (EQ (CAR e) 'QUOTE )
      (COND ((EQ n 0 )(CAR l )) (T (CONS (SUB1 n ) (CDR l ) ))  ))

(Адреса значений e, n, l можно обозначить как @e, @n, @l, соответственно.)

Ответ:

( LD @e CDR CAR )
  ( LD @e CAR LDC QUOTE EQ )
  ( LD @n LDc 0 EQ SEL (LD @l CAR JOIN ) (LD @n SUB1 LD @l CDR CONS JOIN ))

Упражнение 3.3. Напишите спецификацию команды SET, сохраняющей активное значение стека в контексте по заданному в программе адресу в предположении, что длина списка превосходит заданный адрес.

Выполнение упражнение 3.3: Нужна функция, заменяющая в списке указанный старый элемент новым.

(DEFUN ASS (e n list ) 
      (IF (EQ n 0 )(CONS e (CDR l )) 
                           (CONS (CAR l )(ASS e (SUB1 n ) (CDR l ) )))  )

Тогда можно описать команду SET следующим образом:

(x . s) e (SET n . c) d -> s xne c d

где xne = (ASS x n e) - новое состояние контекста.

В рассмотренных упражнениях виден уровень проблем, решаемых программистом при работе на ассемблере. Познакомившись с примерами низкоуровневого программирования с помощью абстрактной машины SECD, можно более детально определить ряд технических аспектов, иллюстрирующих операционную семантику машинного языка (см. курс "Основы функционального программирования. Лекция 7.").

Традиционно ассемблер реализуют как упрощенный компилятор. Учитывая повышенную нагрузку низкоуровневого программирования на отладку программ, иногда включают в систему программирования интерпретатор ассемблера, обеспечивающий кроме удобства отладки широкий спектр преобразования программ на ассемблере, их оптимизации и адаптации к развитию аппаратуры. Интерпретирующий автомат для ассемблера устроен реализационно проще, чем автомат для абстрактной машины SECD, благодаря отсутствию локализации имен с их областями действия и встроенной реализации команд - языка конкретной машины.

Зависимость ассемблера от конкретной машины или архитектуры создает значительные трудности при переносе программ на новые компьютерные системы. Дальнейшие лекции посвящены методам преодоления такой зависимости, подходам к повышению эффективности программ в тех случаях, когда ценой независимости является избыточный расход памяти или времени, и средствам достижения высокой производительности программирования.

< Лекция 2 || Лекция 3: 123 || Лекция 4 >
Илья Ардов
Илья Ардов

Добрый день!

Я записан на программу. Куда высылать договор и диплом?

Дарья Федотова
Дарья Федотова