第三章指令系统及寻址方式

第三章指令系统及寻址方式
第三章指令系统及寻址方式

第三章指令系统及寻址方式

一、教学内容

1.指令格式

2.指令寻址方式

3.指令系统

二、要求掌握指令的书写格式、指令的寻址方式和每一条指令的作用。

三、重点掌握指令的寻址方式和每一条指令的功能作用。

四、难点在于理解和掌握指令的寻址方式,怎样找到操作数所在存储单元的存放地址以及运用指令编程的技巧等。

五、本章分为4讲,每讲2学时。

第一讲指令寻址方式

1.指令的书写格式

指令有两种书写格式:

?机器指令:由一串二进制数描述

?符号指令:用英文字母缩写词描述。符号指令的书写格式如下:

标号:操作助记符 [目的操作数][,源操作数];注释

几点说明:

1)标号—表示某一条指令所在存储单元的首址。标号应由字母打头,后跟字母、数字及特殊字符均可,但不能用关键字。

标号的用法:

①标号一般放在子程序(子过程)的第一条指令的开头;

②标号一般放在转移指令要转去的目的地的第一条指令的开头。

③标号一般放在其他符号定义的前面。

2)指令助记符(操作助记符):MOV;ADD;SUB;END。

3)操作数—有源操作数和目的操作数,他们之间用“,” 分隔。操作数也可有可无。

2.数据寻址方式

一般在指令中包含有操作码和操作数,怎样找到指令中的操作数和操作数所在的地址,这就是寻址方式。

1)立即寻址

操作数直接包含在代码段的指令中。

如: MOV EAX,H

MOV BX,6688H

MOV AX,1234H

?立即数只能作为源操作数

?立即寻址主要用来给通用寄存器或存储器赋值

?不允许给段寄存器直接赋值

2)寄存器寻址

操作数在寄存器中。

32位寄存器:EAX、EBX、ECX、EDX、

ESP、EBP、 ESI、EDI

16位寄存器:AX、BX、CX、DX、SP、BP、SI、

DI、CS、DS、SS、ES、FS、GS

8 位寄存器:AH、AL、BH、BL、

CH、CL、DH、DL

如: MOV AX,BX

MOV EDI,ESI

MOV AL,CL

3)存储器寻址

操作数在存储器中,其地址由指令以某种方式指出。

① 16位指令模式下的存储器寻址

16位指令模式寻址结构由4部分组成:段基址×10H+基址+变址+偏移量基址:BX、BP ,变址:SI、DI ,偏移量:8位或16位

如果有效地址在BX,SI或DI中,则以DS寄存器内容为段基址;

如果有效地址在BP中,则以SS段寄存器的内容为段基址。

如果使用段超越(CS:ES:DS:SS:),前缀操作数可以放在冒号前指定的段。例如:MOV ES:[DI],AL

MOV ES:2000H, AL

其中ES为前缀字节,产生目标码时,它将放在MOV指令的前面,即:

26 ES:

8805 MOV[DI],AL

亦即:268805 MOV ES:[DI],AL

16位指令模式寻址方式: 直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址。

?直接寻址

操作数在存储器单元中。

操作数所在的有效地址EA直接由指令指出。

例1 MOV AX,[3000H]

例2 MOV BL,BLOCK

例3 MOV BX,DATA1

?寄存器间接寻址

操作数的有效地址在BX、BP或SI、DI中,EA可表示为

(BX)

(BP)

(SI)

(DI)

EA=

例1 MOV AX,[BX]

例2 MOV DL,[SI]

?寄存器相对寻址

操作数在存储单元中,其有效地址EA可表示为(BX)

(BP) 8位偏移量

(SI) 16位偏移量

(DI)

EA=

例1 : MOV AL,[BX+4000H]

亦可写成: MOV AL,4000H[BX]

例2 : MOV AX,[BP+2000H]

?基址变址寻址

操作数在存储单元中,其有效地址EA 可表示为

例1 MOV AX ,[BX +SI] 或写成: MOV AX ,[BX][SI] 例2 MOV AX ,[BX+DI] 例3 MOV AX ,[BP+SI] 例4 MOV AX ,[BP+DI] ? 相对基址变址寻址

操作数在存储单元中,其有效地址EA 可表示为 例1: MOV AX ,[BX +SI +1500H] 或写成 : MOV AX ,1500[BX][SI] 例2 : MOV AX ,[BP+DI+1000H] ② 32位指令模式下的存储器寻址

32位指令模式寻址结构由5部分组成:段址+基址+变址﹡比例因子+偏移量

其中基址寄存器或变址寄存器可以是除ESP 以外的任何32位通用寄存器。当基址寄存器为EBP 时,默认段寄存器SS 存放段选择符,否则,默认DS 存放段选择符。也可使用段超越前缀来指定。比例因子为1,2,4,8。偏移量为8位或32位。

? 直接寻址,有两种书写格式

? 指令中直接写出操作数所在存储单元的32位有效地址(EA ),注意:

段超越前缀不能省略,否则,会出现寻址错误。

如:MOV

EAX ,DS :[H]

? 用变量名代表存储单元的有效地址

如:把数据段中以BUF 命名的双字单元的内容送到EAX 。

(BX) (SI) (BP) (DI)

EA=

(BX) (SI) 8位偏移量

(BP) (DI) 16位偏移量

EA=

MOV EAX,DS:BUF

MOV EAX,BUF

?寄存器间接寻址

操作数的有效地址由EA(EAX、EBX、ECX、EDX、ESI、EDI、EBP)指定。

如:MOV EBX,UBF

MOV EAX,[EBX]

?相对基址寻址

操作数的有效地址由EA(EAX、EBX、ECX、EDX、ESI、EDI、EBP)+ 偏移量(8、32)指定。

如:MOV EAX,NUM ;NBM有效地址

MOV EDX,[EAX+80H]

?变址寻址,有两种格式

?有比例因子的变址寻址

如:MOV EBX,[ESI×4+80H]

?无比例因子的变址

MOV EBX,[ESI+80H]

?基址加变址寻址,有两种格式

?有比例因子的基址加变址寻址

如:MOV EAX,[EBP+ESI×4+80H]

?无比例因子的基址加变址寻址

如:MOV EAX,[EBP+ESI+80H]

3.程序地址寻址方式

1)相对寻址

相对寻址为段内寻址,指令中给出带符号的相对偏移量,程序目标地址为当前IP值加上相对偏移量作为偏移地址。

例如:

地址机器码助记符

1D24:0100 8BF7 MOV DI,SI

1D24:0102 EB02 JMP SHORT NEXT

1D24:0104 8ACA MOV CL,DL

1D24:0106 8AC3 NEXT: MOV AL,BL

2)直接寻址

直接寻址是指指令中直接给出转移指令的目标地址。在段间转移中,指令中给出目标段地址或代码段的段描述符。

例如:

地址机器码助记符

1D24:0010 8BF7 MOV DI,SI

1D24:0012 EA0A00251D JMP FAR PTR NEXT

3)间接寻址

间接寻址分段内和段间间接寻址,指令中以间接方式给出转移指令的目标地址,通常存放在数据段。采用(E)BP寻址,指令目标地址放在堆栈段。使用段超越前缀,也可以存放在其他段。

下面的例子为段间间接转移指令。BX中存放的是符号地址BUF的偏移地址BUF——双字类型。在BUF所指的存储单元中存放着CODE2段中标号NEXT的段基址和偏移地址(1D25:0008)。

4.堆栈地址寻址方式

用途:暂存数据,自动保护中断断点、调用过程断点等,堆栈的存取方式是:采用先进后出规则。使用PUSH 指令将数据压入堆栈,使用POP指令数据弹出堆栈。

1)字数据进栈步骤:

?(E)SP-1→(E)SP

?高8位→堆栈

?(E)SP-1→(E)SP

?低8位→堆栈

2)字数据出栈步骤:

?栈顶内容→目标寄存器或目标单元的低8位

?(E)SP+1→(E)SP

?栈顶内容→目标寄存器或目标单元的高8位

?(E)SP+1→(E)SP

第二讲指令格式

指令基本格式:[标号:] 助记符目的操作数,源操作数;注释

?标号可有可无;

?助记符必有,如:ADD ,MOV,IN,OUT。

?操作数(目的操作数,源操作数)可有可无。

操作数:寄存器、存储器、立即数。

1.通用寄存器

8位:AH,AL,BH,BL,CH,CL,DH,DL

16位:AX,BX,CX,DX,SI,DI,SP,BP

32位:EAX,EBX,ECX,EDX,ESI,EDI, ESP,EBP

2.存储器操作数

需要通过寄存器间接寻址,来到操作数所在存储单元的地址。

16位间接寻址的寄存器有:BX,BP,SI,DI;

32位间接寻址的寄存器有:EAX,EBX,ECX, EDX,ESI,EDI, EBP。3.存储器操作数缺省数据类型:

8位指令操作为:字节类型;

16位指令操作为:字类型;

32位指令操作为:双字型;

在使用中如要改变地址表达式的类型,可使用PTR伪指令来定义。

如:字节型 BYTE PTR [Reg]

字型WORD PTR [ Reg]

双字型 DWORD PTR [Reg]

如:INC WORD PTR [BX]

4.段寄存器操作数(Seg)

为16位的段寄存器: CS,DS,ES,SS,FS,GS。

5.立即数(imm)

只能作为源操作数,其数据类型由目的操作数来决定。如果采用十六进制表

示立即数,当大于9时,A~F的数必须在前面加“0”,后面加“H”。

对指令的分析应注意以下4点:

?指令的功能;

?适用于指令的寻址方式;

?指令对标志位的影响;

?指令长度和执行时间。

第三讲指令系统

按功能分类:

?数据传送指令

?算术运算指令

?逻辑运算指令

?控制转移类指令

?串操作指令

?输入/输出指令

?处理器控制指令

?中断指令与DOS功能调用

1.数据传送指令

数据传送指令包括通用数据传送、地址传送指令、标志寄存器传送指令、符号扩展指令和扩展传送指令等。

1)通用数据传送指令

①传送指令格式:MOV Dest, Source

如:MOV AL,CL

MOV BX,[SI]

MOV EAX,EBX

MOV AX,0D56BH

MOV EAX,[EBX+ESI]

②交换指令

交换操作数的数据类型:字节型、字型、双字型。允许通用寄存器之间,通

用寄存器与存储器之间交换数据。

格式: XCHG DEST,SRC

如:XCHG EAX,EBX;32位交换

XCHG AX,[SI];存储器与寄存器交换

XCHG AL,DL;8位交换

③字节交换指令

格式: BSWAP 32位寄存器

功能:将位31 ~ 位24 与位7 ~ 位0 交换,位23 ~ 位 16 与位15 ~ 位8交换

④查表指令

格式: XLAT 表头变量名

功能:取出 DS:[BX+ AL] 中的1个字节送给AL ,或者取出DS:[EBX+AL]中的1个字节送给AL。

⑤扩展传送指令

格式: MOVSX DEST,SRC

MOVZX DEST,SRC

如: MOV BL,80H

MOVSX AX,BL ; AX=FF80H

MOVZX AX,BL ;AX=0080H

2)堆栈操作指令

堆栈是人为定义的一块内存空间,用来暂存数据的。堆栈能自动保护中断断点和现场以及调用子过程的断点和现场等。对数据的存取按照“先进后出”的规则进行。堆栈的栈底在高端地址单元,栈顶为低端地址。当数据进栈后,栈顶向低端地址下浮;当数据出栈后,栈顶向高端地址上浮。

①压栈指令 : PUSH SRC

如: PUSH AL

PUSH AX

PUSH EAX

PUSH DS

PUSH [SI]

PUSH DWORD PTR [SI]

PUSH 1234H

PUSH 80H

②出栈指令: POP DEST

如: POP 80H

POP 1234H

POP DWORD PTR [DI]

POP [DI]

POP DS

POP [EAX]

POP AX

POP AL

3)地址传送指令

① LEA (Load Effective Address)有效地址送寄存器

② LDS (Load DS with Pointer) 指针送寄存器和DS

③ LES (Load ES with Pointer) 指针送寄存器和ES 这组指令将地址送到指定的寄存器中。

4)标志寄存器传送指令(Flag Register transfers)

① LAHF (Load Register AH with Flags)标志送AH

② SAHF (Store AH into Flags) AH送标志寄存器

③ PUSHF(PUSH the Flags)标志入栈

④ POPF(POP the Flags)标志出栈。

2.算术运算类指令

1)加法指令

加法指令有:

① ADD (add) 加法指令

② ADC (Add with Carry) 带进位的加法指令

③ INC (increment) 加1指令。

2)减法指令

减法指令有:

① SUB (subtract) 减法指令

② SBB (subtract with borrow) 带借位的减法指令

③ DEC (decrement) 减1指令

④ NEG (negate) 求补指令

⑤ CMP (compare) 比较指令。

3)二进制整数的乘、除运算指令及符号扩展指令

进制整数的乘、除运算指令及符号扩展指令包括:

① MUL (Unsigned Multiple)无符号数乘法

② IMUL (Signed Multiple)带符号数乘法

③ DIV (Unsigned Divide)无符号数除法

④ IDIV (Signed Divide)带符号数除法

⑤ CBW (Convert Byte to Word)字节转换为字

⑥ CWD (Convert Word to Double word)字转换为双字。

3.逻辑运算与移位指令

这类指令包括逻辑运算指令和移位指令,它用于直接对寄存器或存储器操作数的二进制位进行操作。

1)逻辑运算指令

①逻辑非

?格式: NOT 操作数

?功能:对操作数按位求反,结果送操作数存放。

?寻址方式:除立即寻址之外的任意寻址方式。

?该指令不影响标志位。

②逻辑与

?格式:AND 目的操作数,源操作数

?功能:该指令对两个操作数按位进行逻辑“与”运算。即只有当对应位均为1时,与的结果才是1,否则为0。“与”运算后的结果送目的操作数。

?目的操作数可以是寄存器寻址和存储器寻址。源操作数可以是立即数、

寄存器数和存储器操作数。

?“与”运算使标志CF=0,OF=0,根据运算结果影响PF,SF,ZF标志,对AF标志未作定义。

③逻辑或

?格式:OR 目的操作数,源操作数

?功能:两个操作数按二进制位进行逻辑“或”运算。进行“或”运算的两位只要有1,结果为1,否则为0。“或”运算结果送回目的操作数。

?目的操作数可以是累加器和任意通用寄存器、存储器操作数。源操作数可以是立即数、寄存器和存储器操作数。

?“或”运算使标志CF=0,OF=0,根据运算结果影响PF,SF,ZF标志,对AF标志未作定义。

?其寻址方式与AND指令相同。

④异或指令

?格式:XOR 目的操作数,源操作数

?功能:源操作数与目的操作数按二进制对应位进行异或,若对应的二进制位相同(同为1或同为0)结果为0,不同则结果为1。

?目的操作数可以是累加器、任意通用寄存器和内存操作数。源操作数可以是立即数、寄存器和内存操作数。

?该指令使标志位CF=OF=0,PF、SF、ZF根据运算的结果决定。AF未作定义。

2)移位指令

?移位指令包括算术移位、逻辑移位和循环移位。

?逻辑移位指令把操作数当成二进制位串。因此,移位指令以及循环移位指令也把操作数当成二进制位串。

?这些指令的目的操作数可以是寄存器或内存操作数,源操作数用来指定移位的位数。

?如果只移1位(次),移动次数可以直接用1表示。

?如果移位的位数超过1位,则应先将移位次数传送给寄存器CL,然后用CL表示移动次数。

①算术左移指令

格式: SAL 目的操作数,移动次数

功能:该指令将目的操作数当作二进制位串,把目的操作数的内容向左移动指定的位数(由移动次数给出),每左移一位,最低位补0,最高位移入进位标志CF。当指令规定的移位次数等于1时,移位后,如CF与操作数的最高位不同,则OF=1(说明溢出),否则OF=0;移位计数值不等于1,OF不确定。这条指令还将影响PF、SF、ZF标志,AF标志未定义。

对于算术左移,每移一位相当于操作数乘2。

②算术右移指令SAR

格式:SAR 目的操作数,移动次数

功能:将指定的目的操作数的值按二进制位串从最低位开始向右移动指定次数。每移动1次,最低位被移出,并送标志位CF,最高位由符号位来填补(即原来的目的操作数最高位为1,移动后最高位仍然为1,否则为0)。

操作数每右移一位,相当于该数被2除。

③逻辑左移指令SHL

格式:SHL 目的操作数,移动次数

功能:与算术左移指令完全一样。

④逻辑右移SHR指令

格式:SHR目的操作数,移动次数

功能:将目的操作数按二进制位从最低位开始向右移动指定的位数,每向右移动1次,被操作数的最低位进入CF标志,最高位补0。

⑤循环移位指令

8086的循环移位指令有:

ROL DEST,CNT ;循环左移

ROR DEST,CNT ;循环右移

RCL DEST,CNT ;带进位循环左移

RCR DEST,CNT ;带进位循环右移

CNT代表移位次数,当移1位时,可在CNT处可直接写1,当移位次数超过1次时,必须先将移位次数送CL,然后在CNT处写CL。DEST表示目的操作数。

4.串操作指令

串操作指令是用一条指令实现对一串字符或数据进行操作。其中有5条基本的串操作指令和1条重复前缀。

当重复前缀加在这些指令前面时,可实现重复串操作。它们常用于循环结构。

存储器中的字节序列或字序列叫做串(String)。串操作指令就是每次对串中的一个元素进行操作的指令。

如果在串操作指令前加上重复前缀,那么,就可以由硬件重复执行该串操作指令,使操作效率大大提高。

注意,重复前缀只能配合串操作指令使用。

格式:重复前缀串操作指令

5.控制传送指令

计算机的指令一般是按顺序逐条地执行。为了实现分支与循环结构的程序设计,提供了一组转移指令,共有18条。

条件转移指令的基本格式为:

J××目标

1)条件转移指令

条件转移指令可分为3类:简单条件转移指令、无符号数条件转移指令、有符号数条件转移指令。

①简单条件转移指令(单标志条件转移指令)

②无符号数条件转移指令。

可用CMP指令比较两个无符号数A、B的大小。

指令的操作是A-B,根据标志位的状态判断两数的大小,其转移指令如表所示。

③有符号数条件转移指令。

可用CMP指令比较两个有符号数A、B的大小。

指令的操作是A-B,根据标志位的状态判断两数的大小,其转移指令如表所示。

6.CPU控制指令

这类指令包括状态标志操作指令、与外部事件同步指令及空操作指令。除了第一类指令外,均不影响标志位。

寻址方式及指令系统习题与解答

寻址方式及指令系统习题与解答 计算机科学与工程学院黄洪波2012年3月 一、单项选择题 1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为()。 A.5000H B.5008H C.23008H D.32008H 2.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理址为()。 A.13000H B.23000H C.33000H D.3000H 3.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为()。 A.20200H B.30200H C.50200H D.200H 4.指令MOV MEM[BX],AX中的MEM是()。 A.原码B.反码C.补码D.移码 5.用来作为寄存器间接寻址的寄存器有()个。 A.8 B.6 C.5 D.4 6.指令MOV [BX+SI],AL中的目的操作数使用()段寄存器。 A.CS B.DS C.SS D.ES 7.指令MOV BX,[BP+5]中的源操作数使用()段寄存器。 A.CS B.DS C.SS D.ES 8.段内间接寻址只改变()中的内容。 A.CS B.IP C.CS和IP D.PSW 9.段间间接寻址只改变()中的内容。 A.CS B.IP C.CS和IP D.PSW 10.下述指令中不改变PSW的指令是()。 A.MOV AX,BX B.AND AL,0FH C.SHR BX,CL D.ADD AL,BL 11.下述指令中不影响CF的指令是()。 A.SHL AL,1 B.INC CX C.ADD [BX],AL D.SUB AX,BX 12.两个整数补码9CH和7AH相加运算后,会产生()。 A.无溢出且无进位B.无溢出但有进位

第三章指令系统

第5章指令系统 一、判断题 (×)1.执行指令时,指令在内存中的地址存放在指令寄存器中。 (√)2.程序计数器PC用来指示从内存中取指令。 (√)3.同一系列的不同型号的计算机,保持软件向上兼容的特点。 (√)4.在计算机的指令系统中,真正必须的指令数是不多的,其余的指令都是为了提高机器速度和便于编程而引入的。 (×)5.RISC的主要目标是减少指令数,因此允许以增加每条指令的功能的办法来减少指令系统所包含的指令数。 二、选择题 1.在计算机的指令系统中采用不同的寻址方式的主要目的是 C 。 A.实现程序控制和快速查找存储器地址 B.可以直接访问主存和外存 C.缩短指令长度,扩大寻址空间,提高编程的灵活性 D.降低指令的译码难度 2.单操作数指令的操作数由 B 提供。 A.指定寄存器或由操作码指定存储单元 B.由地址码指定的存储单元;如果已标明该存储单元的内容为地址,则由该地址所指定的存储单元 C.由操作码直接指定数据 D.由操作码直接指定的存储单元 3.在多地址指令中,算术运算结果不会存储在 A 中。 A.累加器B.第一地址码所指定的存储空间 C.第二地址码所指定的存储空间D.第三地址码所指定的存储空间 4.把存储单元A的内容传送到存储单元B的指令执行后,存储单元A的内容为 B 。A.空白或零,视机器而定B.与存储单元B的内容相同 C.二进制补码D.存储单元A的内容与存储单元B的内容之差 三、填空题 1.指令操作码通常有两种编码格式:固定格式和可变格式。 2.在当前的计算机中,指令的执行方式有3种,就是顺序执行方式,重叠执行方式和流水线方式。 3.数据传送类指令实现的功能是传送数据,它往往是在主存储器和寄存器之间,或寄存器和寄存器之间传送数据。 4.所谓堆栈,是主存中专门用来存放数据的一个特定的区域,它具有先进后出的性质。 5.Intel 8086/8088的字符串操作指令用来处理存放在存储器中的一串字符或数据。6.内存地址寄存器用来指示从内存中取数据。 7.浮点运算指令对于用于科学计算的计算机是很必要的,可以提高机器的运算速度。四、名词解释 1.计算机指令系统:是指一台计算机上全部指令的集合,也称为计算机的指令集。 2.固定格式:操作码的长度是固定的,集中放在指令字的某一个字段中。 3.可变格式:操作码的长度可变,且分散地放在指令字的不同字段中。 4.寻址:就是寻找操作数的地址,最终目的是寻找所需的操作数。 五、简答题

作业习题 寻址方式和指令

寻址方式和指令习题 一、选择题 1、MOVX A,@DPTR指令中源操作数的寻址方式是() (A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即寻址 2、ORG 0003H LJMP 2000H ORG 000BH LJMP 3000H 当CPU响应外部中断0后,PC的值是() (A)0003H (B)2000H (C)000BH (D)3000H 3、执行PUSH ACC指令,MCS-51完成的操作是() (A)SP+1 SP (ACC)(SP)(B)(ACC)(SP)SP-1 SP (C)SP-1 SP (ACC)(SP) (D)(ACC)(SP)SP+1 SP 4、LCALL指令操作码地址是2000H,执行完相子程序返回指令后,PC=() (A)2000H (B)2001H (C)2002H (D)2003H 5、51执行完MOV A,#08H后,PSW的哪一位被置位() (A)C (B)F0 (C)OV (D)P 6、下面条指令将MCS-51的工作寄存器置成3区() (A)MOV PSW,#13H (B)MOV PSW,#18H (C)SETB PSW.4 CLR PSW.3 (D) SETB PSW.3 CLR PSW.4 7、执行MOVX A,@DPTR指令时,MCS-51产生的控制信号是()(A)/PSEN (B)ALE (C)/RD (D)/WR 8、MOV C,#00H的寻址方式是() (A)位寻址(B)直接寻址(C)立即寻址(D)寄存器寻址 9、ORG 0000H AJMP 0040H ORG 0040H MOV SP,#00H 当执行完上面的程序后,PC的值是()

8086汇编语言指令的寻址方式有哪几类

1. 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 寄存器寻址最快 7. 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。 XCHG CS , AX ;不能修改CS MOV [BX] , [1000] ;不能在两个内存单元之间直接进行数据传送 XCHG BX , IP ;不能用名字直接访问IP PUSH CS POP CS ;不允许直接修改CS值 IN BX , DX ;输入数据必须使用累加器AL或AX MOV BYTE [BX] , 1000 ;格式错误,且超范围,应为MOV word PTR [BX],1000 MOV CS , [1000];不允许直接修改CS值 20.带参数的返回指令用在什么场合?设栈顶地址为3000H,当执行RET 0006后,SP的值为多少? 利用堆栈传递参数时使用;对于近调用SP=3008H,对于远调用SP=300AH 27.设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶地址为多少?当执行 PUSH BX指令后,栈顶地址和栈顶2个字节的内容分别是什么? 栈顶地址:SS:SP,物理地址为:2FF00H;PUSH 完以后栈顶地址为:SS:SP=2010:FDFEH,即物理地址为:2FEFEH,内容为:57H 34H(由低地址到高地址) B P7 5. 设(DS)=3000H,(BX)=1100H,(CS)=0062H,(S1)=0002H,(31100H)=52H, (31101H)=8FH,(31162H)=6BH,(31163H)=99H,(31103H)=F6H, (32200H)=AAH,(32201H)=B6H,(32800H)=55H,(32801H)=77H,给出下列各指令执行后AX寄存器的内容: (1) MOV AX,BX (2) MOV AX,[BX] (3) MOV AX,4200H (4) MOV AX,[2800H] (5) MOV AX,1100H[BX] (6) MOV AX,[1160H+SI] 9. 分别执行下列各指令组,写出AX的内容: (1) MOV AX,93A4H NEG AX 73A4-8c5c,e689-1977 (AX)=6C5CH (2) XY DW "AB" MOV AX,XY (AX)=4142H (3) MOV AX,2B7EH MOV CX,4DB5H ADD AX,CX (AX)=7933H (4) XA DW 0BD57H MOV AX,0FBCDH AND AX,XA (AX)=B945H (5) STC MOV BX, 0B69FH MOV AX, 43A2H SBB AX, BX

实验一 指令与寻址方式认知实验(Keil)

实验一指令与寻址方式认知实验 一、实验目的 1.了解单片机基本指令及其寻址方式; 2.掌握在μVision环境中查看指令操作结果的技巧。 二、实验仪器和设备 Keil软件;THKSCM-2综合实验装置; 三、实验原理及实验内容 1.示例及相关设置 (1)建立一个文件夹:lx31。 (2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx31.asm文件名存盘到lx31文件夹中。 ORG 0000H MAIN:MOV R7,#16 MOV A,#00H MOV R0,#30H LP:MOV @R0,A INC R0 INC A DJNZ R7,LP SJMP $ END (3)在lx31文件夹下建立新工程,以文件名lx31存盘(工程的扩展名系统会自动添加)。 (4)在Project菜单的下拉选项中,单击Options for Target ‘Target1’,在弹出的窗口中要完成一下设置: ○1单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。 ○2晶振频率设为11.0592MHz。 ○3Output标签下的Create HEX File前小框中要打钩。

○4在Debug标签选择Use Simulator(软件模拟)。 (5)在Project菜单的下拉选项中,单击build Target 选项完成汇编,生成目标文件(.HEX)。利用单步、执行到光标处两种方法运行程序,观察程序运行的结果。 (6)分析程序的功能,研究观察以下指令的寻址方式及其操作效果。 2.示例及相关设置 (1)建立一个文件夹:lx32。 (2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx32.asm文件名存盘到lx32文件夹中。 ORG 0000H MOV R0,#20H MOV R1,#22H MOV A,@R0 ADD A,@R1 MOV 24H,A INC R0 INC R1 MOV A,@R0 ADDC A,@R1 MOV 25H,A SJMP $ END (3)在lx32文件夹下建立新工程,以文件名lx32存盘(工程的扩展名系统会自动添加)。 (4)在Project菜单的下拉选项中,单击Options for Target ‘Target1’,在弹出的窗口中要完成一下设置: ○1单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。 ○2晶振频率设为11.0592MHz。 ○3Output标签下的Create HEX File前小框中要打钩。 ○4在Debug标签选择Use Simulator(软件模拟)。

第六章_寻址方式和指令系统

1

第 6章 寻址方式和汇编指令 第6章
6.1、寻址方式 6.2、汇编语言指令集 6.3、汇编源程序

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
▲ 汇编指令是可执行指令,每条指令对应一条机器 码,用以控制处理器中的执行部件进行各种操 作。 ▲ TMS320F281X系列的汇编指令有150多条。 ▲ 它们支持各种信号处理运算,同时也提供了应用 中所需要的多级处理和过程控制功能。 ▲ 寻址方式是指寻找指令中操作数地址的方式。

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
TMS320C28x指令集采用7种存储器寻址方式: ▲ 直接寻址方式 ▲ 堆栈寻址方式 ▲ 间接寻址方式 ▲ 寄存器寻址方式 ▲ 数据/程序/IO空间立即寻址方式 ▲ 程序空间间接寻址 ▲ 字节寻址方式

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
F2812 的大多数指令利用操作码中的8位字段来选择寻 址方式和对寻址方式进行修改.在 F2812 指令系统中,这个8 位字段用于以下寻址方式: (1)loc16 。 为16位数据访问选择直接/堆栈/间接/寄存器寻址方
式。
(2)loc32 。 为32位数据访问选择直接/堆栈/间接/寄存器寻址方
式。
以上7种寻址方式都与“loc16/loc32”组合起来使用。

第 6章 寻址方式和汇编指令 第6章
6 . 1 寻址方式
寻址方式选择位
由 于 F2812 提 供 了 多 种 寻 址 方 式 , 因 此 用 寻 址 方 式 选 择 位 ( AMODE )来选择8位字段( loc16/loc32 )的解码。该 位属于状态寄存器ST1。寻址方式可以大致归类如下: ▲ AMODE=0——该方式是复位后的默认方式,也是F2812的C/C++编译
器使用的方式。这种方式与C2xLP CPU的寻址方式不完全兼容。数据页指针 偏移量是6位(在C2xLP CPU中是7位),并且不支持所有的间接寻址方式。
▲ AMODE=1——该方式包括的寻址方式完全与C2xLP 器件的寻址方式
兼容。数据页指针的偏移量是7位并支持所有C2xLP 支持的间接寻址方式。
对与loc16或者loc32字段,其可用的寻址方式总结如P375所示

存储器寻址方式

存储器寻址方式 存储器寻址方式的操作数存放在主存储器中,用其所在主存的位置表示操作数。在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。8088的存储器空间是分段管理的。程序设计时采用逻辑地址;由于段地址在默认的或用段超越前缀指定的段寄存器,所以采用偏移地址,称之为有效地址(Effective Address, EA) 1.直接寻址 在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。其默认的段地址在DS段寄存器中,可以采用段超越前缀。 例将数据段中偏移地址2000H处的内存数据送至AX寄存器。 MOV AX, [2000H] 该指令中给定了有效地址2000H, 默认与数据段寄存器DS一起构成操作数所在存储单元的物理地址。 如果DS=1429H,则操作数所在的物理地址为1429H*16+2000H=16920H. 该指令的执行结果是将16920H单元的内容传送至AX寄存器,其中,高字节内容送AH寄存器,低字节内容送AL寄存器。

MOV AX, [2000H];指令代码:A1 00 20 例: 将附加段中偏移地址2000H 处的内存数据送至AX 寄存器。 MOV AX, ES:[2000H]; 指令代码:26 A1 00 20 变量指示内存的一个数据,直接引用变量就是采用直接寻址方式。变量应该在数据段进行定义,常用的变量定义伪指令DB 和DW 分别表示字节变量和字变量,例如 WV AR DW 1234H; 定义字变量WV AR ,它的初值是1234H 这样,标示符WV AR 表示具有初值1234H 的字变量,并由汇编程序为它内存分配了两个连续的字节单元。假设它在数据段偏移地址是0010H 。 例:将数据段的变量WV AR (即该变量名指示的内存单元数据)送至AX 寄存器。 MOV AX, WV AR; 指令功能: 上述指令实质就是如下指令: AX WV AR AX DS :[0010H]

寻址方式和指令系统

《微机原理》复习思考题第3章 8086的寻址方式和指令系统 3.1 8086汇编语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 3.2 直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用某个段 寄存器指出段地址,指令中应如何表示? 3.3 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定? 3.4 用寄存器间接寻址方式时,BX,BP,SI,DI分别针对什么情况来使用?这四个寄存器组合 间接寻址时,地址是怎样计算的?举例进行说明。 3.5 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作: MOV BYTE PTR [BP], 2000 MOV WORD PTR [BX], 2000 3.6 使用堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注 意什么问题? 3.7 下面这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。 XCHG CS, AX MOV [BX], [1000] XCHG BX, IP PUSH CS POP CS IN BX, DX MOV BYTE[BX], 1000 MOV CS, [1000] 3.8 8086系统中,当对SS和SP寄存器的值进行修改时,有什么特殊规定?这样做的原因是什么?[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会自动禁止外部中断,等到本条指令和下条指令执行之后,又自动恢复对SS寄存器赋值前的中断开放情况。这样做是为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程中出现中断。 3.9 以下是格雷码的编码表 0——0000 1——0001 2——0011 3——0010 4——0110 5——0111 6——0101 7——0100 8——1100 9——1101 请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII的转换。 3.10 用加法指令设计一个简单程序,实现两个16位十进制数的加法,结果放在被加数单元。 3.11 为什么用增量指令或减量指令设计程序时,在这类指令后面不用进位标志CF作为判断依 据?

(完整版)第三章指令系统

第三章指令系统习题参考答案(三) 1、80C51系列单片机的指令系统有何特点? 答:80c51的指令系统的特点有:(1)执行时间短。一个机器周期指令有64条,2个时间周期指令有45条,而4个机器周期指令仅有2条(即乘法和除法指令);(2)指令编码字节少。单字节的指令有49条,双字节的指令有45条,三字节的指令仅有17条;(3)位操作指令丰富。这是80c51单片机面向控制特点的重要保证。 2、80C51单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器 空间如何? 答:(1)寄存器寻址。 对应的寄存器有: ·工作寄存器R0~R7 ·累加器A ·寄存器B ·数据指针DPTR (2)直接寻址。 对应的存储空间有: ·片内RAM低128字节(以地址形式表示) ·SFR(以地址形式或SFR符号形式表示,但符号将转换为相应的SFR 地址) (3)寄存器间接寻址。 对应的空间有: ·片内RAM(采用@R0,@R1或SP); ·片外RAM(采用@R0,@R1或@DPTR) (4)变址寻址。 对应的空间有: ·ROM空间(采用@A+DPTR,@A+PC) (5)相对寻址。 ·ROM空间(采用JC rel) (6)位寻址。 ·片内RAM的20H~2FH单元的128可寻址位 ·SFR的可寻址位 3、访问特殊功寄存器SFR可以采用哪些寻址方式? 答:直接寻址、位寻址 4、访问内部RAM单元可以采用哪些寻址方式? 答:寄存器寻址、直接寻址、寄存器间接寻址 5、访问外部RAM单元可以采用哪些寻址方式? 答:寄存器间接寻址 6、访问外部程序存储器可以采用哪些寻址方式? 答:立即寻址、变址寻址、相对寻址 7、为什么说布尔处理功能是80C51单片机的重要特点? 答:布尔处理功能是MCS-51系列单片机的一个重要特征,在物理结构

第三章 80868088的指令系统

3.1 指令的基本格式   一、指令构成 微计算机的指令系统通常由几十种或百余种指令组成(可见表2-1)。每种指令又由两个字段(Field)构成: l.操作码(OP-Code)字段 该字段指示计算机所要执行的操作类型,由一组二进制代码表示,在汇编语言中又用助记将(Mnemonic)代表。8086执行指令时,首先将操作码从指令队列取入执行部件EU中的控制单元,经指令译码器识别后,产生执行本指令操作所需的时序性控制信号,控制计算机完成规定的操作。 2.操作数(Oprand)字段 该字段则是指出指令执行的操作所需的操作数。在操作数字段中,可以是操作数本身,或是操作数地址或是操作数地址的计算方法。微计算机中此字段通常可有一个或两个,称前者为单操作数指令,称后者为双操作数指令。而双操作数又分别称为源操作数src (source)和目的操作数dst(destination)。在指令执行之前,src和dst均为参加运算处理的两个操作数,指令执行之后,在dst中则存放运算处理的结果。 指令的基本格式如下:   二、8086   8086的指令长度可在1~6字节的范围,如图3-1所示。其中B l和B0为基本字节,B3~B6将根据不同指令作相应的安排。   (1)B1字节各字段定义如下: OP--指令操作码。 D--表示方向。D=1寄存器为目的,D=0寄存器为源。 W--表示字节或字处理方式。W=0为字节指令,W=1为字指令。

(2)B2字节各字段定义如下: MOD--给出指令的寻址方式。8086的一条指令中,最多可使用两个操作数,它们不能同时位于存储器中,最多只能有一个是存储器操作数。当MOD=11时为存储器方式,即有一个操作数位于存储器中;MOD=00,没有位移量; MOD01,只有低8位位移量,需将符号扩展8位,形成16位; MOD=10有16位位移量。当MOD=1l时,为寄存器方式,两个操作数均为寄存器。 REG--表示指令中只有一个操作数,这个操作数为寄存器,可见表3-1,表中左部示出寄存器对应的编码。 R/M--R/M受MOD制约。当 MOD=11(即寄存器方式时),由此字段给出指令中第二个操作数所在的寄存器编码;当MOD≠11时,此字段用来指出应如何计算指令中使用的存储器操作数的有效地址。MOD和R /M字段表示的有效地址 EA计算方法如表3-1所示,共2 4种。   (3) B3~B6字节这四个字节一般是给出存储器操作数地址的位移量(即偏移量)和/或立即操作数。位移量可为8位,也可为16位,这由MOD来决定。8086规定16位的字位移量的低位字节放于低地址单元,高位字节放于高地址单元。 若指令中只有8位位移量, 8086在计算有效地址时,自动用符号将其扩展成一个16位的双字节数,以保证有效地址的计算不产生错误,实现正确的寻址。指令中的立即操作数位于位移量的后面。若B3,B4有位移量,立即操作数就位于B5,B6。若指令中无位移量,立即操作数就位于B3,B4字节。总之,指令中缺少的项将由后面存在的项向前顶替,以减少指令长度。 3.2 8086的寻址方式   8086的操作数可隐含在操作码中,也可以是操作数字段中的操作数本身,还可以是存放操作数的地址,如寄存器,I/0端口及存储器。对存储器,给出的或是存储器地址,或是产生存储器地址的信息。从表3

指令格式及寻址方式

指令格式及寻址方式 一、指令格式 指令的表示方法称为指令格式,它包括指令的长度和指令内部信息的安排等内容。一条指令一船由两部分组成,即操作码和操作数。操作码用来规定指令进行什么操作,而操作效则表示指令操作的对象。操作数可以直接是一个数(立即数),也可以是一个数据所在的空间地址,即在执行指令时从指定的地址空间取出操作数。 单片机中的指令并不是固定的长度,对于不同的指令,指令的字节数不同。MC5—5l 单 片机用机器语言表示的指令格式按字节划分,有一字节指令、两字节指令和三字节指令三种。 1.一字节指令 一字节指令中的8位二进制代码既包含操作码的信息,也包含操作数的信息。在一字节指令中,有些指令的指令码中隐合着对某一寄存器的操作,NXP代理商无需再具体指定操作数。例如数 据指针DPTR加1指令;INC DPTR,其指令码为: 另外有些指令的操作数在通用寄存器中,由指令码中的rrr三位的不同编码来指定该 寄存器。例如:寄存器向氮加器A传送数据指令:MOV A,Rn,其指令码为: 其中,高5位表示操作内容——传送,最低三位rrr的不同二进制编码用来表示从哪一个寄 存器取数。 2.二字节指令。 二字节指令中的第一个字表尔操作码,第二个字节表示操作数,这里的操作数既可能是立即数,也可能是地址。其指令格式为: 3.三字节指令 三节节指令中,第一字节表示操作码,另两个字节是操作数,其指令格式为

绝大多数指令执行时都需要使用操作数,因此如何寻找存放操作数的单元地址和提取操作数就变得十分重要。Atmel代理所谓寻址方式就是如何找到存放操作数的地址,把操作数提取出来 的方法。 寻址方式与计算机的存储器空间结构有关,寻址方式越多,则计算机的功能越强,灵活性也越大,能更有效地处理各种数据,但指令系统也会相应的复杂。 MCS-51单片机共有七种寻址方式。下面分别加以介绍。 1.寄存器寻址 寄存器寻址是将所选定的工作寄存器组中的8个工作寄存器(R0—R7)的内容作为操 作数。指令操作码的低三位的不同组合分别代表R0—R7中的某一个。A、B、DPTR和C(位累加器)也能作为寄存器来寻址。例如: 这里源操作数和目标操作数均采用寄存器寻址.寄存器中的内容为操作数。 2.直接寻址 在直接寻址方式中、操作数由指令中的一个8位地址单元所指定。只有内部RAM中的00H~7FH地址单元和80H~FFH地址中的专用寄存器可直接寻址,且直接寻址是访问专 用寄存器的唯一方法。 采用直接寻址方式的指令是双字节指令,第一个字节是操作码,第二个字节是内部RAM的低128字节或专用寄存器的地址。例如: 此例中,源操作数采用直接寻址方式,表示把内部RAM中30H单元的内容送入A。指令代码为E5H、30H。 3.寄存器间接寻址 在寄存器间接寻址方式个,指令中给出的杏存器的内容为操作数的地址,而不是操作数本身。内部RAM和外部RAM都可以间接寻址。 当访问内部RAM或外部RAM的低256字节时,间址寄存器可以是选中寄存器组中的R0或R1,即内R0或R1间接给出操作数所在的地址‘ 当访问外部RAM时,16位间址寄存器只能使用16位数据指针寄存器DPTR,这时可对整个外部RAM空间(64KB)寻址。 PUSH和POP指令的执行也采用寄存器间接寻址,这时堆栈指针SP用作间址寄存 器。堆栈指针可驻留在内部RAM的任何地方;例如:

指令与寻址方式习题

指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式:(1)AND AX,0FFH (2)AND BL,[OFFH] (3)MOV DS,AX (4)CMP [SI],CX (5)MOV DS:[0FFH],CL (6)SUB [BP][SI],AH (7)ADC AX,0ABH[BX] (8)OR DX,-35[BX][DI] (9)PUSH DS (10)CMC 答:目的操作数源操作数 (1)寄存器直接寻址立即数寻址 (2)寄存器直接寻址直接寻址 (3)寄存器直接寻址寄存器直接寻址 (4)寄存器间接寻址寄存器直接寻址 (5)直接寻址寄存器直接寻址 (6)基址变址寻址寄存器直接寻址 (7)寄存器直接寻址寄存器相对寻址 (8)寄存器直接寻址基址变址相对寻址 (9)无寄存器直接寻址 (10)隐含寻址 2.试分别指出下列各指令语句的语法是否有错,如有错,指明是什么错误。 (1)MOV [BX][BP],AX (2)TEST [BP],BL (3)ADD SI,ABH (4)AND DH,DL (5)CMP CL,1234H (6)SHR [BX][DI],3 (7)NOT CX,AX (8)LEA DS,35[SI] (9)INC CX,1 (10)P USH 45[DI] 答:(1)应将BP,BX其中之一该为SI或DI (2)正确 (3)ABH改为0ABH (4) (5)是字操作,CL改为CX (6)移位数大于1时,应用CL (7)NOT指令只有一个操作数 (8)LEA指令的源操作数应为一内存单元地址

(9)此指令不用指出1 (10)45改为45H 3.下面两条指令执行后,标志寄存器中CF,AF,ZF,SF和OF分别是什么状态? MOV DL,86 ADD DL,0AAH 答: 0101,0110 + 1010,1010 = 1,0000,0000 CF=1 AF=1 ZF=1 SF=1 OF=1 4.在8086/8088CPU中可用于作地址指针的寄存器有哪些? 答:有BX,CX,DX,BP,SI,DI (IP,SP,) 5.已知(DS)=09lDH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH。下列各指令或程序段分别执行后的结果如何? (1)MOV CL,20H[BX][SI] (2)MOV [BP][DI],CX (3)LEA BX,20H[BX][SI] MOV AX,2[BX] (4)LDS SI,[BX][DI] MOV [SI],BX (5)XCHG CX,32H[BX] XCHG 20H[BX][SI],AX 答(1) (CX)=56F6H; (2) (09226H)=5678H; (3) (AX)=1E40H; (4) (1E4F6H)=0024H; (5) (09226H)=1234H,(AX)=5678H. 6.已知(SS)=09l 5H,(DS)=0930H,(SI)=0A0H,(DI)=1C0H,(BX)=80H,(BP)=470H。现有一指令“MOV AX,OPRD”,如源操作数的物理地址为095C0H,试用四种不同寻址方式改写此指令(要求上述每个已知条件至少要使用一次)。 答:(1)MOV AX,[BP] (2)MOV AX,[BP+DI+80H] (3)MOV AX,[DI+0100H] MOV AX,[SI+0220H] (4)MOV AX,[02C0H] 7.试按下列要求分别编制程序段: (1)把标志寄存器中符号位SF置‘1’。 (2)寄存器AL中高低四位互换。 (3)由寄存器AX,BX组成一个32位带符号数(AX中存放高十六位),试求这个数的负数。 (4)现有三个字节存储单元A,B,C。在不使用ADD和ADC指令的情况下,实现(A)+(B)=>C。 (5)用一条指令把CX中的整数转变为奇数(如原来已是奇数,则CX中数据不变,如原来是偶数,则(CX)+1形成奇数)。 答:(1)MOV AH, 80H SAHF

MCS-51单片机的寻址方式和指令系统

MCS-51单片机指令系统与汇编语言程序设计 伪指令............................................. (2) MCS-51单片机的寻址方式 (4) MCS-51单片机的指令系统 (7) 数据传送指令 (8) 算数运算指令 (10) 逻辑运算及移位指令 (12) 控制转移指令 (13) 位操作指令 (18)

指令格式:指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。完整的指令格式如下: [标号:] 操作码 [操作数] [,操作数] [;注释] 标号: 代表指令的具体地址 操作码: 又称助记符,英文缩写 操作数: 操作数中常数可以用二、八、十、十六进制表示,如果用十六进制表示,最高位用A以上的数开头时,前面须加0,否则机器不识别 注释:增加程序的可读性 伪指令 (1)定位伪指令ORG 格式:ORG n 其中:n通常为绝对地址,可以是十六进制数、标号或表达式。 功能:规定编译后的机器代码存放的起始位置。在一个汇编语言源程序中允许存在多条定位伪指令,但每一个n值都应和前面生成的机器指令存放地址不重叠。 例如程序:ORG 1000H START:MOV A,#20H MOV B,#30H ┇ (2)结束汇编伪指令END 格式:[标号:] END [表达式] 功能:放在汇编语言源程序的末尾,表明源程序的汇编到此结束,其后的任何内容不予理睬。 (3)赋值伪指令EQU 格式:字符名称x EQU 赋值项n 功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符名称x就等同于该赋值项n,其值在整个程序中有效。赋值项n可以是常数、地址、标号或表达式。在使用时,必须先赋值后使用。 “字符名称”与“标号”的区别是“字符名称”后无冒号,而“标号”后面有冒号。 (4)定义字节伪指令DB

1_寻址方式与基本指令实验

2.1 寻址方式与基本指令实验 2.1.1 实验目的 1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。 2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计打好基础。 3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法 2.1.2 实验预习要求 1、认真阅读本书第一部分第1章,熟悉汇编语言程序设计上机步骤。 2、认真阅读本书第三部分,熟悉DEBUG调试工具的使用方法。 3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。 4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行环境的问题除外),以便在实验时进行验证。 2.1.3 实验内容 1、读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST 文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。 (1)程序装入后,代码段寄存器CS的内容为13FD________H,代码段第一条可执行指令MOV A X, DATA对应的机器代码为B8FC13__________H,它是一个_3_______字节指令,注意观察 执行该指令时IP值的变化情况,该指令源操作数DATA的寻址方式是(立即数寻址_),其值为__13FC________。 (2)执行完MOV DS, DATA指令后,数据段寄存器DS的内容为_13FC_______H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为_13FC0_______H、13FC1________H和13FC2________H。 (3)程序中第一条ADD AL, [BX] 指令对应的机器代码为_0207_________H,它是一个_2_______字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为_寄存器间接寻址_________,该操作数所在存储单元的逻辑地址(DS): (BX)为_13FC:0001_________,其物理地址为_13FC1_________H;执行完该指令后(AL)=_EA_____H,CF=_NC_____,OF=NV______,ZF=NZ______,SF=NG______,AF=NA______,PF=PO______;若两操作数为无符号数,计算结果是否正确__正确_____?若两操作数为带符号数,计算结果是否正确__正确______?若计算结果正确,结果是正数还是负数(正数)? (4)执行完第二条ADD AL, [BX] 指令后(AL)=__72____H,CF=CY______,OF=OV______,ZF=NZ______,SF=PL______,AF=AC______,PF=PE______;若两操作数为无符号数,计算结果是否正确__正确_____?若两操作数为带符号数,计算结果是否正确_不正确_______? (5)指令MOV SUM, AL中目的操作数的寻址方式为__寄存器直接寻址________。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元的值变为_00_______H。 DA TA SEGMENT NUM DB 82H, 68H, 88H SUM DB ? DA TA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DA TA

第三章寻址方式与指令系统

第三章寻址方式与指令系统 一:选择题 1:下列指令中正确的是() A:MOV BX,AL B:MOV BL,AX C:MOV BL,AL D:MOV BL,BP 2:下列指令不合法的指令是() A:IN AX,03F8H B:MOV AX,BX C:REP CMPSB D:SHR BX,CL 3:下列指令中正确的是() A:MOV 100,CL B:MOV CL,100H C:MOV CL,1000 D:MOV CL,100 4:下列指令中正确的是() A:MOV SS,2400H B:MOV 2400H,SS C:MOV SS,DS D:MOV SS,SP 5:下列指令中正确的是() A:XCHG AH,AL B:XCHG AL,20H C:XCHG AX,DS D:XCHG[BX],[20H] 6:执行完下列程序后,BX寄存器的内容是() MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL A:002DH B:00EDH C:C02DH D:000DH 7:在程序运行过程中,确定下一条指令的物理地址的计算表达式是() A:CS×16+IP B:BX×16+DI C:SS×16+SP D:ES×16+SI 8:寄存器间接寻址方式中,操作数在()中 A:通用寄存器B:堆栈C:主存单元D:段寄存器 9:下列指令,指令()先执行CX-1赋给CX操作,然后再根据CX的值决定是否转移、循环或进行重复操作。 A:JNC B:REP C:JCXZ D:LOOP 10:运算型指令的寻址和控制转移型指令的寻址,其不同点在于() A:前者取操作数,后者决定程序的转移地址B:后者取操作数,前者决定程序的转移地址 C:两者都是取操作数D:两者都是决定程序的转移地址 11:在PC系列机中调试汇编语言程序的工具是DEBUG。用DEBUG调试程序时,可以在目标程序中设断点,或用单步跟踪来找出程序中的毛病。断点只能在RAM中设置,不能在ROM中设置,这是因为() A:ROM不能存放汇编程序B:ROM中数据不能修改 C:ROM不能放入断点中断指令D:ROM不能保护断点 12:DEBUG调试工具是汇编语言最有力的调试手段,当用D命令时显示的结果如下: 0000:0080 72 10 A7 00 7C 10 A7 00—4F 03 62 06 8A 03 62 06 0000:0090 17 03 62 06 86 10 A7 00—90 10 A7 00 9A 10 A7 00 INT 21H是最常用的DOS中断,试确定INT 21H的中断向量为 A:1072H:00A7H B:7C10H:A700H C:00A7H:107CH D;107CH:00A7H 13:设AL和BL是带符号数,当AL≤BL时转至NEXT处,在CMP AL,BL指令后应选择正确的条件指令是 A:JBE B:JNG C:JNA D:JNLE 二:填空题 1:若累加器AX中的内容为4142H,执行指令CMP AX,4041H后,(AX)= 。执行SUB AX,4041H 后,(AX)= 。 2:用CBW指令生成双倍长度的被除数存放在。用CWD指令生成双倍长度的被除数存放在。

单片机的指令和寻址方式

单片机的指令和寻址方式 单片机要正常运作,事先需编制程序,再把程序放入存贮器中,然后由CPU 执行该程序。程序是由指令组成的,指令的基本组成是操作码和操作数。单片机的品种很多,设计时怎样表示操作码和操作数,都有各自的规定,再有指令代码也各不相同,因此,必须对所选单片机的全部指令,也就是所谓指令系统,有足够的了解。各个系列的单片机虽然有不同的指令系统,但也有其共同性。掌握一种单片机的指令系统,对其它系列单片机可以起到触类旁通的作用。MCS-51 单片机应用广泛,派生品种多,具有代表性,所以,这里以MCS-51 系列的指令系统为例说明指令的组成和应用。1、MOV A,#20H 这条指令表示把20H 这个数送入累加器A 中(一个特殊功能寄存器)。 2、ADD A,70H 这条指令表示把累加器A 中的内容(在上例中送入的#20H)和存贮器中 地址为70H 单元中的内容(也是一个数字),通过算术逻辑单元(英文缩写为ALU)相加,并将结果保留在A 中。这里MOV、ADD 等称为操作码,而 A、#20H、70H 等均称为操作数。在汇编语言程序中,操作码通常由英文单词缩写而成,这样有助于记忆,所以又称助记符。如MOV 就是英文单词MOVE 的缩写,含有搬移的意思;而ADD 即为英文单词,其意为相加。因此,对于 略懂英语的用户,掌握单片机指令的含意是较为方便的。操作数有多种表示法,如以上的#20H 称为立即数,即20H 就是真正的操作数。而70H 是存贮器中某个单元的地址,在该单元中,放着操作数(比如说是3AH),ADD A,70H 不是将70H 和A 中的内容相加,而是从存贮器70H 单元中将3AH 取出和A 中的内容相加。由上可知,要找到实际操作数,有时就要转个弯,甚至转几个弯,这个过程称为寻址,MCS-51 共有7 种寻址方式,现介绍如下:

MIPS基本指令和寻址方式

MIPS 基本指令和寻址方式: MIPS 是典型的RISC 处理器,采用32位定长指令字,操作码字段也是固定长度,没有专门的寻址方式字段,由指令格式确定各操作数的寻址方式。 MIPS 指令格式一般有三种格式: R-型指令格式 I-型指令格式 J-型指令格式 R _Type 指指指指 26 21 16 11 6 31 OP : 操作码 rs : 第一个源操作数寄存器 rt : 第二个源操作数寄存器(单目原数据) rd : 结果寄存器 shamt :移位指令的位移量 func : 指令的具体操作类型 特点:R-型指令是RR 型指令,其操作码OP 字段是特定的“000000”,具体操作类型由func 字段给定。例如:func=“100000”时,表示“加法”运算。 R[rd] ← R[rs] + R[rt] I _Type 指 指指指 26 21 1631 15 特点:I-型指令是立即数型指令 双目运算: R[rt] R[rs](OP )SignExt(imm16) Load 指令: Addr ← R[rs] + SignExt(imm16) 计算数据地址 (立即数要进行符号扩展) R[rt] ← M[Addr] 从存储器中取出数据,装入到寄存器中

Store 指令: Addr ← R[rs] + SignExt(imm16) M[Addr] ← R[rt] J _Type 指令格式 2631 6bit 26bit 25 特点:J-型指令主要是无条件跳转指令,将当前PC 的高4位拼上26位立即数,后补两个“0”, 作为跳转目标地址。 j L //goto L 指指指指指指指指指 jal L //$ra 指PC+4;goto L 指指指指指指指指指 R 型指令: 定点运算: add / addu , sub / subu , sra , mult/multu , div/divu 逻辑运算: and / or / nor , sll / srl 比较分支: beq / bne / slt / sltu 跳转指令: jr I 型指令: 定点运算: addi / addiu 逻辑运算: andi / ori 比较分支: slti / sltiu 数据传送: lw / sw / lhu / sh / lbu / sb / lui J 型指令: j / jal

相关文档
最新文档