8086指令系统

一.数据寻址方式

1.立即数寻址

立即数是一般的16进制常熟,以下MOV指令的寻址方式即为立即数寻址,立即数只能是源操作数: MOV BL,80H MOV AX,1090H

2.寄存器寻址

对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP
对于8位操作数,寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH。
例如: MOV CL,DL MOV AX,BX

3.存储器寻址

(1)直接寻址:

如果没有特殊说明,直接寻址方式的操作数一般在存储器的数据段中,即隐含的段寄存器是DS
MOV BL,[1064H]
MOV AX,[109H]

假设DS=2000H上面两条指令的源操作数的物理存储单元分别为:
P1=DS10H+1064H=20000H+1064H=21064H
P2=DS
10H+109H=20000H+109H=20109H

假如源操作数在别的段寄存器当中,可以段超越声明:
MOV AL,ES:[1064H]

(2)寄存器间接寻址:

寄存器中存储了操作数存储单元的物理地址 MOV AX, [SI] MOV [BX], AL
允许作为间接寻址的寄存器有: SI,DI,BX

(3)寄存器相对寻址

MOV [SI+10H], AX
MOV CX, [BX+COUNT]

(4)基址变址寻址

MOV [BX+DI], AX
MOV AH,[BP][SI]

(5)基址变址相对寻址

MOV AH, [BP+SI+1234H]
MOV [BP+SI+DATA],CX
MOV AX,[BX][SI]COUNT

二.数据传送指令

1.数据传送MOV指令

格式:MOV dst,src
作用:将源操作数传送给目的操作数

传送立即数时,不能直接用立即数给段寄存器CS,DS,SS,ES和控制寄存器IP,FLAGS赋值,其中CS任何情况都不能通过MOV指令赋值。

立即数可以先存放到通用寄存器当中,再将通用寄存器作为源操作数给目的段寄存器赋值,例如:

MOV DS 2000这样的写法是错误的,正确的写法应该是:

MOV AX 2000 ;先将2000存入AX寄存器中
MOV DS AX ;再将AX中的2000赋值给DS段存储器

2.堆栈操作指令

内存中高位是栈底,低位是栈顶。

(1)入栈指令PUSH

格式:PUSH src
作用:将源操作数放入堆栈段栈顶位置SP,并且SP指针-2(如果src是字节,则SP-1)

(2)出栈指令POP

格式:POP dst
作用:将堆栈指针指向的内存单元的数据弹出栈,并存放到目的操作数dst中,然后SP的值+2(如果弹出的是字节,则SP+1)

3.数据交换指令XCHG

格式:XCHG dst,src
作用:将目的操作数和源操作数的数据进行交换,二者不能同时为存储器。

4.目标地址传送指令

(1)取有效地址指令LEA

格式:LEA reg16,mem
作用:目的操作数必须是16位通用寄存器,源操作数是存储器操作数。将源操作数的有效地址,即16位偏移地址传送到目标寄存器中。

以下两条语句的作用是相同的:

LEA BX , BUFFER

MOV BX , OFFSET BUFFER

都是将变量BUFFER的偏移地址存入BX寄存器中

(2)地址指针装入DS指令LDS

格式:LDS reg16,mem32
作用:将一个32位的远地址指针作为源操作数,其中包括高16位的段地址和低16位的偏移地址。段地址传送到DS中,而偏移地址传送到目的操作数指定的寄存器中。

三.算数运算指令

1.加法指令

(1)加法指令ADD

格式:ADD dst,src
作用:将目的操作数dst与源操作数进行相加,结果保存在目的操作数dst当中。

(2)带进位的加法指令ADC

格式:ADC dst,src
作用:将目的操作数dst与源操作数以及CF进行相加,结果保存在目的操作数dst当中。

(3)加1指令INC

格式:INC dst
作用:让目的操作数dst的值加1,不改变CF的值

2.减法指令

(1)减法指令SUB

格式:SUB dst,src
作用:将dst作为被减数,src作为减数进行相减,结果保存在目的操作数dst当中。

(2)带借位的减法指令

格式:SBB dst,src
作用:将dst作为被减数,src作为减数进行相减,再减去CF,结果保存在目的操作数dst当中。

(3)减1指令DEC

格式:DEC dst
作用:将目的操作数dst的值减1,不改变CF的值

3.乘法指令

(1)无符号乘法指令MUL

格式:MUL src
作用:如果是字节乘法,则操作数src与AL进行相乘,结果保存在AX当中
如果是字乘法,则操作数与AX机型相乘,高位保存在DX当中,低位保存在AX当中
如果运算结果的高半部分结果为0,则CF=OF=0,否则CF=OF=1.

(2) 有符号乘法指令IMUL

格式:IMUL src
作用:如果是字节乘法,则操作数src与AL进行相乘,结果保存在AX当中
如果是字乘法,则操作数与AX机型相乘,高位保存在DX当中,低位保存在AX当中
如果高半部分仅仅是第半部分符号位的扩展,则CF=OF=1,否则CF=OF=0.

4.除法指令

(1)无符号除法指令DIV

格式:DIV src
作用:规定被除数的长度是除数的两倍
字节除法:被除数在AX当中而src作为除数进行除法运算,结果的商保存在AL当中,余数保存在AH当中。
字除法:被除数在DX:AX当中而src作为除数进行除法运算,结果的商保存在AX当中,余数保存在DX当中。

(2)有符号除法指令IDIV

格式:IDIVL src
作用:运算方法与DIV一致,IDIV指令对非整数商舍去尾数,而余数的符号总是与被除数的符号相同。

四.位操作运算指令

1.逻辑运算指令

逻辑运算指令的目的操作数可以是寄存器或存储器,源操作数可以是立即数,寄存器或存储器,但是目的操作数和源操作数不能同时位存储器。

(1)逻辑与指令AND

格式:AND dst src
作用:将目的操作数与源操作数进行按位与运算,结果保存在目的操作数当中。

(2)逻辑或指令OR

格式:OR dst src
作用:将目的操作数与源操作数进行按位或运算,结果保存在目的操作数当中。

(3)逻辑异或指令XOR

格式:XOR dst src
作用:将目的操作数与源操作数进行按位异或运算,结果保存在目的操作数当中。

(4)逻辑非指令NOT

格式:NOT dst src
作用:将目的操作数与源操作数进行按位非运算,结果保存在目的操作数当中。

2.移位指令

(1)逻辑左移指令SHL

格式:SHL dst 1/CL
作用:将目的操作数左移1位或左移CL中存的位数。

(2)逻辑右移指令SHR

格式:SHL dst 1/CL
作用:将目的操作数右移1位或右移CL中存的位数。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值