汇编指令详解

编号:06

课时和授课时间:

课时:4学时;授课时间: 年 月 日

教学课型:

理论课

题目:

第3章,第1-3节

教学目的与要求:

掌握指令格式以及寻址方式

教学重点:

指令寻址方式

教学难点:

存储器寻址方式

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.1 基本数据类型

3.2 IA-32的指令格式

从8088/8086的指令格式入手,学习:

立即数寻址方式

寄存器寻址方式

存储器寻址方式

进而熟悉8088/8086汇编语言指令格式,尤其是其中操作数的表达方法

为展开8088/8086指令系统做好准备

1. 指令的组成

操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分

操作数是指令执行的参与者,即各种操作的对象

有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数

2. 指令的助记符格式

操作码 操作数1,操作数2 ;

操作数2,常被称为源操作数src ,它表示参与指令操作的一个对象

操作数1,常被称为目的操作数dest ,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果 分号后的内容是对指令的解释

每种指令的操作码:

用一个助记符表示(指令功能的英文缩写)

对应着机器指令的一个或多个二进制编码

指令中的操作数:

可以是一个具体的数值

可以是存放数据的寄存器

或指明数据在主存位置的存储器地址

3.3 操作数的寻址方式

指令系统设计了多种操作数的来源

寻找操作数的过程就是操作数的寻址

寻找操作数的方式叫做(操作数)寻址方式

理解操作数的寻址方式是理解指令功能的前提

操作数采取哪一种寻址方式

一方面,会影响处理器执行指令的速度和效率

另一方面,对程序设计也很重要

3.3.1 立即数寻址方式

指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)

这种操作数被称为立即数

imm

可以是8位数值i8(00H ~FFH )

也可以是16位数值i16(0000H ~FFFFH )

立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现

3.3.2 寄存器寻址方式

操作数存放在CPU 的内部寄存器reg 中:

8位寄存器r8:

AH 、AL 、BH 、BL 、CH 、CL 、DH 、

DL

16位寄存器r16:

AX 、BX 、CX 、DX 、SI 、DI 、BP 、

SP

4个段寄存器seg :

CS 、DS 、SS 、

ES

寄存器名表示其内容(操作数)

3.3.3 存储器寻址方式

操作数在主存储器中,用主存地址表示

程序设计时,8088采用逻辑地址表示主存地址

段地址在默认的或用段超越前缀指定的段寄存器中

指令中只需给出操作数的偏移地址(有效地址EA )

8086设计了多种存储器寻址方式

1、直接寻址方式

2、寄存器间接寻址方式

3、寄存器相对寻址方式

4、基址变址寻址方式

5、相对基址变址寻址方式

1. 直接寻址方式

直接寻址方式的有效地址在指令中直接给出

默认的段地址在DS 段寄存器,可使用段超越前缀改变

用中括号包含有效地址,表达存储单元的内容

如:MOV AX, [2000H] ;AX ←DS:[2000H]

MOV AX, ES: [2000H] ;AX ←ES:[2000H]

2. 寄存器间接寻址方式

有效地址存放在基址寄存器BX 或变址寄存器SI 、DI 中

默认的段地址在DS 段寄存器,可使用段超越前缀改变 如:MOV AX, [BX] ;AX ←DS:[BX]

4. 基址变址寻址方式

有效地址由基址寄存器(BX 或BP )的内容加上变址寄存

器(SI 或DI )的内容构成:

有效地址=BX/BP+

SI/DI

段地址对应BX 基址寄存器默认是DS ,对应BP 基址寄存器默认是SS ;可用段超越前缀改变

如:MOV AX, [BX+SI] ;AX ←DS:[BX+SI]

5. 相对基址变址寻址方式

有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:

有效地址=BX/BP+SI/DI+8/16位位移量

段地址对应BX 基址寄存器默认是DS ,对应BP 基址寄存器默认是SS ;可用段超越前缀改变

如:MOV AX, [BX+DI+6] ;AX ←DS:[BX+DI+6]

MOV AX, 6[BX+DI] MOV AX, 6[BX][DI]

6. 存储器寻址方式中的变量

变量指示内存中的数据,变量名具有地址属性。存储器寻址方式中经常采用变量形式

变量的定义

如:WV AR DW 1234H

;定义16位变量WV AR ,具有初值1234H

;假设其偏移地址为10H

单独引用变量名是直接寻址方式

如:MOV AX,WVAR ;指令功能:AX =1234H

;等同于 MOV AX,[0010H]

相对寻址方式中,变量名表示其偏移地址,相当于位移量 如:MOV AX, [DI+WVAR] ;= MOV AX,WVAR[DI]

;等同于 MOV AX,[DI+0010H]

相对寻址方式中的位移量

在寄存器相对和相对基址变址寻址方式中,其位移量不仅可用常量表示,也可用符号表示

这个符号可以是变量名,例如WV AR 变量,而且支持多种表达形式

如:MOV AX, [DI+WVAR] ;

;等同于 MOV AX, WVAR[DI]

MOV AX,[BX+SI+WVAR]

;等同于 MOV AX, [SI+WVAR] [BX]

;等同于 MOV AX, WVAR[BX+SI]

;等同于 MOV AX, WVAR[BX][SI]

课后要求与作业:复习本次课所讲内容,完成课后作业3.1、

3.2、3.4、3.5、3.6

编号: 07

课时和授课时间:

课时:4学时;授课时间: 年 月 日

教学课型:

理论课

题目:

第3章,第4节

教学目的与要求:

掌握数据传送类指令的使用

教学重点:

常见非法指令类型、堆栈概念

教学难点:

堆栈操作规则、非法指令判断

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.4. IA-32的通用指令

3.4.1 数据传送类指令

数据传送是计算机中最基本最重要的一种操作, 传送指令也是最常使用的一类指令

传送指令把数据从一个位置传送到另一个位置

除标志寄存器传送指令外,均不影响标志位

重点掌握 MOV XCHG XLAT PUSH POP

3.4.1.1 通用数据传送指令

提供方便灵活的通用传送操作

有3条指令

MOV XCHG XLAT

1. 传送指令MOV (move )

把一个字节或字的操作数从源地址传送至目的地址

(1)、MOV 指令--立即数传送

如:mov cl,4 ;cl ←4,字节传送

mov dx,0ffh ;dx ←00ffh ,字传送

mov si,200h ;si ←0200h ,字传送

mov bvar,0ah ;字节传送

;假设bvar 是一个字节变量,定义如下:bvar db 0 mov wvar,0bh ;字传送

;假设wvar 是一个字变量,定义如下:wvar dw 0

(2)、MOV 指令--寄存器传送

如:mov ah,al ;ah ←al ,字节传送

mov bvar,ch ;bvar ←ch ,字节传送

mov ax,bx ;ax ←bx ,字传送

mov ds,ax ;ds ←ax ,字传送

(3)、MOV 指令--存储器传送

如:mov al,[bx] ;al ←ds:[bx]

mov dx,[bp] ;dx ←ss:[bp+0]

mov dx,[bp+4] ;dx ←ss:[bp+4]

mov es,[si] ;es ←ds:[si]

(4)、MOV 指令--段寄存器传送

如:mov ax,ds ;ax ←ds

mov es,ax ;es ←ax ←ds

2. 交换指令XCHG (exchange )

把两个地方的数据进行互换

寄存器与寄存器之间对换数据

寄存器与存储器之间对换数据

不能在存储器与存储器之间对换数据

3. 换码指令XLAT (translate )

将BX 指定的缓冲区中、AL 指定的位移处的一个字节数据取出赋给

AL

换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码,表格首地址存放于BX ,AL 存放相对表格首地址的位移量

换码指令执行后:将AL 寄存器的内容转换为目标代码

3.4.1.2 堆栈操作指令

堆栈是一个“先进后出” (或说“后进先出” )的主存区域,

位于堆栈段中;SS 段寄存器记录其段地址

堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP 指定

堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH 和POP

1. 进栈指令PUSH

进栈指令先使堆栈指针SP 减2,然后把一个字操作数存入堆栈顶部

2. 出栈指令POP

出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP 加2

3.4.1.3 标志操作指令

1. 标志位操作指令

CLC ;复位进位标志:CF ←0

STC ;置位进位标志:CF ←1

CMC ;求反进位标志:CF ←~CF

CLD ;复位方向标志:DF ←0

STD ;置位方向标志:DF ←1

CLI ;复位中断标志:IF ←0

STI ;置位中断标志:IF ←1

2. 标志寄存器低字节与AH 的传送指令

LAHF SAHF

3. 标志寄存器出入堆栈指令

PUSHF POPF

3.4.1.4 地址传送指令

1. 取有效地址指令LEA ;

2. 将地址指针装入DS(数据段寄存器) 指令LDS ;

3. 将地址指针装入ES(附加段寄存器) 指令LES

1. 有效地址传送指令LEA (load effective address)

将存储器操作数的有效地址送至指定的16位通用寄存器 如:mov bx,400h

mov si,3ch

lea bx,[bx+si+0f62h]

;BX ←400H +3CH +0F62H =139EH

2. 地址指针装入DS 指令 LDS

功能:把源操作数有效地址所对应的双字长的内存单元中的高字内容(一般为16位段地址) 送入DS ,低字内容(一般为偏移地址)

送入指令所指定的寄存器中。

格式: LDS REG , MEM

例:LDS DI, [2130H ] ; 执行此指令后,将[2130H]和[2131H ]中的内容(偏移量) 送到DI 中,而将[2132H]和[2133H]中的内容(段值) 送到DS 中。

3. 将地址指针装入ES(附加段寄存器) 指令LES

功能:把源操作数有效地址所对应的双字长的内存单元中的高字内容(一般为16位段地址) 送入ES , 低字内容(一般为偏移地址) 送入指令所指定的寄存器中。LES 与LDS 的指令格式及使用方法是相似的。

格式: LES REG , MEM

例: LES DI, [2130H ] ; 执行此指令后,将[2130H]和[2131H]中的内容(偏移量) 送到DI 中,而将[2132H]和[2133H]中的内容(段值) 送到ES

课后要求与作业:复习本次课所讲内容,完成课后作业3.8、

3.9、3.11、3.12

编号:08

课时和授课时间:

课时:4学时;授课时间: 年 月 日 教学课型:

理论课

题目:

第3章,第4节

教学目的与要求:

掌握算术运算类指令、符号扩展指令的使用 教学重点:

算术运算类指令对标志位的影响

教学难点:

标志位,尤其是溢出标志的判断

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.4.2 算术运算类指令

算术运算类指令用来执行二进制的算术运算:加减乘除。

这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志

重点掌握

加法指令:ADD 、ADC 、INC

减法指令:SUB 、SBB 、DEC 、CMP 、NEG 调整类指令

3.4.2.1 加法和减法指令

加法指令:ADD, ADC和INC

减法指令:SUB, SBB, DEC, NEG和

CMP

它们分别执行字或字节的加法和减法运算,除INC 和DEC

不影响CF 标志外,其它按定义影响全部状态标志位

操作数组合:

助记符 reg, imm/reg/mem

助记符 mem, imm/reg

3.4.2.2 符号扩展指令

符号扩展是指用一个操作数的符号位(最高位)形成另一

个操作数,后一个操作数的高位是全0(正数)或全1(负

数)

符号扩展虽然使数据位数加长,但数据大小并没有改变,

扩展的高部分仅是低部分的符号扩展

符号扩展指令有两条,用来将字节转换为字,字转换为双

CBW ;AL 符号扩展成AX (P91)

CWD ;AX 符号扩展成DX (P91)

课后要求与作业:复习本次课所讲内容,完成课后作业3.16、

3.17、3.19、3.20

编号:09

课时和授课时间:

课时:4学时;授课时间: 年 月 日

教学课型:

理论课

题目:

第3章,第4节

教学目的与要求:

掌握位操作类指令、串操作指令的使用

教学重点:

位操作类类指令对标志位的影响、重复串操作

教学难点:

字符串操作指令重复前缀的使用

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.4.3 位操作类指令

位操作类指令以二进制位为基本单位进行数据的操作

当需要对字节或字数据中的各个二进制位操作时,可以考

虑采用位操作类指令

注意这些指令对标志位的影响

1. 逻辑运算指令

AND OR XOR NOT TEST

2. 移位指令

SHL SHR SAR

3. 循环移位指令

ROL ROR RCL RCR

3.4.4 串操作指令(P100)

1、串数据类型

串操作指令的操作数是主存中连续存放的数据串(String )

——即在连续的主存区域中,字节或字的序列

串操作指令的操作对象是以字(W )为单位的字串,或是

以字节(B )为单位的字节串

2、串寻址方式

源操作数用寄存器SI 寻址,默认在数据段DS 中,但允许

段超越:

DS:[SI]

目的操作数用寄存器DI 寻址,默认在附加段ES 中,不允

许段超越:

ES:[DI]

每执行一次串操作指令,SI 和DI 将自动修改:

±1(对于字节串)或±2(对于字串)

执行指令CLD 指令后,DF = 0,地址指针增1或

2

执行指令STD 指令后,DF = 1,地址指针减1或2

3、串传送MOVS (move string) (P101)

把字节或字操作数从主存的源地址传送至目的地址

4、串比较CMPS (compare string) (P101)

将主存中的源操作数减去至目的操作数,以便设置标志,

进而比较两操作数之间的关系

5、串扫描SCAS (scan string) (P102)

将AL/AX减去至目的操作数,以便设置标志,进而比较

AL/AX与操作数之间的关系

6、串读取LODS (load string) (P103)

把指定主存单元的数据传送给AL 或AX

7、串存储STOS (store string) (P103)

把AL 或AX 数据传送至目的地址

8、重复前缀指令(repeat ) (P133)

串操作指令执行一次,仅对数据串中的一个字节或字量进

行操作。但是串操作指令前,都可以加一个重复前缀,实

现串操作的重复执行。重复次数隐含在CX 寄存器中

重复前缀分两类,3条指令:

配合不影响标志的MOVS 、STOS (和LODS )指令

的REP 前缀

配合影响标志的CMPS 和SCAS 指令的REPZ 和

REPNZ 前缀

课后要求与作业:复习本次课所讲内容,完成补充习题

1. 如果TABLE 为数据段中3400H 单元的符号名,其中存放的

内容为0505H ,则执行指令MOV AX ,TABLE 后,

LEA AX ,TABLE

后,AX= 。指令MOV BX ,

TABLE 执行后,结果是

2. 已知AL=9EH,DL=8AH,执行指令CMP AL,DL 后,CF 、

OF 、SF 、ZF 、PF 标志的状态分别为

3. 已知AL 的内容为6BH ,执行指令NEG AL 后,再执行

CBW ,AX 中的内容为

4. 已知执行执行前,DI=0300H,BX=0100H,CF=0,DS=2000H,

SS=3000H,BP=0100H,[DS:0310H]=0AA55H。则:

(1). 执行指令RCR WORD PTR [BX+DI],1后,目的操

作数和CF 的值分别为 。

(2). 指令MOV AL ,[BP+0100H]的源操作数的物理地址

为 (3). 指令POP 0300H[DI]的源操作数物理地址为

5. 设AX=20BCH,DX=45A2H。有如下程序段,按要求写出

连续执行相应指令后寄存器的内容。

MOV CL ,04H

SHL DX ,CL ; MOV BL ,AH

SHL AX ,CL ;

SHR BL ,CL ;

XOR DL ,BL ;

6. 当使用串操作指令CMPSW 寻找两串中的不同数据时应使

用的重复前缀为 。

7. 设BX=987FH,执行指令NEG BX 后,指明BX 和各状态

标志的值。若在该指令执行后OF 标志位为1,则在该指

令执行前和执行后BX 的内容各为多少?这时各标志位的

内容是什么?

编号:10

课时和授课时间:

课时:4学时;授课时间: 年 月 日

教学课型:

理论课

题目:

第3章,第4节

教学目的与要求:

掌握控制传送类指令的使用

教学重点:

调用转移类指令

教学难点:

调用转移类指令目标地址的形成、调用类指令断点状态的保护

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.4.5 控制传送类指令(P104)

控制传送类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的常用指令

重点掌握:

CALL/RET JMP/Jcc/LOOP/JCXZ

INT n/IRET 常用系统功能调用

目标地址的寻址方式

相对寻址方式

指令代码中提供目的地址相对于当前IP 的位移量,转移到的目的地址(转移后的IP 值)就是当前IP

值加上位移量

直接寻址方式

指令代码中提供目的逻辑地址,转移后的CS 和IP 值直接来自指令操作码后的目的地址操作数

间接寻址方式

指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中间接获得

目标地址的寻址范围:段内寻址

段内转移——近转移(near )

在当前代码段64KB 范围内转移( ±32KB 范围)

不需要更改CS 段地址,只要改变IP 偏移地址

段内转移——短转移(short )

转移范围可以用一个字节表达,在段内-128~+127范围的转移

目标地址的寻址范围:段间寻址

段间转移——远转移(far )

从当前代码段跳转到另一个代码段,可以在1MB 范围

需要更改CS 段地址和IP 偏移地址

目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址

1. 子程序指令

子程序是完成特定功能的一段程序

当主程序(调用程序)需要执行这个功能时,采用CALL 调用指令转移到该子程序的起始处执行

当运行完子程序功能后,采用RET 返回指令回到主程序继续执行

2. 无条件转移指令(P105)

只要执行无条件转移指令JMP ,就使程序转到指定的目标地址,从目标地址处开始执行指令

操作数label 是要转移到的目标地址(目的地址、转移地址)

JMP 指令分成4种类型:

⑴ 段内转移、相对寻址

⑵ 段内转移、间接寻址

⑶ 段间转移、直接寻址

⑷ 段间转移、间接寻址

3. 条件转移指令(P58)

条件转移指令Jcc 根据指定的条件确定程序是否发生转移。其通用格式为:

Jcc label ;条件满足, 发生转移

;IP ←IP +8位位移量;

;否则,顺序执行

label 是一个标号、一个8位位移量,表示Jcc 指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移

label 只支持短转移的相对寻址方式

4.Jcc 指令

Jcc 指令不影响标志,但要利用标志(表)

根据利用的标志位不同,分成三种情况:

⑴ 判断单个标志位状态

⑵ 比较无符号数高低

⑶ 比较有符号数大小

5. 循环指令(P106)

一段代码序列多次重复执行就是循环

8088设计有针对CX 计数器的计数循环指令

LOOP label ;循环指令

;首先CX ←CX -1;然后判断;若CX ≠0,转移 JCXZ label ;为0循环指令

:如果CX =0,则转移

label 操作数采用相对短寻址方式

还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条指令

6. 中断指令和系统功能调用(P107)

中断(Interrupt )是又一种改变程序执行顺序的方法

8088CPU 支持256个中断,每个中断用一个编号(中断向量号)区别

中断指令有3条:

INT i8 IRET

INTO

本节主要掌握类似子程序调用指令的中断调用指令INT i8,进而掌握系统功能调用

3.4.6 处理器控制类指令(P109)

处理器控制类指令用来控制CPU 的状态,使CPU 暂停、等待或空操作等

NOP ;空操作指令,等同于“xchg ax,ax”指令 SEG: ;段超越前缀指令:CS:,SS:,DS:,ES: HLT ;暂停指令:CPU 进入暂停状态

其他指令:LOCK ESC WAIT 课后要求与作业:复习本次课所讲内容,完成课后作业3.24

编号:06

课时和授课时间:

课时:4学时;授课时间: 年 月 日

教学课型:

理论课

题目:

第3章,第1-3节

教学目的与要求:

掌握指令格式以及寻址方式

教学重点:

指令寻址方式

教学难点:

存储器寻址方式

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.1 基本数据类型

3.2 IA-32的指令格式

从8088/8086的指令格式入手,学习:

立即数寻址方式

寄存器寻址方式

存储器寻址方式

进而熟悉8088/8086汇编语言指令格式,尤其是其中操作数的表达方法

为展开8088/8086指令系统做好准备

1. 指令的组成

操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分

操作数是指令执行的参与者,即各种操作的对象

有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数

2. 指令的助记符格式

操作码 操作数1,操作数2 ;

操作数2,常被称为源操作数src ,它表示参与指令操作的一个对象

操作数1,常被称为目的操作数dest ,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果 分号后的内容是对指令的解释

每种指令的操作码:

用一个助记符表示(指令功能的英文缩写)

对应着机器指令的一个或多个二进制编码

指令中的操作数:

可以是一个具体的数值

可以是存放数据的寄存器

或指明数据在主存位置的存储器地址

3.3 操作数的寻址方式

指令系统设计了多种操作数的来源

寻找操作数的过程就是操作数的寻址

寻找操作数的方式叫做(操作数)寻址方式

理解操作数的寻址方式是理解指令功能的前提

操作数采取哪一种寻址方式

一方面,会影响处理器执行指令的速度和效率

另一方面,对程序设计也很重要

3.3.1 立即数寻址方式

指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)

这种操作数被称为立即数

imm

可以是8位数值i8(00H ~FFH )

也可以是16位数值i16(0000H ~FFFFH )

立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现

3.3.2 寄存器寻址方式

操作数存放在CPU 的内部寄存器reg 中:

8位寄存器r8:

AH 、AL 、BH 、BL 、CH 、CL 、DH 、

DL

16位寄存器r16:

AX 、BX 、CX 、DX 、SI 、DI 、BP 、

SP

4个段寄存器seg :

CS 、DS 、SS 、

ES

寄存器名表示其内容(操作数)

3.3.3 存储器寻址方式

操作数在主存储器中,用主存地址表示

程序设计时,8088采用逻辑地址表示主存地址

段地址在默认的或用段超越前缀指定的段寄存器中

指令中只需给出操作数的偏移地址(有效地址EA )

8086设计了多种存储器寻址方式

1、直接寻址方式

2、寄存器间接寻址方式

3、寄存器相对寻址方式

4、基址变址寻址方式

5、相对基址变址寻址方式

1. 直接寻址方式

直接寻址方式的有效地址在指令中直接给出

默认的段地址在DS 段寄存器,可使用段超越前缀改变

用中括号包含有效地址,表达存储单元的内容

如:MOV AX, [2000H] ;AX ←DS:[2000H]

MOV AX, ES: [2000H] ;AX ←ES:[2000H]

2. 寄存器间接寻址方式

有效地址存放在基址寄存器BX 或变址寄存器SI 、DI 中

默认的段地址在DS 段寄存器,可使用段超越前缀改变 如:MOV AX, [BX] ;AX ←DS:[BX]

4. 基址变址寻址方式

有效地址由基址寄存器(BX 或BP )的内容加上变址寄存

器(SI 或DI )的内容构成:

有效地址=BX/BP+

SI/DI

段地址对应BX 基址寄存器默认是DS ,对应BP 基址寄存器默认是SS ;可用段超越前缀改变

如:MOV AX, [BX+SI] ;AX ←DS:[BX+SI]

5. 相对基址变址寻址方式

有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:

有效地址=BX/BP+SI/DI+8/16位位移量

段地址对应BX 基址寄存器默认是DS ,对应BP 基址寄存器默认是SS ;可用段超越前缀改变

如:MOV AX, [BX+DI+6] ;AX ←DS:[BX+DI+6]

MOV AX, 6[BX+DI] MOV AX, 6[BX][DI]

6. 存储器寻址方式中的变量

变量指示内存中的数据,变量名具有地址属性。存储器寻址方式中经常采用变量形式

变量的定义

如:WV AR DW 1234H

;定义16位变量WV AR ,具有初值1234H

;假设其偏移地址为10H

单独引用变量名是直接寻址方式

如:MOV AX,WVAR ;指令功能:AX =1234H

;等同于 MOV AX,[0010H]

相对寻址方式中,变量名表示其偏移地址,相当于位移量 如:MOV AX, [DI+WVAR] ;= MOV AX,WVAR[DI]

;等同于 MOV AX,[DI+0010H]

相对寻址方式中的位移量

在寄存器相对和相对基址变址寻址方式中,其位移量不仅可用常量表示,也可用符号表示

这个符号可以是变量名,例如WV AR 变量,而且支持多种表达形式

如:MOV AX, [DI+WVAR] ;

;等同于 MOV AX, WVAR[DI]

MOV AX,[BX+SI+WVAR]

;等同于 MOV AX, [SI+WVAR] [BX]

;等同于 MOV AX, WVAR[BX+SI]

;等同于 MOV AX, WVAR[BX][SI]

课后要求与作业:复习本次课所讲内容,完成课后作业3.1、

3.2、3.4、3.5、3.6

编号: 07

课时和授课时间:

课时:4学时;授课时间: 年 月 日

教学课型:

理论课

题目:

第3章,第4节

教学目的与要求:

掌握数据传送类指令的使用

教学重点:

常见非法指令类型、堆栈概念

教学难点:

堆栈操作规则、非法指令判断

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.4. IA-32的通用指令

3.4.1 数据传送类指令

数据传送是计算机中最基本最重要的一种操作, 传送指令也是最常使用的一类指令

传送指令把数据从一个位置传送到另一个位置

除标志寄存器传送指令外,均不影响标志位

重点掌握 MOV XCHG XLAT PUSH POP

3.4.1.1 通用数据传送指令

提供方便灵活的通用传送操作

有3条指令

MOV XCHG XLAT

1. 传送指令MOV (move )

把一个字节或字的操作数从源地址传送至目的地址

(1)、MOV 指令--立即数传送

如:mov cl,4 ;cl ←4,字节传送

mov dx,0ffh ;dx ←00ffh ,字传送

mov si,200h ;si ←0200h ,字传送

mov bvar,0ah ;字节传送

;假设bvar 是一个字节变量,定义如下:bvar db 0 mov wvar,0bh ;字传送

;假设wvar 是一个字变量,定义如下:wvar dw 0

(2)、MOV 指令--寄存器传送

如:mov ah,al ;ah ←al ,字节传送

mov bvar,ch ;bvar ←ch ,字节传送

mov ax,bx ;ax ←bx ,字传送

mov ds,ax ;ds ←ax ,字传送

(3)、MOV 指令--存储器传送

如:mov al,[bx] ;al ←ds:[bx]

mov dx,[bp] ;dx ←ss:[bp+0]

mov dx,[bp+4] ;dx ←ss:[bp+4]

mov es,[si] ;es ←ds:[si]

(4)、MOV 指令--段寄存器传送

如:mov ax,ds ;ax ←ds

mov es,ax ;es ←ax ←ds

2. 交换指令XCHG (exchange )

把两个地方的数据进行互换

寄存器与寄存器之间对换数据

寄存器与存储器之间对换数据

不能在存储器与存储器之间对换数据

3. 换码指令XLAT (translate )

将BX 指定的缓冲区中、AL 指定的位移处的一个字节数据取出赋给

AL

换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码,表格首地址存放于BX ,AL 存放相对表格首地址的位移量

换码指令执行后:将AL 寄存器的内容转换为目标代码

3.4.1.2 堆栈操作指令

堆栈是一个“先进后出” (或说“后进先出” )的主存区域,

位于堆栈段中;SS 段寄存器记录其段地址

堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP 指定

堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH 和POP

1. 进栈指令PUSH

进栈指令先使堆栈指针SP 减2,然后把一个字操作数存入堆栈顶部

2. 出栈指令POP

出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP 加2

3.4.1.3 标志操作指令

1. 标志位操作指令

CLC ;复位进位标志:CF ←0

STC ;置位进位标志:CF ←1

CMC ;求反进位标志:CF ←~CF

CLD ;复位方向标志:DF ←0

STD ;置位方向标志:DF ←1

CLI ;复位中断标志:IF ←0

STI ;置位中断标志:IF ←1

2. 标志寄存器低字节与AH 的传送指令

LAHF SAHF

3. 标志寄存器出入堆栈指令

PUSHF POPF

3.4.1.4 地址传送指令

1. 取有效地址指令LEA ;

2. 将地址指针装入DS(数据段寄存器) 指令LDS ;

3. 将地址指针装入ES(附加段寄存器) 指令LES

1. 有效地址传送指令LEA (load effective address)

将存储器操作数的有效地址送至指定的16位通用寄存器 如:mov bx,400h

mov si,3ch

lea bx,[bx+si+0f62h]

;BX ←400H +3CH +0F62H =139EH

2. 地址指针装入DS 指令 LDS

功能:把源操作数有效地址所对应的双字长的内存单元中的高字内容(一般为16位段地址) 送入DS ,低字内容(一般为偏移地址)

送入指令所指定的寄存器中。

格式: LDS REG , MEM

例:LDS DI, [2130H ] ; 执行此指令后,将[2130H]和[2131H ]中的内容(偏移量) 送到DI 中,而将[2132H]和[2133H]中的内容(段值) 送到DS 中。

3. 将地址指针装入ES(附加段寄存器) 指令LES

功能:把源操作数有效地址所对应的双字长的内存单元中的高字内容(一般为16位段地址) 送入ES , 低字内容(一般为偏移地址) 送入指令所指定的寄存器中。LES 与LDS 的指令格式及使用方法是相似的。

格式: LES REG , MEM

例: LES DI, [2130H ] ; 执行此指令后,将[2130H]和[2131H]中的内容(偏移量) 送到DI 中,而将[2132H]和[2133H]中的内容(段值) 送到ES

课后要求与作业:复习本次课所讲内容,完成课后作业3.8、

3.9、3.11、3.12

编号:08

课时和授课时间:

课时:4学时;授课时间: 年 月 日 教学课型:

理论课

题目:

第3章,第4节

教学目的与要求:

掌握算术运算类指令、符号扩展指令的使用 教学重点:

算术运算类指令对标志位的影响

教学难点:

标志位,尤其是溢出标志的判断

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.4.2 算术运算类指令

算术运算类指令用来执行二进制的算术运算:加减乘除。

这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志

重点掌握

加法指令:ADD 、ADC 、INC

减法指令:SUB 、SBB 、DEC 、CMP 、NEG 调整类指令

3.4.2.1 加法和减法指令

加法指令:ADD, ADC和INC

减法指令:SUB, SBB, DEC, NEG和

CMP

它们分别执行字或字节的加法和减法运算,除INC 和DEC

不影响CF 标志外,其它按定义影响全部状态标志位

操作数组合:

助记符 reg, imm/reg/mem

助记符 mem, imm/reg

3.4.2.2 符号扩展指令

符号扩展是指用一个操作数的符号位(最高位)形成另一

个操作数,后一个操作数的高位是全0(正数)或全1(负

数)

符号扩展虽然使数据位数加长,但数据大小并没有改变,

扩展的高部分仅是低部分的符号扩展

符号扩展指令有两条,用来将字节转换为字,字转换为双

CBW ;AL 符号扩展成AX (P91)

CWD ;AX 符号扩展成DX (P91)

课后要求与作业:复习本次课所讲内容,完成课后作业3.16、

3.17、3.19、3.20

编号:09

课时和授课时间:

课时:4学时;授课时间: 年 月 日

教学课型:

理论课

题目:

第3章,第4节

教学目的与要求:

掌握位操作类指令、串操作指令的使用

教学重点:

位操作类类指令对标志位的影响、重复串操作

教学难点:

字符串操作指令重复前缀的使用

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.4.3 位操作类指令

位操作类指令以二进制位为基本单位进行数据的操作

当需要对字节或字数据中的各个二进制位操作时,可以考

虑采用位操作类指令

注意这些指令对标志位的影响

1. 逻辑运算指令

AND OR XOR NOT TEST

2. 移位指令

SHL SHR SAR

3. 循环移位指令

ROL ROR RCL RCR

3.4.4 串操作指令(P100)

1、串数据类型

串操作指令的操作数是主存中连续存放的数据串(String )

——即在连续的主存区域中,字节或字的序列

串操作指令的操作对象是以字(W )为单位的字串,或是

以字节(B )为单位的字节串

2、串寻址方式

源操作数用寄存器SI 寻址,默认在数据段DS 中,但允许

段超越:

DS:[SI]

目的操作数用寄存器DI 寻址,默认在附加段ES 中,不允

许段超越:

ES:[DI]

每执行一次串操作指令,SI 和DI 将自动修改:

±1(对于字节串)或±2(对于字串)

执行指令CLD 指令后,DF = 0,地址指针增1或

2

执行指令STD 指令后,DF = 1,地址指针减1或2

3、串传送MOVS (move string) (P101)

把字节或字操作数从主存的源地址传送至目的地址

4、串比较CMPS (compare string) (P101)

将主存中的源操作数减去至目的操作数,以便设置标志,

进而比较两操作数之间的关系

5、串扫描SCAS (scan string) (P102)

将AL/AX减去至目的操作数,以便设置标志,进而比较

AL/AX与操作数之间的关系

6、串读取LODS (load string) (P103)

把指定主存单元的数据传送给AL 或AX

7、串存储STOS (store string) (P103)

把AL 或AX 数据传送至目的地址

8、重复前缀指令(repeat ) (P133)

串操作指令执行一次,仅对数据串中的一个字节或字量进

行操作。但是串操作指令前,都可以加一个重复前缀,实

现串操作的重复执行。重复次数隐含在CX 寄存器中

重复前缀分两类,3条指令:

配合不影响标志的MOVS 、STOS (和LODS )指令

的REP 前缀

配合影响标志的CMPS 和SCAS 指令的REPZ 和

REPNZ 前缀

课后要求与作业:复习本次课所讲内容,完成补充习题

1. 如果TABLE 为数据段中3400H 单元的符号名,其中存放的

内容为0505H ,则执行指令MOV AX ,TABLE 后,

LEA AX ,TABLE

后,AX= 。指令MOV BX ,

TABLE 执行后,结果是

2. 已知AL=9EH,DL=8AH,执行指令CMP AL,DL 后,CF 、

OF 、SF 、ZF 、PF 标志的状态分别为

3. 已知AL 的内容为6BH ,执行指令NEG AL 后,再执行

CBW ,AX 中的内容为

4. 已知执行执行前,DI=0300H,BX=0100H,CF=0,DS=2000H,

SS=3000H,BP=0100H,[DS:0310H]=0AA55H。则:

(1). 执行指令RCR WORD PTR [BX+DI],1后,目的操

作数和CF 的值分别为 。

(2). 指令MOV AL ,[BP+0100H]的源操作数的物理地址

为 (3). 指令POP 0300H[DI]的源操作数物理地址为

5. 设AX=20BCH,DX=45A2H。有如下程序段,按要求写出

连续执行相应指令后寄存器的内容。

MOV CL ,04H

SHL DX ,CL ; MOV BL ,AH

SHL AX ,CL ;

SHR BL ,CL ;

XOR DL ,BL ;

6. 当使用串操作指令CMPSW 寻找两串中的不同数据时应使

用的重复前缀为 。

7. 设BX=987FH,执行指令NEG BX 后,指明BX 和各状态

标志的值。若在该指令执行后OF 标志位为1,则在该指

令执行前和执行后BX 的内容各为多少?这时各标志位的

内容是什么?

编号:10

课时和授课时间:

课时:4学时;授课时间: 年 月 日

教学课型:

理论课

题目:

第3章,第4节

教学目的与要求:

掌握控制传送类指令的使用

教学重点:

调用转移类指令

教学难点:

调用转移类指令目标地址的形成、调用类指令断点状态的保护

教学手段和教学方法:

教学手段:多媒体教学为主,板书辅助

教学方法:讲授

教学内容:

3.4.5 控制传送类指令(P104)

控制传送类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的常用指令

重点掌握:

CALL/RET JMP/Jcc/LOOP/JCXZ

INT n/IRET 常用系统功能调用

目标地址的寻址方式

相对寻址方式

指令代码中提供目的地址相对于当前IP 的位移量,转移到的目的地址(转移后的IP 值)就是当前IP

值加上位移量

直接寻址方式

指令代码中提供目的逻辑地址,转移后的CS 和IP 值直接来自指令操作码后的目的地址操作数

间接寻址方式

指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中间接获得

目标地址的寻址范围:段内寻址

段内转移——近转移(near )

在当前代码段64KB 范围内转移( ±32KB 范围)

不需要更改CS 段地址,只要改变IP 偏移地址

段内转移——短转移(short )

转移范围可以用一个字节表达,在段内-128~+127范围的转移

目标地址的寻址范围:段间寻址

段间转移——远转移(far )

从当前代码段跳转到另一个代码段,可以在1MB 范围

需要更改CS 段地址和IP 偏移地址

目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址

1. 子程序指令

子程序是完成特定功能的一段程序

当主程序(调用程序)需要执行这个功能时,采用CALL 调用指令转移到该子程序的起始处执行

当运行完子程序功能后,采用RET 返回指令回到主程序继续执行

2. 无条件转移指令(P105)

只要执行无条件转移指令JMP ,就使程序转到指定的目标地址,从目标地址处开始执行指令

操作数label 是要转移到的目标地址(目的地址、转移地址)

JMP 指令分成4种类型:

⑴ 段内转移、相对寻址

⑵ 段内转移、间接寻址

⑶ 段间转移、直接寻址

⑷ 段间转移、间接寻址

3. 条件转移指令(P58)

条件转移指令Jcc 根据指定的条件确定程序是否发生转移。其通用格式为:

Jcc label ;条件满足, 发生转移

;IP ←IP +8位位移量;

;否则,顺序执行

label 是一个标号、一个8位位移量,表示Jcc 指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移

label 只支持短转移的相对寻址方式

4.Jcc 指令

Jcc 指令不影响标志,但要利用标志(表)

根据利用的标志位不同,分成三种情况:

⑴ 判断单个标志位状态

⑵ 比较无符号数高低

⑶ 比较有符号数大小

5. 循环指令(P106)

一段代码序列多次重复执行就是循环

8088设计有针对CX 计数器的计数循环指令

LOOP label ;循环指令

;首先CX ←CX -1;然后判断;若CX ≠0,转移 JCXZ label ;为0循环指令

:如果CX =0,则转移

label 操作数采用相对短寻址方式

还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条指令

6. 中断指令和系统功能调用(P107)

中断(Interrupt )是又一种改变程序执行顺序的方法

8088CPU 支持256个中断,每个中断用一个编号(中断向量号)区别

中断指令有3条:

INT i8 IRET

INTO

本节主要掌握类似子程序调用指令的中断调用指令INT i8,进而掌握系统功能调用

3.4.6 处理器控制类指令(P109)

处理器控制类指令用来控制CPU 的状态,使CPU 暂停、等待或空操作等

NOP ;空操作指令,等同于“xchg ax,ax”指令 SEG: ;段超越前缀指令:CS:,SS:,DS:,ES: HLT ;暂停指令:CPU 进入暂停状态

其他指令:LOCK ESC WAIT 课后要求与作业:复习本次课所讲内容,完成课后作业3.24


相关文章

  • 汇编语言详解
  • 汇编语言详解 汇编语言(Assembly Language)是面向机器的程序设计语言. 汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码.这样用符号代替机器语言的二进制码,就把机器语言 ...查看


  • 最新版汇编语言程序设计习题答案详解
  • 新版汇编语言程序设计习题答案详解 第一章 汇编语言基础知识 1.1.简述计算机系统的硬件组成及各部分作用 1.2.明确下列概念或符号: 主存和辅存,RAM 和ROM ,存储器地址和I/O端口,KB .MB .GB 和TB 1.3.什么是汇编 ...查看


  • 汇编中的字符串操作指令
  • 每一种语言都有一些字符串操作函数,反汇编后的代码也不例外.网上讲的都比较零碎,我将它们收集起来,并配上自己的理解,形成本文. 一.字节操作指令:lodsb和stosb 1. lodsd需要寄存器esi配合使用.每执行一次lodsb,就将[e ...查看


  • 微机原理与接口技术汇编语言指令详解吐血版
  • 第一讲 第三章 指令系统--寻址方式 回顾: 8086/8088的内部结构和寄存器,地址分段的概念,8086/8088的工作过 程. 重点和纲要:指令系统--寻址方式.有关寻址的概念:6种基本的寻址方式及 有效地址的计算. 讲授内容: 3. ...查看


  • 2015年武警院校招生统考 部队士兵考军校数学军考真题详解
  • ★军考5年真题详解汇编 二〇一五年武警部队院校招生统一考试 士兵本科数学真题与详解 一.选择题:本大题共10小题,每小题5分,共50分.在每小题给出的四个选项中,只 有一项符合题目要求. 1.已知全集为R,集合A={x|-1≤x a93 = ...查看


  • [三国志13]内政外交及关系图详解
  • <三国志13>内政外交及关系图详解 <三国志13>是三国志系列的新作,三国志系列作品⼀直都是⼀款策略游戏,靠着玩家的运营,最后达到⼀统天下的⽬的,那么除了战争也离不开内政和外交,下⾯就和⼩编⼀起来看看三国志13内政外 ...查看


  • 阿奇夏米尔F35P火花机培训
  • 总目录 第一部份 快速入门 1:开机前的准备工作 2:开机及开机后检查 3:预备知识 4:安装软件及调试 5:加工指南 5.1准备工件及电极 5.2准备加工程序 5.3实际加工 5.4 加工暂停及参数优化 第二部份 RBF文件及RBF 语句 ...查看


  • 汽车维修技术资料:宝马车身控制技术及电路图详解
  • [技师帮]汽车故障维修技术资料分享 宝马车身控制技术及电路图详解 一. 宝马GMIII车身电脑功能 GMIII车身电脑控制遥控中央门锁.电动玻璃窗.天窗.电动倒车镜.自动雨刷.电动座椅.动力转向.后尾箱控制.车身防盗.方向盘角度调整.室内灯 ...查看


  • 让嵌入式"嵌入"生活
  • 让嵌入式"嵌入"你的生活 一.什么是嵌入式系统 嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁减,对功能.可靠性.成本.体积.功耗有严格要求的专用计算机系统. 二.生活中嵌入式 1)应用领域 2)嵌入式系统实 ...查看


热门内容