Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект по ЯП_Гайденрайх.doc
Скачиваний:
23
Добавлен:
16.03.2015
Размер:
533.5 Кб
Скачать

Занятие 4

chislov ‘00000’ invoke ExitProcess,0 outint

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

DB - помещает в память байт.

[<name>] DB <on> [<operand>]

A DB ?,5 - помещает в память байт, в простейшем случае 1 байт, но может быть записано через запятую несколько, может быть записано конкретное константное значение, которое для байта может принимать значения от -128 до 127 для чисел со знаком и от 0 до 255 для чисел без знака. Но так же может встретиться и подозрительный символ как ?. Это означает что мы резервируем память по адресу, конкретно тут по А будет зарезервирован байт и не будет инициироваться его значения.

M DB 2,-2,?,’*’ - В память будет помещено: M 2 -2 M+1 ? M+2 M+3

Можно записать целую строку:

S DB ‘Коля’ S К О Л Я

FlatAssembler (бесплатный компилятор)

*data

*code

DW работает похоже на ДБ, но оперирует данными размером в 2 байта A DW ? B DW 1234h C DW -2

Есть дупликация, которую можем использовать как для DB так и для DW.

P DW 0,0,0,0,0 P DW 5 DUP(0)

Дуплицировать можно не только простейшие константы, но и целые цепочки.

X DB 2 DUP(‘ab’,?,1) X a B ? 1 A B ? S DB ‘К’ DB ‘О’ DB ‘Л’ DB ’Я’ – то же самое, изменится только запись на ассемблере

B DD – отводит память размером по 32 бита=4 байта

Такие значение от -2^32 до 2^32-1

Выражение

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

Определить имя, которое будет затем использоваться в выражениях можно вот так: K EQU 30 X DB (3*K-1)/2 DUP (?) X DW 1, 2, 3, 4, 5 Y DB ? SIZEXY EQU Y-X; =10 получится значение 10

Могут быть команды, помеченные в программе и в выражениях можно использовать адрес метки.

MASM - подсчет нечетных

Функциональное программирование

Ушло от понятия когда программа выполнялась как последовательность шагов. 1 шаг 2 шаг 3 шаг – нет

Теория положенная в основу аппликативного программирования это т.н. лямбда исчисление (Алонза Черча) а также комбинаторная логика, которую придумал Моисей Шейнфинкель – наш соотечественник -20 -30 г 20в.

Первый implemented языком стал Lisp – 1958 год - Джон Маккарти в МТИ.

Лисп – LIST Processing – обработка списков. Списки играют главную роль в данном языке программирования, но чтобы не складывалось извращенного представления что лисп единственный, мы поговорим и о других языках которые представляют это парадигму программирования (направление): Common LISP Scheme Clojure FP FL

AutoLISP, AutoCAD - прямые потомки лиспа

Языки Hope, Miranda 1985 , HasKell 1993 (несколько потомков Curry, Clean, Gofel). Интересно что Карри и Хаскель это фамилия и имя логика.

NB! Хаскель – чистый функциональный язык.

ML( автор Роберт Милмер 1979) – потомки Objective CAML, F#(является частью Microsoft .NET) , Scala, Nemerle, Harlequins SMVJORKS.

SiSal, Reduce, APL, Erlang 1986 – последний характерен тем, что используется в индустрии телегиганта Ериксон. Язык многопоточный – изначально до 1000 параллельно работающих потоков.

APL 1961 – минималистичный синтаксис – обладает векторами и матрицами. Легко записывать обработку больших структур данных короткими операторами. У него есть наследники K, J.

Язык Пифагор – создан в Красноярском госуниверситете, в настоящем продолжается в институте космических и информационных технологий в Сибири. Параллельный информационно функционально алгоритмический.

Языки достаточно отличаются друг от друга.

GNU cLisp – будет там прогать, чисто функциональную часть изучаем.

IPL – язык обработки информации.