DJ12-1 8086系列指令系统-1
创始人
2024-02-06 13:06:03
0

指令:能够被计算机识别并执行的二进制代码。

指令系统:所有指令的集合。

指令按功能分类:数据传送类、算术运算类、逻辑运算和移位、串操作、控制转移类、处理器控制。

 

一、8086 指令格式

1. 指令的一般格式

在《计组》里面,我们有对目的地址和目的操作数进行严格区分,但在《微机接口》里面我们统称为目的操作数。

8086 指令的长度在 1~7 字节之间,操作码为 1~2 字节,指令的长度决定于操作数的个数以及所采用的寻址方式。(可见,8086 使用的是 CISC 复杂指令集。)

按操作数数量分类:

  • 零操作数指令
  • 单操作数指令
  • 双操作数指令

 

2. 操作数类型

① 立即数操作数

(关键)立即数是运算数据本身,无地址含义,故无法作目的操作数。由于立即数无法作目的操作数,所以不能用于单操作数指令。

② 寄存器操作数

③ 存储器操作数

存储器操作数的表现形式:[ 内存偏移地址 ]

二、8086 寻址方式

寻址方式:是指获得操作数所在的地址的方法。 

寻址方式分类:

  • 寻找操作数的地址;
  • 寻找要执行的下一条指令的地址,即程序的地址。

后者主要在程序转移或过程调用时用来寻找目标地址或入口地址,这将在调用指令(CALL)或程序转移指令(JMP)中介绍。

 

1. 立即寻址

仅适用于源操作数。

例、MOV  AX,1200H

 

2. 直接寻址

与《计组》中不同,这里只指存储器直接寻址。

指令中直接给出操作数的 偏移地址,默认在 DS 数据段。

允许段重设,即可以通过增加段前缀以实现段超越。比如:ES:[1200H] 。

例、MOV  AX,[1200H] 等价于 MOV  AX,DS:[1200H]

 

3. 寄存器寻址

参加操作的操作数在 CPU 的寄存器中。

例、MOV  AX,BX

 

4. 寄存器间接寻址

特点:

① 寄存器的内容表示操作数的偏移地址。

② 允许的寄存器为 BX、BP、SI、DI,又称为间址寄存器或地址指针

(考点)判断指令的书写正误。

③ 操作数的段地址取决于间址寄存器,允许段重设。

非串操作的情况下:

  • BX、SI、DI:默认为 DS 数据段;
  • BP:默认为 SS 堆栈段。

④ 因为寄存器的内容表示操作数的偏移地址,所以指令中的间址寄存器必须加上方括号。

例、MOV  BX,1200H;MOV  AX,[BX]

 

5. 寄存器相对寻址

① 操作数在内存中的偏移地址由 间址寄存器 的内容加上指令中给出的一个 8 位或 16 位的位移量组成,即 偏移量 = 寄存器内容 + 位移量。

间址寄存器:BX、BP、SI、DI 。

② 操作数所在的段由所使用的间址寄存器决定。

例、指令MOV  AX,Disp[BX]

        假设 DS=6000H,BX=1000H,Disp=08H

        则偏移地址为 BX+Disp=1008H

        操作数物理地址为 61008H

③ 可以使用的寄存器为:BX、BP、SI、DI 。

(记忆)格式可以为:

  • MOV  AX,[BX+Disp]

  • MOV  AX,Disp[BX]

  • MOV  AX,[BX]+Disp

  • MOV  AX,Disp+[BX]

在 CPU 执行指令之前,会需要编译器对指令进行编译。

每一种寻址方式都对应有唯一的编码。

虽然编译器不认识 [BX]+Disp 和 Disp+[BX] 这两种形式,但它会进行语法分析,将其与寄存器相对寻址方式匹配。随后转换为对应的二进制代码,交由 CPU 执行。

 

6. 基址变址寻址

① 操作数的偏移地址 = 一个基址寄存器的内容 + 一个变址寄存器的内容。

② 操作数的段地址由选择的 基址寄存器 决定,允许段重设。

  • 若基址寄存器为 BX,则默认在 DS 数据段;
  • 若基址寄存器为 BP,则默认在 SS 堆栈段。

MOV  AX,[BX][SI] (√)

MOV  AX,[BP][SI] (√)

MOV  AX,[BX]+[SI] (√)

MOV  AX,[BX+SI] (√)

MOV  AX,[BX][BP] (×)

例、MOV  SI,1100H;MOV  BX,SI;MOV AX,[SI+BX]

 

7. 基址-变址-相对寻址

① 操作数的偏移地址 = 基址寄存器的内容 + 变址寄存器的内容 + 位移量。

② 操作数的段地址由选择的 基址寄存器 决定,允许段重设。

(重点)指令中不能同时出现两个基址寄存器或两个变址寄存器。

 

8. 隐含寻址

有些指令的操作码不仅包含了操作的性质,同时还隐含规定了部分操作数。

例、乘法操作(8位 × 8位 → 16位)

这条指令隐含规定了被乘数在 AL 中,同时乘积的结果存放在 AX 中。

相关内容

热门资讯

热苏斯的救赎:阿森纳如何在糟糕... 在本轮英超的焦点战役中,阿森纳以2-1险胜狼队,尽管表现不佳,但球队依然展现出了强大的韧性与求胜欲望...
佩德里破梅西纪录:23岁零18... 在西甲第16轮的比赛中,巴萨迎战奥萨苏纳,年轻的中场天才佩德里以23岁零18天的年龄,成为巴萨历史上...
潮涌大湾区|从“制度之异”到“... 人民日报记者 张烁 贺林平 江琳 同根同源,同心同缘,同梦同圆。 十五运会和残特奥会上,广东木棉花、...
呼和浩特:2名殴打出租车司机的... 央广网呼和浩特12月14日消息(记者魏全民)14日9时27分,记者从呼和浩特市公安局微信公众号了解到...
5000枚火箭弹,33架FPV... 当地时间2025年12月10日,柬埔寨方面传出画面的显示,柬埔寨军队发射了“战术弹道导弹或者远程火箭...
从卫健委回复体检机构“未造假”... 2025年12月13日,红星新闻披露了北京市卫健委对患癌女律师张晓玲投诉爱康国宾事件的正式答复。针对...
天风证券“多事之冬”:半个月前... 来源:每日经济新闻 天眼查信息显示,2025年12月11日,上海市第一中级人民法院开庭审理了一起备...
撕下“警察”标识,露出“保安”... 近期,多地警方破获冒充军人、警察等公职人员的案件,这样的行为触犯了哪些法律,应受到怎样的处罚? 1...
“冤枉我,气得要死!”长沙盲人... 晚上遇盲人老太太求带路,结果发现老太太只找女生,还能看手机? 12月10日,一名女生分享自己在长沙五...