(汇编语言教程)4.指令系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

D W
MOD
REG
R/M
MOD:另一个操作数是在寄存器中还是在存储器中;
REG:规定寄存器操作数; R/M:受MOD控制。
指令执行的时间



指令执行的时间取决于时钟周期长短和执行指令 所需要的时钟周期数。如果涉及内存操作,那么 执行一条指令的时间为基本执行时间加上计算有 效地址所需要的时间。 8086的总线部件和执行部件是并行工作的,因此 在计算指令的基本执行时间时,都假定要执行的 指令已经预先放在指令队列中,即没有算上取指 令时间。 执行一条指令所需要的总时间为基本执行时间、 计算有效地址的时间和为了读取操作数和存放操 作结果而访问内存的时间之和。
PUSH和POP指令对标志位没有影响。
PUSH BX; (BX)=55AAH
SS:[SP]
xxH xxH xxH
xxH
55H
SS:[SP]
AAH
指令执行前
指令执行后
POP BX;
xxH
55H
SS:[SP] AAH SS:[SP]
xxH
55H
AAH
55AAH
BX
指令执行前
指令执行后
2、堆栈操作指令PUSH和POP
汇编指令格式
操作码助记符 目的操作数,源操作数;注释 MOV AX , 2050H ; 立即数

操作码助记符:每条指令必有。

操作数:指令操作的对象或操作对象的地址。 MOV AX,2050H MOV AX,[2050H]
8086/8088指令格式

8086/8088采用了一种灵活的、由1~6个字节 组成的变字长的指令格式。
从存储器取出32位地址的指令LDS及LES
格式:LDS OPRD1,OPRD2
LES OPRD1,OPRD2 其中OPRD1为任意一个16位的寄存器,OPRD2为 32位的存储器地址。 LDS把32位地址指针的段地址送入DS,偏移地址 送入DI ; LES把32位地址指针的段地址送入ES,偏移地址 送入DI。 例如:LDS SI,ABCD LDS BX,FAST[SI] LDS DI,[BX] LES SI,ABCD LES BX,FAST[SI] LES DI,[BX]
立即寻址方式 直接寻址方式 寄存器寻址方式 寄存器间接寻址方式 寄存器相对寻址方式 基址变址寻址方式 基址变址相对寻址方式
知识点回顾

微型计算机系统的每一条指令通常由操作码字段 和操作数字段两部分组成 。 操作码 操作数

操作码字段:指令助记符,如MOV,ADD,CMP等。 操作数字段:参加本指令操作的数据。可以直接 给出数据,也可以是数据的地址,还可以是其它 能间接获得操作数的信息。根据操作数的设置情 况,有些指令需要一个或两个操作数,也有些指 令不需要操作数。
使用MOV指令传送数据需注意的几点:
1. 2.
3.
立即数只能作为源操作数,不允许作目的 操作数,立即数也不能送至段寄存器。 通用寄存器可以与段寄存器、存储器互相 传送数据,寄存器之间也可以互相传送。 但是CS不能作为目的操作数,IP不能参加 数据传送。 存储器与存储器之间不能进行数据直接传 送。若要实现存储单元之间的数据传送, 可以借助于通用寄存器作为中介来进行。 例3-15
2、堆栈操作指令PUSH和POP

堆栈被定义为一种先进后出的数据结构, 即最后进栈的元素将被最先弹出来。 堆栈从一个称为栈底的位置开始,数据进 入堆栈的操作称为压入(或压栈),数据 退出堆栈的操作称为弹出,每进行一次弹 出操作,堆栈就减少一个元素,最后一次 压入的元素,称为栈顶元素,压入弹出操 作都是对栈顶元素进行的堆栈的两种基本 的操作。
LES BX,TABLE
; (BX)=0040H ; (ES)=3000H
二、算术运算类指令
1. 2. 3.
4.
5.
加法指令 减法指令 乘法指令 除法指令 十进制调整指令
1、加法指令
1. 2. 3. 4. 5.
加法指令ADD
带进位加法指令ADC 加1指令INC AAA指令 DAA指令
加法指令ADD
1. 数据传送指令MOV



指令格式:MOV OPRD1,OPRD2 OPRD1可以是寄存器或存储器操作数; OPRD2可以是寄存器、存储器操作数或立 即数。 功能:将一个8位/16位的源操作数(字节或 字)送到目的操作数。OPRD2→OPRD1。 本指令不影响状态标志位。 注意:源操作数和目的操作数的类型要一 致。

立即数到通用寄存器的数据传送指令
立即数只能作为源操作数使用,不能作为目的 操作时使用。 MOV AL, 5FH MOV BX, 4050 MOV CH, 0AH MOV SP, 3100H

1、数据传送指令MOV

寄存器与存储器之间的数据传送指令
MOV AL, BUF1 MOV AX, BUF2 MOV AL, [1000H] MOV [DI], DL MOV AX, [BX+SI] MOV [BX+DI+100H], CL
1、数据传送指令MOV

寄存器与寄存器之间的数据传送指令

MOV AX, BX MOV CL, AL MOV DX, ES MOV DS, AX MOV BP, SI

代码寄存器CS及指令指针IP不参加数的传送。 CS可作为源操作数参加传送,但不能作为目的操 作数参加传送。
Leabharlann Baidu
1、数据传送指令MOV
2、堆栈操作指令PUSH和POP
指令格式:PUSH OPRD POP OPRD 其中:OPRD为16位(字)操作数,可以是寄存 器或存储器操作数。 PUSH的操作过程:

(SP) ←(SP)-2,(SP) ←OPRD OPRD ←(SP),(SP) ←(SP )+2

POP的操作过程:





格式 : XLAT TABLE 本指令的功能是把待查表格的一个字节内 容送到AL累加器中。 即: (AL)←((BX)+(AL))。 其中TABLE为一待查表格的首地址,在执 行该指令前,应将TABLE先送至BX寄存器 中,然后将待查字节与在表格中距表首地 址位移量送AL。 指令对标志位没有影响。

MOV指令示例
MOV AX,BX MOV DS,AX MOV AL,25H MOV SP,2F00H MOV AX,[SI] MOV SI,ES:[BP] MOV DISP[BX+DI],ES MOV BYTE PTR [SI],40 MOV CL,AL MOV BP,SI MOV BX,20A0H MOV AL,BUF MOV DISP[BX+DI],DL MOV DS,DATA[BX+SI] MOV BUF,25

从堆栈中弹出一个数据字送到FLAG中的指令 POPF
执行操作: (FLAGS)((SP)+1,(SP)) (SP)(SP)+ 2
取FLAG标志寄存器低8位至AH 指令LAHF
将AH存至FLAG低8位指令SAHF
6、地址传送指令
1. 2.
有效地址指令LEA 从存储器取出32位地址的指令LDS及LES
查表示意图
查表步骤(求某数的平方) ①在内存中建立数据表格; ②将表格的首地址送入BX中; ③假定要求“3”的平方,将3送 入 寄存器AL中; ④执行指令 XLAT; ⑤执行:AL←[BX+3](DS) 执行结束:AL= 9。 AL中的内容被“换码”!
表格首地址
××××H
25 16 09 04 01 00
汇编语言
无私哥奉献
知识点回顾

寻址方式 MOV AX, 2050H MOV AX, [2050H] MOV AX, BX MOV AX, [BX] MOV AX, 2050H[BX] MOV AX, [BP][SI] MOV AX, [BX+SI+2050H]

8086/8088指令系统
1. 2. 3.
4.
5.
6.
7.
数据传送类指令 算术运算类指令 逻辑操作类指令 程序控制类指令 数据串操作类指令 处理器控制类指令 输入/输出类指令
一、数据传送指令
1. 2. 3.
4.
5.
数据传送指令MOV 堆栈操作指令PUSH和POP 数据交换指令XCHG 查表指令XLAT 地址传送指令

格式:ADD OPRD1,OPRD2 功能:OPRD1 ← OPRD1 + OPRD2
OPRD1为任一通用寄存器或存储器操作数。 OPRD2为立即数,也可以是任意一个通用寄 存器或存储器操作数。立即数只能用于源操 作数。 对CF、SF、OF、PF、ZF、AF都会有影响。 加法指令适用于无符号数或有符号数的加法 运算;操作数可以是8位或16位。 两个存储器操作数不能直接相加。
5、标志传送指令

取FLAG标志寄存器低8位至AH指令LAHF
执行操作:(AH)←(FLAGS的低字节)

将AH存至FLAG低8位指令SAHF
执行操作: (FLAGS的低字节)(AH)

将FLAG内容入栈指令PUSHF
执行操作: (SP)(SP) - 2 ((SP)+1, (SP))(FLAGS)

1、数据传送指令MOV

立即数到存储器之间的数据传送指令
立即数只能作为源操作数,且一定要使立即数 与存储器变量类型一致。 MOV BUF, 25 MOV DS:DISP[SP], 1234H MOV BYTE PTR [SI], 40

1、数据传送指令MOV

寄存器与存储器之间的数据传送
带进位加法指令ADC
指令格式:ADC OPRD1,OPRD2 OPRD1 ← OPRD1 + OPRD2 + CF 其中OPRD1、OPRD2同指令ADD中的含义。


ADD BYTE PTR[BX], 82 例3-19
加1指令INC
格式:INC OPRD

OPRD为寄存器或存储器操作数。这条指令的功 能是对给定的操作数加1后,再返回该操作数。
数据交换指令是将两个操作数相互交换位置。 指令格式:XCHG OPRD1,OPRD2 如:XCHG AX,BX XCHG SI,AX XCHG DL,DH XCHG DX,BUF XCHG WBUF,CX 指令对标志位没有影响。 注意:两存储器之间不能使用XCHG实现。


例3-18
4、查表指令XLAT

TABLE → 3000H:1000H
40 H
00 H
00 H 30 H
MOV BX,TABLE
; (BX)=0040H
MOV BX,OFFSET TABLE ; (BX)=1000H LEA BX,TABLE LDS BX, TABLE
; (BX)=1000H ; (BX)=0040H ; (DS)=3000H
有效地址指令LEA

格式:LEA OPRD1,OPRD2 OPRD1为目的操作数,可为任意一个16位的通 用寄存器。 OPRD2为源操作数,可为变量名、标号或地址 表达式。 本指令的功能是将源操作数给出的有效地址传 送到指定的寄存器中。
例如:LEA BX,DATA1 LEA DX,BETA[BX+SI] LEA BX,[BP][DI]
MOV AL, BUF1 MOV AX, BUF2 MOV AL, [1000H] MOV [DI], DL MOV AX, [BX+SI] MOV [BX+DI+100H], CL

1、数据传送指令MOV

立即数到存储器的数据传送
MOV BUF, 25 MOV DS:DISP[BP], 1234H MOV BYTE PTR [SI], 40
main
sub1 sub2 sub3
A
B
C
合理的的入栈操作指令
PUSH PUSH PUSH PUSH PUSH PUSH DX SI BP CS BUFFER DAT[BX][SI]
合理的的出栈操作指令
POP POP POP POP AX DS BUFFER DAT[BX][DI]
3、数据交换指令XCHG
通常指令的第一个字节为操作码,规定指 令的操作类型。第二字节规定操作数的寻 址方式。接着以后的若干个字节依据指令 的不同而取舍。可变字长的指令主要体现 在这里,一般由它指出存储器操作数地址 的位移量或立即数。

8086/8088指令格式
操作码
第一个字节: 操作码:规定指令的操作类型; D(0/1):寄存器操作时为源操作数/目的操作数; W(0/1):操作数类型,字节/字; 第二个字节:
相关文档
最新文档