Раздел «Язык Си».PDPIntro:

Архитектура PDP-11

Цикл работы процессора

Адресное пространство

IDEA! Слова имеют только четные адреса.

QUESTION? рисунок из ТЗ

Регистры процессора

Регистры - аналог ячеек памяти, расположенные внутри ЦП

Регистры внешних устройств

Слово состояния процессора (PSW)

Кроме регистров у процессора есть еще одно доступное слово, характеризующее состояние процессора. Выполнение некоторых команд может привести к изменению некоторых бит-флагов. Из 16-битного слова состояния процессора (Process State Word) необходимо моделировать только 4 последних бита: флаги N, Z, V, C. ЦП обычно устанавливает С в 1, если произошел перенос из 15-го бита. Можно считать С не существующим "16-тым битом". V устанавливается в 1, если, например, при сложении положительных чисел получилось отрицательное число (в результате переполнения). Заметим, что при этом флаг С=0.

Команды и псевдокоманды ассемблера

Директивы ассемблера PDP-11

        A = 123
        .=1000
B:      .WORD   15, 12., 'z, A, B     
этот фрагмент будет преобразован в следующие слова (вторая колонка, восьмеричные числа) по указанным адресам (первая колонка, восьмеричные числа). Третья колонка - объяснения.
001000  000015  восьмеричная константа 15 легла по адресу, указанному в .= как текущий
001002  000015  десятичное 12 есть 15 в восьмеричной системе
001004  000172  это ascii-код символа z
001006  000123  значение константы А
001010  001000  значение константы (метки) B
Заметим, что мы можем использовать В как именованную константу со значением 1000 (т.е. метка равна адресу, по которому она расположена). Область видимости метки - весь файл (как ниже, так и выше по тексту).

Аргументы

Режимы адресации (операнды SS и DD)

Управление памятью

Страничная организация памяти

Формирование физического адреса

Инструментальные средства для программирования на PDP-11

Ассемблер

as11 имя_входного_файла [-l имя_листинг_файла] [-o имя_исполняемого_файла] Программа, преобразующая мнемоники команд ассемблера в машинный код. В результате работы создает файл листинга и исполняемый файл.

Формат исполняемого файла

Исполняемый файл (s-rec файл) состоит из нескольких блоков. Каждый блок состоит из адреса начала блока adr, количества байтов данных в блоке n и байтов данных a1, a2 .. an (по одному байту на строку). Все числа шестнадцетиричные.
adr n
a1
a2
...
an

Формат файла листинга

Файл листинга используется для облегчения отладки программ на ассемблере. Строится на основе файла с программой из мнемоник ассемблера.

Добавляется колонка адреса ячейки памяти (первая) и содержимого ячейки памяти (вторая). Далее идет исходный код.

Пример фрагмента исходной программы:

. = 1000
main:   mov   #main,sp   ; init stack
Построенный по данному фрагменту листинг:
000000:        . = 1000
001000:      
001000:        main:   mov   #main,sp   ; init stack
        012706
        001000

Эмулятор

pdp11 [опции] имя_исполняемого_файла

Режим трассировки эмулятора

При запуске эмулятора с опцией -t в поток stderr пошагово выводятся исполняемые инструкции с отображением операндов. Например, для программы
. = 1000
; Compute sum of zero-terminated array
;
        mov #array, r1
        clr r0
loop:
        add (r1)+, r0
        tst (r1)
        bne loop
        halt

array:
        .word   1,2,3,0
трассировка будет выглядеть как
$ pdp11 -t array

---------------- running --------------
001000: mov     #001016,r1              [001002]=001016
001004: clr     r0
001006: add     (r1)+,r0                [001016]=000001 R0=000001
001010: tst     (r1)                    [001020]=000002
001012: bne     001006
001006: add     (r1)+,r0                [001020]=000002 R0=000003
001010: tst     (r1)                    [001022]=000003
001012: bne     001006
001006: add     (r1)+,r0                [001022]=000003 R0=000006
001010: tst     (r1)                    [001024]=000000
001012: bne     001006
001014: halt

---------------- halted ---------------
r0=000006 r2=000000 r4=000000 sp=000000
r1=001024 r3=000000 r5=000000 pc=001016
psw=000004: cm=k pm=k pri=0 Z [12]

После остановки эмулятора печатаются значения регистров.

В случае большого объема трассировки, ее лучше перенаправлять в файл.

$ pdp11 -t big_program 2> out.txt
И останавливать выполнение pdp11 нажатием Ctrl+C в случае зацикливания.

Компилятор языка С

Словарь

SP
stack pointer - R6, содержит адрес вершины стека
PC
program counter - R7, счетчик команд, содержит адрес ячейки памяти, которую будут читать следующей.
PSW
Processor State Word - слово, характеризующее состояние процессора; содержит различные флаги
RAM
random access memory - память с произвольным доступом (линейный массив, в отличие от памяти последовательного доступа, например магнитной ленты).

байт
минимальная адресуемая единица памяти
бит
0 или 1 машинное;слово: разрядность:
регистры
аналог ячеек памяти, расположенные внутри ЦП
ЦП
центральный процессор

Тесты

Hello, world

;.include   "ascii.s11"
CR=15
LF=12

. = 1000
main:   mov     #main,sp   ; init stack
        mov     #hello,r0
        jsr     pc,puts
        halt

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; putchar
;   input:      RO - ascii char
;   output:     none
;   clobber:    flags
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ocsr = 0177564  ; TTO command and status register for PDP-11
odat = 0177566  ; TTO data register
;
putchar: tstb   @#ocsr          ; test bit 7 in ocsr (it's sign bit!!!)
        bpl     putchar         ; if ( bit 7 == 0 ) wait ... device is busy
        movb    r0,@#odat       ; put char to the odat
        rts     pc              ; return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; puts
;   input:      RO - asciz string
;   output:     none
;   clobber:    flags, r0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
puts:   mov     r1,-(sp)        ; save r1 in stack
        mov     r0,r1           ; copy addr to r1
l1:     movb    (r1)+,r0        ; put next char to r0
        beq     l2              ; if (r0 == 0) goto l2
        jsr     pc,putchar      ; call putchar()
        br      l1              ; goto l1
l2:     mov     (sp)+,r1        ; restore r1 from stack
        rts     pc              ; return

hello:  .asciz  <CR><LF>/hello, world!/<CR><LF>

Прилагаемые файлы

Attachment sort Action Size Date Who Comment
pdp11em-linux.rar manage 517.3 K 09 Mar 2011 - 18:58 TatyanaDerbysheva Эмулятор PDP-11 для Linux
pdp11em-win32.rar manage 1374.2 K 09 Mar 2011 - 19:04 TatyanaDerbysheva Эмулятор PDP-11 для Windows
T.S._Frenk._PDP-11_arkhitektura_i_programmirovanie.djvu manage 6068.5 K 31 Mar 2011 - 09:53 TatyanaDerbysheva Френк Т.С. PDP-11 Архитектура и программирование.
pdp11em-tests.rar manage 11.0 K 21 Apr 2011 - 22:22 TatyanaDerbysheva Тесты на ассемблере pdp-11
pdp11em-linux.zip manage 595.7 K 12 Apr 2012 - 20:22 TatyanaDerbysheva Эмулятор PDP-11 для Linux (zip архив)
make_pdp.sh manage 0.1 K 26 Feb 2015 - 12:31 TatyanaDerbysheva  
mac_exe.zip manage 90.1 K 23 Mar 2015 - 13:50 TatyanaDerbysheva pdp emulator for mac
make_pdp.bat manage 0.1 K 06 Apr 2015 - 13:30 TatyanaDerbysheva Windows: сассемблировать и запустить программу
PDP-11.pdf manage 1722.6 K 30 Apr 2016 - 14:08 TatyanaOvsyannikova2011