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

Список команд ассемблера PDP-11

Условные обозначения
Mnemonic Opcode down NZVC Description Notes
HALT 000000 ---- Halt  
RESET 000005 ---- Reset external bus  
JMP d 0001DD ---- Jump PC=d
RETURN 000207 ---- Return from subroutine (= RTS PC)
RTS r 00020R ---- Return from Subroutine PC=r,r=(SP)+
NOP 000240 ---- No Operation  
CLC 000241 ---0 Clear Carry C=0
CLV 000242 --0- Clear Overflow V=0
CLZ 000244 -0-- Clear Zero Z=0
CLN 000250 0--- Clear Negative N=0
CCC 000257 0000 Clear all Condition Codes {C,N,V,Z}=0
SEC 000261 ---1 Set Carry C=1
SEV 000262 --1- Set Overflow V=1
SEZ 000264 -1-- Set Zero Z=1
SEN 000270 1--- Set Negative N=1
SCC 000277 1111 Set all Condition Codes {C,N,V,Z}=0
SWAB d 0003DD **00 Swap Bytes  
BR a 0004XX ---- Branch PC=PC+2*XX
BNE a 0010XX ---- Branch if Not Equal If Z=0
BEQ a 0014XX ---- Branch if Equal If Z=1
BGE a 0020XX ---- Branch if Greater or Equal If NxV?=0
BLT a 0024XX ---- Branch if Less Than If NxV?=1
BGT a 0030XX ---- Branch if Greater Than If Zv{NxV}=0
BLE a 0034XX ---- Branch if Less or Equal If Zv{NxV}=1
CALL d 0047DD ---- Call subroutine (= JSR PC,d)
JSR r,d 004RDD ---- Jump to Subroutine r=PC,PC=d
SXT d 0067DD -*0- Sign Extend d=0 or -1 #
ADD s,d 06SSDD
****
Add d=s+d
ASH s,r 072RSS
****
Arithmetic Shift r=r*2^s(EIS)#
ASHC s,r 073RSS
****
Arithmetic Shift Combined (EIS)#
XOR r,d 074RDD **0- Exclusive OR d=dxr #
SOB r,a 077RNN ---- Subtract One and Branch PC=PC-2*NN #
BPL a 1000XX ---- Branch if Plus If N=0
BMI a 1004XX ---- Branch if Minus If N=1
BHI a 1010XX ---- Branch if Higher If CvZ?=0
BLOS a 1014XX ---- Branch if Lower or Same If CvZ?=1
BVC a 1020XX ---- Branch if Overflow Clear If V=0
BVS a 1024XX ---- Branch if Overflow Set If V=1
BCC a 1030XX ---- Branch if Carry Clear If C=0
BHIS a 1030XX ---- Branch if Higher or Same If C=0
BCS a 1034XX ---- Branch if Carry Set If C=1
BLO a 1034XX ---- Branch if Lower If C=1
SUB s,d 16SSDD
****
Subtract d=d-s
CLRb d B050DD 0100 Clear d=0
COMb d B051DD **01 Complement d=~d
INCb d B052DD ***- Increment d=d+1
DECb d B053DD
***-
Decrement d=d-1
NEGb d B054DD
****
Negate d=-d
ADCb d B055DD
****
Add Carry d=d+C
SBCb d B056DD
****
Subtract Carry d=d-C
TSTb d B057DD **00 Test d
RORb d B060DD
****
Rotate Right d=->{C,d}
ROLb d B061DD
****
Rotate Left d={C,d}<- </td>
ASRb d B062DD
****
Arithmetic Shift Right d=d/2
ASLb d B063DD
****
Arithmetic Shift Left d=d*2
MOVb s,d B1SSDD **0- Move d=s
CMPb s,d B2SSDD
****
Compare s-d
BITb s,d B3SSDD **0- Bit Test (AND) d&s
BICb s,d B4SSDD **0- Bit Clear d=d&{~s}
BISb s,d B5SSDD **0- Bit Set (OR) d=dvs

CmdLegend?

Обозначение Что значит
B 0 for word, 1 for byte (1 bit)
DD Destination field (6 bits)
N Number (3 bits)
NN Number (6 bits)
R Register (3 bits, R0-5/SP/PC)
SS Source field (6 bits)
TT Number (8 bits)
XX Offset (8 bits, -128 to +127)

Обозначения  
Rn General purpose Register (16-bit, n=0-5)
SP Stack Pointer (16-bit, R6)
PC Program Counter (16-bit, R7)
PS Processor Status (16-bit)
описания  
a Relative address
b Blank or B for word or byte operand(s)
d s Destination/source
n Register number (0 to 5)
nn 16-bit expression (0 to 65535)
r Register (Rn,SP,PC)
t Trap number (0 to 255)
+ - * / ^ Add/subtract/multiply/divide/power
& ~ v x Logical AND/NOT, inclusive/exclusive OR
<- -> Rotate left/right
{ } < : > Combination of operands/bit range
# Not applicable to all PDP-11s

Не обязательные к реализации на эмуляторе команды:

BPT 000003 ---- Breakpoint Trap Vector at 14
DIV s,r 071RSS ** Divide (см. ниже) r=r/s (EIS)

DIV

Команды MUL и DIV Приведенное ранее описание этих команд дает о них упрощенное представление. Если в команде MUL MEM,R используется нечетный регистр R, то все верно. Если же используется четный, то произведение в виде тридцатидвухразрядного числа заносится в регистр R и регистр со следующим номером. Рассмотрим такой пример: MOV #1100,R2 MUL #1000,R2 Результат, если его рассматривать как тридцатидвухразрядное число, содержит 1 в битах 15 и 18 и нули в остальных. Младшие шестнадцать битов запоминаются в R3, а старшие — в R2. Таким образом, в данном случае после выполнения команды MUL третий регистр содержит число 100000, а второй 4:

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31 16 15 0

В команде MUL операнды считаются целыми двоичными числами со знаком, а результат формируется в виде тридцатидвухразрядного числа, 15-й бит старшего слова которого является знаковым. Нужно заметить, что результат умножения всегда корректен, потому что произведение двух шестнадцатиразрядных чисел не выходит за пределы двойного слова. Команда DIV выполняет деление целого числа в форме двойного слова, расположенного в регистре с четным номером и следующим за ним: MOV #1,R0 MOV #100007,R1 DIV #400,R0 В этом примере две первые команды загружают число 300007 в регистры R0 и R1. Команда DIV частное (600) запишет в R0, а остаток (7) — в R1. Если бы первой шла команда MOV #1000,R0, то результат от деления не поместился бы в одно слово. Действительно, при делении числа 200100007 на 400 получается 400200. При подобных попытках выполнение команды прерывается и устанавливается бит V.

DIV - совсем на пальцах

Пусть в регистре R1 находится число восемнадцать, которое мы хотим разделить на десять и сохранить остаток. Для этого подходит команда DIV: DIV #12,R0 ; четный регистр! Обратите внимание, что сначала мы пишем число (в восьмеричной системе счисления), на которое хотим разделить. Число, которое мы собираемся делить, должно быть занесено в регистр. Кроме того, это должен быть регистр с нечетным номером, а в команде DIV должен быть указан регистр с предыдущим номером; в этот регистр нужно предварительно поместить нуль (например, с помощью команды «очистки» CLR): CLR R0 DIV #12,R0 Команда DIV сохранит частное в регистре с предыдущим номером (в данном примере — R0), а остаток— в регистре, который использовался для хранения делимого (R1). Итак, в данном случае в R0 будет 1 и 8 — в R1

-- TatyanaDerbysheva - 03 Mar 2011