导图社区 3 寻址方式与指令系统
微机原理期末最强复习导图,再也不用担心期末考试挂科了。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
3 寻址方式与指令系统
寻址方式
非存储器寻址
寄存器寻址
操作数在CPU内部寄存器中,也可以是段寄存器,但CS不能作为目的操作数 例如:MOV AX BX BX=1234H
立即寻址
指令中直接给出指令的操作数 例:MOV AX 3064H
存储器寻址
当操作数中出现【】则可判断该寻址方式为寄存器间接寻址。 总的形式可表示为EA=基址+变址+偏移量
直接寻址
两个变量中必须有一个为寄存器操作数,不可同时为存储器操作数 操作数默认放在DS段,若要更改需进行段超越例如:MOV BL,ES:[3CH] 为了区分直接寻址与立即寻址,在直接寻址时源操作数加【】。
寄存器间接寻址
一般为通用寄存器,段寄存器限制使用,不包含标志及其控制寄存器。 寄存器内存放的为操作数的偏移地址 默认为BX BP SI DI,其中BX SI DI默认在DS数据段中,BP在SS段
寄存器相对寻址
EA=[间址寄存器]+位移量
基址加变址寻址
BX BP作为基址,SI DI为变址,且BX,SI,DI默认在DS段,BP为SS 例如:若DS段为300,MOV AX,[BX][SI],EA=3000+BX+SI
基址,变址加相对寻址
其他寻址方式
端口寻址
隐含寻址
串寻址
指令系统
数据传送指令
通用数据传送指令
一般数据传送指令MOV
1.操作数类型必须相同
MOV AX,BL为错误指令
2.两个操作数不能同为存储器操作数
3.不能用立即数给段寄存器赋值
MOV [BX],1234H为错误指令,至少需要两条指令实现
4.不能在段寄存器间直接传送数据
5.IP和CS段的值不能通过MOV指令修改
6.FLAGS内容不能通过MOV修改
堆栈操作指令
入栈PUSH
先调节指针,后进行入栈操作,导致指针总是指向最后一个数据的下一个位置,与后面串操作指令有类似点
出栈POP
1.指令的操作数必须是16位 2.操作数可以是寄存器或存储器,但不能是立即数。 3.不能从栈顶弹出一个字给CS 4.PUSH方向为从高到低,POP相反
字位扩展指令
字转字节CBW
源操作数隐藏在AL中,目标操作数隐藏在AX中 高位为1则补1,为0则补0
字转双字CWD
目标操作数隐藏在AX与DX中,扩展规则同CBW
查表转换指令XLAT
交换指令XCHG
两个操作数必须等长,且必须有一个为寄存器 交换指令结果不影响标志位 段寄存器不能作为XCHG操作数
输入输出指令
输入指令IN
输出指令OUT
当端口地址超过8位时,只能用间接寻址方式 传送数据的大小由目标操作数决定
地址传送指令
取偏移地址指令LEA
源操作数必须是存储器操作数,因为该指令是传送16位偏移地址,目标为16位通用寄存器。
加载数据段指针指令LDS
加载附加数据段指针指令LES
不考
标志传送指令
读取标志指令LAHF
设置标志指令SAHF
标志寄存器进栈出栈指令PUSHF,POPF
算数运算指令
加法指令
加法指令ADD
带进位加法ADC
目标操作数加源操作数加CF标志位
加一指令INC
操作数不能是段寄存器和立即数,不影响CF标志位
减法指令
减法指令SUB
带借位减法指令SBB
目标操作数-源操作数-借位CF
减一指令DEC
求补指令NEG
比较指令CMP
目标操作数与源操作数相减结果不送给目标操作数 影响标志位ZF,ZF为1二者相等
乘法指令
无符号乘法MUL
1乘数与被乘数必须等长 2乘积为双倍字长 3被乘数默认在AL/AX 4源操作数可以为寄存器或存储器,但不可为立即数 5当乘积的高半部不为0时,OF=CF=1,否则为1
有符号乘法IMUL
取补码,相乘,取反加一(补码负数为取反加一,符号位不变)
除法指令
无符号除法DIV
被除数应为除数双倍字长 16位被除数在AX中,8位除数位源操作数,8位商在AL中,8位余数在AH中 32位被除数DX AX中,商在AX,余数在DX
有符号除法IDIV
逻辑运算和位移指令
逻辑运算指令
逻辑与AND
过程为将目标操作数和源操作数按位相与,因此目标操作数只能是寄存器或存储器,源操作数还能为立即数。 若与本身相与,操作数不变,但标志位CF=OF=0
逻辑或OR
逻辑非NOT
异或XOR
与0异或保持不变,与1异或则为取反
测试指令TEST
按位相与,结果不送回目标操作数,只影响标志位
除NOT指令,都令CF=OF=0
移位指令
移位次数大于1需放在CL
逻辑/算数左移 SHL/SAL
移出的最后一位数存入CF,空出位补0
逻辑右移SHR
移位后最高位与次高位不等,OF=0,否则为1
算数右移SAR
最高位不是补0,而是保持不变
逻辑位移针对无符号数 算术位移针对有符号数
不含进位循环左移ROL
最高位移入CF后,CF不在参与循环。
不含进位循环右移ROR
含进位循环左移RCL
含进位循环右移RCR
串操作指令
源串默认在数据段,段基地址为DS,允许段超越,偏移地址由SI指定 五条指令重复前缀 REP:无条件重复前缀直至CX=0 REPE:结果相等重复ZF=1,且CX!=0 REPZ:结果为零重复ZF=1,CX!=0 REPNE:不相等重复,ZF=0且CX!=0 REPNZ:结果不为零重复,ZF=0且CX!=0 逻辑位移针对无符号数 算术位移针对有符号数
唯一一组目的与源操作数都为存储单元的指令
串传送指令MOVS
源串默认段基地址为DS偏移地址为SI,目标串段基地址ES,偏移地址DI 不影响标志位
串装入指令LODS
串存储指令STOS
把AL/AX存入ES:DI
不影响状态标致位
串比较指令CMPS
串搜索指令SCAS
将需要搜索的关键字放入AL/AX中
结果不送任何地方,只改变标志位
指明操作类型 DF=0增方向 SB字节,SW字
控制转移类指令
无条件转移指令JMP
条件转移指令
JA
JNA
JNC
JC
JG
JGE
JL
JLE
循环控制类指令
循环次数必须放在CX中 不影响标志位
LOOP
LOOPZ
先CX-1,若ZF=1,跳转目标地址执行
单操作数指令操作数一般不可为立即数
注意事项与INC相同