Pdp11:汇编指令 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
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 |