1、算术左移-逻辑左移
算术左移和逻辑左移一样都是右边补0: 比如 00101011
算术左移一位:01010110
逻辑左移一位:01010110
对于二进制的数值来说左移n位等于原来的数值乘以2的n次方
比如00011010十进制是26,左移两位后是01101000转成十进制是104恰好是26的4倍。
ps:这种倍数关系只适用于左移后被舍弃的高位不含1的情况,否则会溢出。
2、算术右移,逻辑右移
逻辑右移很简单,只要将二进制数整体右移,左边补0即可
如10101101逻辑右移一位为01010110
算术右移符号位要一起移动,并且在左边补上符号位,也就是如果符号位是1就补1符号位是0就补0
比如:11100算术右移一位为11110(符号位1跟着一起移动并且左边补了1)
对于二进制的数值来说右移n位等于原来的数值除以2的n次方
比如10110100十进制是76(需要先将这个补码转换成原码之后再转换成十进制),右移两位后是11101101转成十进制是19恰好是76的4倍。
扩展资料:
移位操作是计算机指令中比较基本的操作,是位运算的一种。
在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,编译器未做任何优化的情况下(优化后不可预期),规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。
移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。
奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。
偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了。
奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中"1"的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。
奇校验(odd parity):让传输的数据(包含校验位)中1的个数为奇数。copy即:如果传输字节中1的个数是偶数,则校验位为“1”,奇数相反。
偶校验(even parity):让传输的数据(包含校验位)中1的个数为偶数。即:如果传输字节中1的个数是偶数,则校验位为“0”,奇数相反。
直接求其真值,不需要计算原码,但要注意第一位是符号位
物理地址=段地址*16d+偏移地址 这里段地址是指DS所指的数据段地址
1、简单传送指令
MOV 传送指令 XCHG 交换指令 XCHG OPER1,OPER2 oper1和oper2可以是通用寄存器或存储单元,但不能同时是操作单元,也不能是立即数。
2、简单加减指令
ADD 加法指令 SUB 减法指令 INC 加1指令 DEC 减1指令 NEG 取补指令
3、标志寄存器及其使用
CF(carry flag)进位标志 主要反映算术运算是否产生进位或借位,若产生,则CF=1,否则CF=0
ZF 零标志 反映运算结果是否为0
SF(sign flag)符号标志 根据运算结果的最高位,若最高位为1则SF为1,否则为0,反映有符号数运算结果的正负(0正1负)
OF(overflow flag) 溢出标志 反映有符号数运算结果是否产生溢出,是置1,否置0
PF(parity flag) 奇偶标志 偶数置1奇数置0 AF 辅助进位标志
4、状态标志操作指令
CLC(clear carry flag) 清进位标志指令 CLC 使进位标志CF为0
STC(set carry flag) 置进位标志指令 STC 使进位标志CF为1
CMC(complement carry flag) 进位标志取反指令 CMC 使进位标志CF取反
5、带进位加减指令
ADC(add with carry) 带进位加法指令 SBB(substraction with borrow) 带借位减法
6、取有效地址指令
LEA(load effective address) 取有效地址指令 LEA REC,OPRD 把操作数oprd的有效地址传送到操作数rec,源操作数oprd必须是一个存储器操作数,目的操作数rec必须是一个16位或32位的通用寄存器 与mov指令的区别:mov:移动地址中的值lea:将地址进行移动
7、指令指针寄存器和简单控制转移指令
CMP 比较指令 CMP DEST,SRC 根据dest-src的差影响各状态标志寄存器 不把dest-src的结果送入dest
JMP 无条件段内直接转移指令 JMP LABEL 使控制无条件地转移到标号为label的位置 无条件转移指令本身不影响标志
8、堆栈和堆栈操作
指令 中文名 格式 解释 备注
PUSH 进栈指令 PUSH SRC 把源操作数src压入堆栈 源操作数src可以是32位通用寄存器、16位通用寄存器和段寄存器,也可以是双字存储单元或者字符存储单元,还可以是立即数。(SP-2)
POP 出栈指令 POP DEST 从栈顶弹出一个双字或字数据到目的操作数 如果目的操作数是双字的,那么就从栈顶弹出一个双字数据,否则,从栈顶弹出一个字数据,出栈至少弹出一个字(16位)。(SP+2)
9、算术逻辑运算指令
MUL 无符号数乘法指令
IMUL 有符号数乘法指令
DIV 无符号数除法指令
IDIV 有符号数除法指令
10、逻辑运算指令
NOT 否运算指令 NOT OPRD 把操作数OPRD按位取反,然后送回OPRD
AND 与运算指令 AND DEST,SRC 把两个操作数进行与运算之后结果送回DEST 同1得1,否则得0
OR 或运算指令 OR DEST,SRC 把两个操作数进行或运算之后结果送回DEST 同0得0,否则得1
XOR 异或运算 XOR DEST,SRC 把两个操作数进行异或运算之后结果送回DEST 相同得0不同得1
TEST 测试指令 TEST DEST,SRC 与AND指令类似,将各位相与,但是结果不送回DEST,仅影响状态位标志,指令执行后,ZF、PF、SF反映运算结果,CF和OF被清零 通常用于检测某些位是否为1,但又不希望改变操作数的值
11、移位指令
SAL 算术左移 SAL OPRD,count 把操作数oprd左移count位,右边补0 与shl指令一样
通过截取count的低5位,实际的移位数被限于0到31之间。
SHL 逻辑左移 SHL OPRD,count 把操作数oprd左移count位,右边补0 与sal指令一样
通过截取count的低5位,实际的移位数被限于0到31之间。
SAR 算术右移 SAR OPRD,count 把操作数oprd右移count位,同时每右移一位,左边补符号位,移出的最低位进入标志位CF 通过截取count的低5位,实际的移位数被限于0到31之间。
SHR 逻辑右移 SHR OPRD,count 把操作数oprd右移count位,左边补0,移出的最低位进入标志位CF 通过截取count的低5位,实际的移位数被限于0到31之间。
12、循环移位指令
ROL 左循环移位指令 ROL OPRD,count 通过截取count的低5位,实际的移位数被限于0到31之间。
ROR 右循环移位指令 ROR OPRD,count 通过截取count的低5位,实际的移位数被限于0到31之间。
RCL 带进位左循环移位 RCL OPRD,count 相当于CF在最高位参与循环移位 大循环左移
通过截取count的低5位,实际的移位数被限于0到31之间。
RCR 带进位右循环移位 RCR OPRD,count 相当于CF在最高位参与循环移位 大循环右移
通过截取count的低5位,实际的移位数被限于0到31之间。
13、循环指令
LOOP 计数循环指令 LOOP LABEL 使CX的值减1,当CX的值不为0的时候跳转至LABEL,否则执行LOOP之后的语句
LOOPE 等于循环指令 LOOPE LABEL 使CX的值减1,如果结果不等于0并且零标志ZF等于1(表示相等),那么就转移到LABEL,否则执行LOOPE之后的语句
LOOPZ 零循环指令 LOOPZ LABEL 使ECX的值减1,如果结果不等于0并且零标志ZF等于1(表示相等),那么就转移到LABEL,否则执行LOOPZ之后的语句
14、条件转移指令
JC JZ JO JNC JNZ JNO 带N的则为标志位为0转移。
DATA SEGMENT 伪指令
VAR1 DB 未赋值变量,不可直接参与运算
VAR2 DB 10 赋值变量
VAR3 EQU 100 伪指令常量
DATA ENDS
8086 CPU 中寄存器总共为 14 个,且均为 16 位 。即 AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。而这 14 个寄存器按照一定方式又分为了通用寄存器,控制寄存器和段寄存器。
通用寄存器:
AX,BX,CX,DX 称作为数据寄存器:
AX (Accumulator):累加寄存器,也称之为累加器;BX (Base):基地址寄存器;CX (Count):计数器寄存器;DX (Data):数据寄存器;SP 和 BP 又称作为指针寄存器:SP (Stack Pointer):堆栈指针寄存器;BP (Base Pointer):基指针寄存器;
SI 和 DI 又称作为变址寄存器:SI (Source Index):源变址寄存器;DI (Destination Index):目的变址寄存器;
控制寄存器:
IP (Instruction Pointer):指令指针寄存器;
FLAG:标志寄存器;
段寄存器:
CS (Code Segment):代码段寄存器;DS (Data Segment):数据段寄存器;SS (Stack Segment):堆栈段寄存器;ES (Extra Segment):附加段寄存器;
详见https://www.cnblogs.com/tiger2soft/articles/5141263.html
中断类型码*4=中断向量表首地址