Pdp11:汇编指令 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Table of Contents

描述PDP11-40提供的汇编指令

概述

PDP11-40提供一系列汇编指令来方便编程,汇编指令都被编译为机器指令

符号约定

为方便叙述汇编指令,做如下符号约定

符号 意义 意义[英文]
除特殊说明的情况,数一般以八进制出现
八进制表现为6位八进制数,有符号数末第6位为符号位(等同于二进制形式末第16位)
转化为二进制表现为16位二进制数,有符号数末第16位为符号位
( ) ...的内容 contents of
SS / src 源地址 source address
DD / dst 目标地址 destination address
从堆栈出栈 is popped from stack
向堆栈入栈 is pushed onto stack
~ 逻辑非[按位取反] boolean NOT
逻辑与 boolean AND
逻辑或 boolean OR
¤ 不可兼或 Exclusive OR
Reg / R 寄存器 Register
B 字节 Byte
这一位为0则代表指令是字指令
为1则代表指令是字节指令
0 for word
1 for byte
XXX 某个内存地址[遗留问题] XXX is a programmer-defined mnemonic for a memory location

指令列表

指令 说明 英文简介
CLR
CLRB
将目标位置的数据清零 clear destination
COM
COMB
将目标位置的数据按位取反 complement dst
INC
INCB
将目标位置的数据加1 increment dst
DEC
DECB
将目标位置的数据减1 decrement dst
NEG
NEGB
将目标位置的数据取补 negate dst
TST
TSTB
根据目标位置的数据设置标志位的N位和Z位 test dst
ASR
ASRB
将目标位置的数据按位右移一位 arithmetic shift right
ASL
ASLB
将目标位置的数据按位左移一位 arithmetic shift left
ROR
RORB
将目标位置的数据按位循环右移一位 rotate right
ROL
ROLB
将目标位置的数据按位循环左移一位 rotate left
SWAB 将目标位置的字数据的高位字节与低位字节互换 swap bytes
ADC
ADCB
对目标位置的数据处理进位 add carry
SBC
SBCB
对目标位置的数据处理借位 subtract carry
SXT 根据标志位N改变目标位置的数值 sign extend
MOV
MOVB
移动[复制]源地址的数据到目标地址 move source to destination
CMP
CMPB
比较源地址的数据和目标地址的数据 compare src to dst
ADD 将源地址的数据和目标地址的数据相加,将结果送入目标地址 add src to dst
SUB 将目标地址的数据和源地址的数据相减,将结果送入目标地址 subtract src from dst
BIT
BITB
将源地址的数据和目标地址的数据做逻辑与运算,据此改变标志位 bit test
BIC
BICB
按源地址的数据的指示,将目标地址的数据的二进制形式的某些数位清位 bit clear
BIS
BISB
将源地址的数据和目标地址的数据做逻辑或运算,将结果送入目标地址
[按源地址的数据的指示,将目标地址的数据的二进制形式的某些数位置位]
bit set
MUL 将源地址的数据和目标地址的数据相乘,将结果送入目标地址(参见详细说明) multiply
DIV 将源地址的数据和目标地址(32位长)的数据相除,将结果送入目标地址 divide
ASH 根据源地址的数据,将目标寄存器的数据按位向左/向右移动指定位数 shift arithmetically
ASHC 根据源地址的数据,将目标寄存器[双字长]的数据按位向左/向右移动指定位数 arithmetic shift combined
XOR 将给定寄存器与目标地址的数据做不可兼或运算,结果送入目标地址 exclusive OR
BR 进行无条件程序控制转移,偏移范围 -128 ~ 127 branch (unconditional)
BNE 若标志位Z未被置位,进行程序控制转移 branch if not equal (to zero)
BEQ 若标志位Z被置位,进行程序控制转移 branch if equal (to zero)
BPL 若标志位N未被置位,进行程序控制转移 branch if plus
BMI 若标志位N被置位,进行程序控制转移 branch if minus
BVC 若标志位V未被置位,进行程序控制转移 branch if overflow is clear
BVS 若标志位V被置位,进行程序控制转移 branch if overflow is set
BCC 若标志位C未被置位,进行程序控制转移 branch if carry is clear
BGE 若标志位满足 N ∨ V = 0 ,进行程序控制转移 branch if greater than or equal (to zero)
BLT 若标志位满足 N ¤ V = 0 ,进行程序控制转移 branch if less than (zero)
BGT 若标志位满足 Z ∨ ( N ¤ V ) = 0 ,进行程序控制转移 branch if greater than (zero)
BLE 若标志位满足 Z ∨ ( N ¤ V ) = 1 ,进行程序控制转移 branch if less than or equal (to zero)
BHI 若标志位满足 Z = 0 and C = 0 ,进行程序控制转移 branch if higher
BLOS 若标志位满足 C ∨ Z = 1 ,进行程序控制转移 branch if lower or same
BHIS 若标志位满足 C = 0 ,进行程序控制转移 branch if higher or same
BLO 若标志位满足 C = 1 ,进行程序控制转移 branch if lower
JMP 程序控制跳转到目标地址 jump
JSR 程序控制跳转到指定子程序并进行现场保护 jump to subroutine
RTS 程序控制从子程序返回,进行现场恢复 return from subroutine
MARK 标记退栈位置,方便子程序返回时的退栈操作 mark
SOB 对目标寄存器进行减1,若结果不为0,进行程序控制转移 subtract one and branch (if ≠ 0)
TRAP 陷入 trap
BPT 断点陷入 breakpoint trap
IOT I/O陷入 Input/Output trap
RTI 从中断返回 return from interrupt
RTT 从中断返回 return from interrupt
MFPI 从上一指令空间读取数据 move from previous instruction space
MTPI 向上一指令空间写入数据 move to previous instruction space
CLC 清标志位C Clear C
CLV 清标志位V Clear V
CLZ 清标志位Z Clear Z
CLN 清标志位N Clear N
SEC 置标志位C Set C
SEV 置标志位V Set V
SEZ 置标志位Z Set Z
SEN 置标志位N Set N
SCC 置所有标志位 Set all CC's (Condition Codes)
CCC 清所有标志位 Clear all CC's
NOP 空操作 No Operation
⚠️ **GitHub.com Fallback** ⚠️