第二章4 8086指令系统(算数运算)

合集下载

微机原理与接口技术(第三版)课本习题答案

微机原理与接口技术(第三版)课本习题答案

第二章 8086体系结构与80x86CPU1.8086CPU由哪两部分构成它们的主要功能是什么答:8086CPU由两部分组成:指令执行部件(EU,Execution Unit)和总线接口部件(BIU,Bus Interface Unit)。

指令执行部件(EU)主要由算术逻辑运算单元(ALU)、标志寄存器FR、通用寄存器组和EU控制器等4个部件组成,其主要功能是执行指令。

总线接口部件(BIU)主要由地址加法器、专用寄存器组、指令队列和总线控制电路等4个部件组成,其主要功能是形成访问存储器的物理地址、访问存储器并取指令暂存到指令队列中等待执行,访问存储器或I/O端口读取操作数参加EU运算或存放运算结果等。

2.8086CPU预取指令队列有什么好处8086CPU内部的并行操作体现在哪里答:8086CPU的预取指令队列由6个字节组成,按照8086CPU的设计要求,指令执行部件(EU)在执行指令时,不是直接通过访问存储器取指令,而是从指令队列中取得指令代码,并分析执行它。

从速度上看,该指令队列是在CPU内部,EU从指令队列中获得指令的速度会远远超过直接从内存中读取指令。

8086CPU内部的并行操作体现在指令执行的同时,待执行的指令也同时从内存中读取,并送到指令队列。

5.简述8086系统中物理地址的形成过程。

8086系统中的物理地址最多有多少个逻辑地址呢答:8086系统中的物理地址是由20根地址总线形成的。

8086系统采用分段并附以地址偏移量办法形成20位的物理地址。

采用分段结构的存储器中,任何一个逻辑地址都由段基址和偏移地址两部分构成,都是16位二进制数。

通过一个20位的地址加法器将这两个地址相加形成物理地址。

具体做法是16位的段基址左移4位(相当于在段基址最低位后添4个“0”),然后与偏移地址相加获得物理地址。

由于8086CPU的地址线是20根,所以可寻址的存储空间为1M字节,即8086系统的物理地址空间是1MB。

8086CPU指令系统

8086CPU指令系统

3.3.2 算术运算类指令
1.加法指令
(2)带进位加法指令ADC
【指令格式】ADC dst,src 【指令功能】(dst) ← (dst)+(src)+(CF) ADC指令在格式和功能上都与ADD指令类似,只是相加时要 把进位标志CF的当前值加到和中,结果送到目的操作数中。 【用途】ADC指令主要用于多字节加法运算。 例如,有两个4字节的无符号数相加,由于8086加法指令最 多只能进行16位的加法运算,我们可将加法分两次进行,先 进行低16位相加,然后再进行高16位相加,在完成高16位 相加时,注意要把低16位相加时可能出现的进位位加进去。
•堆栈操作指令PUSH和POP
由于堆栈顶部是浮动的,为了指示现在堆栈中存放数据的位 置,通常设置一个指针,即堆栈指针SP,始终指向堆栈的顶部。 这样,堆栈中数据的进出取决于SP。当将数据(1个字节)推 入堆栈时,SP自动减1,向上浮动而指向新的栈顶;当将数据 从堆栈弹出时,SP自动加1,向下浮动而指向新的栈顶。 堆栈有建栈、进栈和出栈3种基本操作。 ⑴建栈
出栈操作都是以字为单位的,即每次在堆栈中存取数据均是两 个字节(先存入高字节,再存入低字节,仍然遵循“高字节在 高地址,低字节在低地址”的原则)。
【指令格式】PUSH opr 【指令功能】PUSH指令将16位的源操作数推入堆栈,而目标
地址为当前栈顶,即由SP指示的单元。PUSH指令操作如下: ①(SP)←(SP)-2 ②((SP)+1: (SP) ) ← opr
③代码段寄存器CS和指令指针寄存器IP不能作为目的 操作数,但CS可以作为源操作数.
④立即数不能作为目的操作数. ⑤不能用立即寻址方式给段寄存器传数. ⑥段寄存器之间不能用MOV指令直接传送. ⑦在传送字单元时,遵循“高字节在高地址,低字节在 低地址”的原则。

汇编语言程序设计(第四版)【课后答案】

汇编语言程序设计(第四版)【课后答案】

汇编语言程序设计第四版【课后习题答案】第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。

〔解答〕CPU:包括运算器、控制器和寄存器组。

运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。

存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。

外部设备:实现人机交换和机间的通信。

〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。

〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。

辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。

RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。

存储器由大量存储单元组成。

为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。

KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。

〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。

〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。

微机原理指令系统的学习

微机原理指令系统的学习

;此时传送的操作数在数据段中,其偏移地址是 SI寄存器中的内容加上0200H 变址寻址可以有多种格式:
MOV AX, [BX+0A00H]
MOV AX, TAB[DI] 如:MOV AX, 0200H+[BX]
假设DS:3000H, BX: 1000H 则操作数所在地址:
高8位: 31201H 低8位: 31200H
存储器
格式:IN AL , PORT IN AX, PORT
功能:从PORT口输入数据到AL(AX)。
格式:OUT PORT , AL OUT PORT, AX
功能20:20/7/将17 AL(AX)中的内容从PORT口输出。
33
IN AL, 40H
OUT 40H , AL
8位
IN AX, 40H
功能: (OPRD2) OPRD1
•CPU内部寄存器之间数据的传送(除CS、IP)
•立即数传送至CPU内部的通用寄存器组
•CPU内部的寄存器(除CS、IP)与存储器(所有寻 址方式)之间
•能实现用立即数给存储单元赋值
2020/7/17
25
注意: • CS,IP不能作为目的操作数 MOV CS, AX • 两个段寄存器间不能直接传送 MOV SS, DS • 立即数不能直接传送给段寄存器 MOV DS,2000H • 内存单元间不能直接传送 MOV [SI], [2000H] • 立即数不能作为目的操作数 MOV 1000H, AX
而执行POP BX后,栈顶的物理地址是:
20190H+2H=20192H
2020/7/17
30
2020/7/17
31
3. 交换指令XCHG 格式:XCHG OPRD1, OPRD2

8086 指令系统

8086 指令系统

3-2 8086 指令系统包括:数据传送类指令、算术运算类指令、逻辑运算与移位指令、串操作指令、转移和调用指令与微处理器控制指令一、数据传送类指令包括:通用传送指令、地址传送指令、标志寄存器传送指令、输入/输出指令传送类指令的最大特点是:指令执行后,不影响标志寄存器(标志寄存器传送指令除外)。

(一)、通用传送指令类型:基本传送指令、堆栈传送指令、数据交换指令、换码指令功能:把源操作数传送到目的寄存器或目的地址单元。

格式:MOV 目的操作数,源操作数;1.传送指令格式: MOV 目的操作数,源操作数;功能:把源操作数传送到目标寄存器或目标地址单元。

源操作数可以是:立即数、寄存器操作数和内存操作数。

目标操作数可以是:寄存器操作数和内存操作数。

MOV 指令可以实现:立即数→通用寄存器、内存单元。

段寄存器、寄存器操作数→寄存器、内存单元。

内存操作数→通用寄存器、段寄存器。

1)立即数→通用寄存器、内存单元。

立即数→通用寄存器MOV AX,2356H;MOV BH,33H;立即数→内存单元MOV [BX+SI],0F080H;MOV BYTE PTR [BX],12H;源操作数、目的操作数的类型要匹配。

源操作数是单字节,目的操作数是间址、变址、基址+变址的内存操作数,后者必须用PTR说明是字节型。

2)段寄存器、寄存器操作数→寄存器、内存单元。

寄存器操作数→寄存器MOV DL,CLMOV BP,SP寄存器操作数→内存单元MOV BUF, AL;BUF 为字节型变量MOV WBUF,AX;WBUF为字型变量段寄存器→寄存器、内存单元。

MOV BX,SS ;MOV OLD1C,ES;OLD1C为字型变量3)寄存器、内存单元操作数→段寄存器。

MOV DS,AX;MOV ES,[BX];错误指令举例:MOV 52,AH;MOV CS,AX;MOV IP,BX;CS、IP和立即数不能做目的操作数。

MOV [DI],[SI];MOV [1000H],[SI];禁止内存单元之间直接传送。

48086CPU指令系统

48086CPU指令系统
• 不能使用段寄存器
XCHG DS,ES XCHG AX,DS XCHG DS,[ BX ] • 不能使用双存储器 XCHG [ BX ],[ SI ] • 不能使用立即数 XCHG AX,2000H XCHG 20H,BL
《例》用 MOV、PUSH,POP、XCHG 指令 完成两寄存器AX、BX 中数据的交换
• 指令格式

指令功能
OPR1、OPR2 两个操作数间交换数据
数据传送类指令
XCHG指令的应用范围
• 通用寄存器与通用寄存器间交换数据
XCHG AX,BX XCHG DL,CH • 通用寄存器与存储器间交换数据 XCHG AX,[ BX ] XCHG [ SI ],AL
数据传送类指令
XCHG指令的 禁用情况
通用传送指令 PUSH、POP 中 src、dst 操作数的使用
• 为通用寄存器、段寄存器操作数
PUSH AX、PUSH ES POP DS、 POP BX • 为存储器操作数 PUSH [ 2000H ]、PUSH [ BX ] POP [ BX ]、 POP [ 1000H ]
通用传送指令PUSH、POP中 src、dst 操作数的禁用
数据传送类指令
指令 LEA 与 LDS,LES 的区别
• LEA src
scr 表示存储器地址本身
• LDS r,src
LES r,src src 表示存储器地址中的值
地址传送指令的比较
已知:DS=09A0H,BX= 0048H
LEA DI,[BX] → 执行后:DI=0048H 等价于 MOV DI,OFFSET [BX] LDS DI,[BX] → 执行后:DI=003EH DS=0816H LES DI,[BX] → 执行后:DI=003EH ES=0816H Memory

(3)8086寻址方式与指令系统

(3)8086寻址方式与指令系统
该指令的目标操作数采用直接寻址方式。操作数存放 在由ES指示的附加段中。 物理地址=ES×10H+1225H。
在汇编语言指令中,可以用符号地址代替数值地 址。 例如: MOV AX,NUMA
此时,NUMA是存放操作数的内存单元的符号地址。
上面这条指令还可以写成如下的形式: MOV AX,[NUMA] 如DATA1数据存放在附加段,则可以用如下的形 式指定段跨越前缀: MOV AX,ES: NUMA或 MOV AX,ES:[ NUMA]
4.2 8086寻址方式
寻址方式:
指令中给出的寻找操作数有效地址的方法。
寻址操作:
计算机按照指令给出的寻址方式求出操作数有效地址 的过程。
808的七种基本的数据寻址方式
(1)立即寻址; (2)寄存器寻址; (3)直接寻址; (4)寄存器间接寻址; (5)寄存器相对寻址; (6)基址变址寻址; (7)相对基址变址寻址。
MOV指令的使用说明
源操作数可以是立即数、寄存器或内存操作数。 目标操作数可以是寄存器或内存操作数。 立即数和CS寄存器只能作为源操作数,不允许作 为目标操作数。 IP和PSW都不可作为源操作数或是目标操作数。 立即数不允许直接传送至DS、ES或SS寄存器。 源操作数和目标操作数不允许同时是内存操作数 ,也不允许同时是段寄存器。 源操作数和目标操作数的类型必须相同,即同为 字节类型或字类型。
控制转移指令
4.3.1数据传送指令
数据传送指令是将数据或地址传送到寄存器、存 储单元或I/O端口中。 分为5类: 通用数据传送指令;


累加器专用传送指令;
地址传送指令;


标志传送指令;
数据类型转换指令。
数据传送指令的共同特点

8086微处理器-指令系统思维导图,脑图

8086微处理器-指令系统思维导图,脑图

8086微处理器指令系统数据传送数据传送指令可完成寄存器与寄存器之间、寄存器与存储器之间以及寄存器与I/O 端口之间的字节或字传送,它们共同的特点是不影响标志寄存器的内容通用数据传送指令MOV 传送指令格式: MOV 目标,源指令功能:将源操作数(一个字节或一个字)传送到目标操作数。

源操作数可以是8/16位通用寄存器、段寄存器、存储器中的某个字节/字或者是8/16 位的立即数。

堆栈操作指令后进先出的规则存取信息堆栈指针信息存入堆栈时,堆栈指针将自动减量,并将信息存入堆栈指针所指出的存储单元当需要从堆栈中取出信息时,也将从堆栈指针所指出的存储单元读出信息,并自动将堆栈指针增量堆栈指针始终指向堆栈中最后存入信息的那个单元栈顶不断移动、动端堆栈区的另一端则是固定不变的栈底PUSH 入栈指令格式: PUSH 源指令功能:将源操作数压入堆栈。

源操作数可以是16 位通用寄存器、段寄存器或者是存储器中的数据字。

P38 例 2.12POP 出栈指令格式: POP 目标指令功能:将堆栈中当前栈顶和次栈顶中的数据字弹出送到目标操作数。

目标操作数可以是16 位通用寄存器、段寄存器或者是存储单元。

P39 例 2.13XCHG 交换指令1格式: XCHG 目标,源指令功能:将源操作数与目标操作数(一个字节或一个字)相互交换位置。

源操作数可以是通用寄存器或存储单元。

目标操作数只允许是通用寄存器。

P39 例 2. 14XLAT 换码指令2目标地址传送指令这是一类专用于传送地址码的指令,可用来传送操作数的段地址或偏移地址LEA 有效地址送寄存器指令格式: LEA 目标,源指令功能:将源操作数的有效地址EA 传送到目标操作数。

源操作数必须是存储器操作数。

目标操作数必须是16位通用寄存器。

LDS 指针送寄存器和DS指令格式: LDS 目标,源指令功能:从源操作数所指定的存储单元中取出某变扯的地址指针(共4 个字节),将其前两个字节(即变量的偏移地址)传送到目标操作数,后两个字节(即变量的段地址)传送到DS 段寄存器中。

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

二、算术运算指令—符号扩展指令
15、CBW 指令
格式:CBW
•无操作数指令 •隐含对AL或AX进行符号扩展 •不影响条件标志位。
功能: 若(AL)的最高有效位为0,则(AH)= 00H 若(AL)的最高有效位为1,则(AH)= 0FFH 16、CWD 指令 格式:CWD 功能: 若(AX)的最高有效位为0,则(DX)= 0000H 若(AX)的最高有效位为1,则(DX)= 0FFFFH 例:(AX)=0BA45H=1011 1010 0100 0101B CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H
功能:(dest) -(src)
CX,DX
SI,DI
CH,LD
DH,DL BH,BL
例如:
CMP CMP AX,BX CL,[SI]
BP,SP
立即数
DS,ES,SS
CMP
8、NEG 指令 格式:NEG
CL,56H
dest
功能: (dest) (dest) + 1(求补 运算) 例如: NEG CL
IMUL指令: CF/OF =
例:
MUL CL ;(AL)*(CL)积在AX中 ;(AX)*(SI)积在DX:AX中 MUL SI
MUL AX
;(AX)*(AX)积在DX:AX中
二、算术运算指令—除法指令
13、DIV 指令
格式:DIV src 商: AL ←AX / SRC
若src是字节数据,则被除数是 AX 功能:
功能:对AL中的压缩BCD码 加法结果进行修正。 AL高4位
AF=1 >9 ,CF=0
AL←AL+60H CF=1
CF=1
0001 1001 +0000 1000 0010 0001 0001 1001 +0000 0110 0010 0111
例如19+8=27的BCD加法
+06H 修正
AF=1
27BCD
CF=1
AF=1
BCD数只能表示无符号数
二、算术运算指令—乘法指令
11、MUL 指令 格式:MUL src
若src是字节数据,则AL=dest
功能:
AX ← AL*SRC
DX:AX ← AX*SRC
若src是字数据,则AX=dest
12、IMUL 指令 格式:IMUL src 功能:IMUL同MUL只是针对有符号数。
(DX):(AX)=0002H:F365H 与 (BX):(CX) =0005H:E024H 相加 即是:(DX):(AX) + (BX):(CX)= (DX):(AX) F365H ADD E024H AX CX
2F365H+5E024H=8D389H
指令序列 (1) ADD AX, CX (2) ADC DX, BX (1)执行后 (AX)= 0D389H CF=1 OF=0
SI,DI
CH,CL
DH,DL BH,BL
例如:
ADD ADD AX,BX CL,[SI]
BP,SP
立即数
DS,ES,SS
ADD
ADD ADD
CL,AL
DX,ES AL,30H
ADD BYTE PTR [DI],12H
影响标志位OF SF ZF AF CF
ADD 指令对标志位
SF= CF= 1 0
n=8bit 带符号数(-128~127) 有符号数和无符号数都不溢出
无符号数(0~255) 无符号数溢出
0000 0100 + 0000 1011 0000 1111 有:(+4)+(+11)=+15 OF=0 无:4+11=15 CF=0
有符号数和无符号数都溢出
0000 0111 + 1111 1011 0000 0010 有:(+7)+(-5)=+2 OF=0 无:7+251=2 CF=1
>9 AL低4位 AL←AL﹣06H AF=1 >9 AL高4位 CF=1 AL←AL﹣60H
功能:对AL中的压缩BCD码 减法结果进行修正。
例如34 ﹣ 89=45的BCD 减法
0011 0100 ﹣ 1000 1001 1010 1011
﹣ 06H 修正
1010 1011 ﹣ 0110 0110 0100 0101 45BCD
•CMP 影响标志位不保存结果 •NEG 不影响标志位 NEG 3
NEG
NEG
DX
SI
二、算术运算指令—加法调整指
令(P78)
9、DAA 指令 格式:必须紧跟在ADD、ADC 之后。
•OF不确定,其余标志位随运算 结果而变。 •只能在ADD或ADC之后出现。
>9,AF=0 AL低4位 AL←AL+06H
有符号数溢出:OF=最高位进位 异或 次高位进位
二、算术运算指令—加法指令
2、ADC 指令 格式:ADC dest , src AX,BX 功能: (dest) (dest)+(src)+CF
内存 AH,AL
CX,DX
SI,DI
CH,CL
DH,DL BH,BL
例如:
ADC ADC AX,BX CL,[SI 0 结果为0 否则
结果为负 否则
1 0
1 0 1 0
和的最高位向高位有进位 否则
两个操作数符号相同,而结果符号与之相反 否则 D3产生进位 否则
OF=
AF=
CF——表示无符号数相加的溢出。 OF——表示带符号数相加的溢出。 AF——BCD数运算的调整指令中,该位和CF位会 影响是否对低、高4位进行调整
余数: AH AX % SRC
商: AX ←DX:AX / SRC 若src是字节数据,则被除数是 DX: AX 余数:DX DX:AX % SRC 14、IDIV 指令
格式:IDIV src
功能:IDIV同DIV只是针对有 符号数。
•AX(DX:AX)隐含的被除数寄存器。 •AL(AX)隐含的商寄存器。 •AH(DX)隐含的余数寄存器。 •src不能为立即数。 • 对所有条件标志位均无定义。 •商溢出错时,产生除法出错中断。
•AL(AX)为隐含的乘数寄存器 •AX(DX:AX)为隐含的乘积寄存器 •src不能为立即数。 •除CF和OF,对条件标志位无定义
二、算术运算指令—乘法指令
•乘法指令对标志位影响: MUL指令: CF/OF = 00 11 00 11 乘积的高一半为零,无有效数据 否则 乘积的高一半是符号扩展,无有效数据 否则
CL,56H
dest
功能: (dest) (dest) - 1 例如: DEC DEC CX CL
•SUB、SBB 影响标志位 OF SF ZF AF CF •DEC 不影响CF DEC 3
二、算术运算指令—减法指令
7、CMP 指令 格式:CMP dest , src AX,BX
内存 AH,AL
3.2 指令系统
按功能分为:
•数据传送指令 •算术运算指令 •位处理指令(逻辑运算指令)
•串操作指令
•控制转移指令 •处理机控制指令
二、算术运算指令—加法指令
1、ADD 指令 格式:ADD dest , src AX,BX 功能: (dest) (dest)+(src)
内存 AH,AL
CX,DX
有符号数溢出
1000 0111 + 1111 0101 0111 1100 有:(-121)+(-11)=+124 OF=1 无:135+245=124 CF=1
0000 1001 + 0111 1100 1000 0101 有:(+9)+(+124)=-123 OF=1 无:9+124=133 CF=0
5、SBB 指令 格式:SBB dest , src AX,BX 功能:(dest) (dest) -(src) - CF
内存 AH,AL
CX,DX
SI,DI
CH,CL
DH,DL BH,BL
例如:
SBB SBB AX,BX CL,[SI]
BP,SP
立即数
DS,ES,SS
SBB
6、DEC 指令 格式:DEC
BP,SP
立即数
DS,ES,SS
ADC
ADC 3、INC 指令
CL,AL
DX,ES
格式:INC
dest
功能: (dest) (dest) + 1 例如:INC CX
•ADD、ADC影响标志位 OF SF ZF AF CF •INC 不影响CF INC 3
例:双字数据的加法
(DX)= 0002H (AX)= 0F365H (BX)= 0005H (CX)= 0E024H
DAA
XCHG AH,AL
;(AL)=40H+06H=46H (AF=1 CF=0)
; AX= (1834+2789=4623)BCD DEBUG演示
二、算术运算指令—减法调整指

10、DAS 指令 格 式 : 必 须紧 跟 在 SUB、SBB 之后。
•OF不确定,其余标志位随运算 结果而变。 •只能在SUB或SBB之后出现。
二、算术运算指令—加法调整指令
(1834)BCD+ (2789)BCD=4623D
运算: 1834H+2789H=40BDH MOV ADD DAA MOV MOV ADC AH,AL AL,18H AL,27H AL,34H AL,89H DAA 4623H (4623)BCD
;(AL)=34H ;(AL)=34+89=BDH ;(AL)=BDH+60H+06H=23H(AF=CF=1 ) ;(AH)=23H ;(AL)=18H ;(AL)=18+27+1=40H
相关文档
最新文档