编号: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