8086汇编语言初学者教程(第6部分)html
运算与逻辑指令
算法
大多数运算与逻辑指令影响处理器的状态标记寄存器。
数组
从上图能够看到,这是状态标记寄存器是一个16位寄存器
每一位称做一个标志位,能够取值 1 或者 0 。
函数
这里有3组指令.
spa
第一组: ADD, SUB,CMP, AND, TEST, OR, XOR
支持以下操做数:
htm
REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
REG(寄存器): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory(内存): [BX], [BX+SI+7], 变量,等等...
immediate(当即数): 5, -24, 3Fh, 10001101b, 等等...
执行以后,结果常常存放在第一个操做数中。CMP和TEST指令只影响标志位,并不返回数值(这两条指令是用来在程序运行中判断的)上述指令只影响以下标志位:
CF, ZF, SF, OF, PF, AF.
blog
1 AND 1 = 1只有当两个操做数都是1时,运算结果才是1。
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
1 OR 1 = 1若是操做数中有1那么结果必定是1。
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0
1 XOR 1 = 0当两个操做数不一样时,结果为1。
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0
第二组: MUL, IMUL, DIV, IDIV
支持以下操做数:
教程
REG
memory
REG(寄存器): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory(内存): [BX], [BX+SI+7], variable, etc...
MUL and IMUL 指令只影响 CF, OF标志位。
运算后若是结果超出范围,这些标记位置1,若是没有超过
范围,置0
DIV 和 IDIV 指令对于标志位无影响
内存
当操做数是 字节时:
AX = AL * 操做数.
当操做数是 字时:
(DX AX) = AX * 操做数.
当操做数是 字节时:
AX = AL * 操做数.
当操做数是 字时:
(DX AX) = AX * 操做数.
当操做数是 字节时:
AL = AX / 操做数
AH = 余数(取模后的余数) .
当操做数是字时:
AX = (DX AX) / 操做数
DX = 余数(取模后的余数)
当操做数是字节时:
AL = AX / 操做数
AH = 余数(取模后的余数)
当操做数是 字时:
AX = (DX AX) / 操做数
DX = 余数(取模后的余数) .
第三组: INC, DEC, NOT, NEG
支持以下操做数:
get
REG
memory
REG(寄存器): AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory(内存): [BX], [BX+SI+7], variable, etc...
INC, DEC 指令只影响以下标志位:
ZF, SF, OF, PF, AF.
NOT 指令不影响任何标志位!
NEG i指令只影响以下操做位:
CF, ZF, SF, OF, PF, AF.