微机原理 80x86指令系统
4.3 80x86 指令系统xin

【例2.7】跨段前缀示例。 • MOV AX,DS:[BP] • MOV CX,SS:[SI] • 该例中,DS:,SS:均为跨段前缀, 此时默认状态无效,操作数的物理地 址由段寄存器内容左移4位加EA形成。 上述2条指令的源操作数物理地址分 别为: • PA1 =(DS)左移4位+[BP] • PA2 =(SS)左移4位+[SI
4.3 808X6的CPU指令系统
4.3.1 80X86寻址方式 4.3.2 80X86指令系统
•80X86系列微处理器的指令集是在
8086/8088CPU的指令系统上发展起来的。 •8086/8088CPU的指令系统是基本指令集,
80286、 80386、 80486和Pentium的指令系统是
;(AX) (CX) ;(AL) (AL)+10
下列程序段执行后,(AX)=?,
(BX)=?
• MOV AX,1234H
•
•
MOV BX,5678H
ADD AX,BX
执行:1234H→AX 5678H→BX (AX)+(BX)→AX 执行后: (AX)=68ACH,(BX)=5678H
3、存储器寻址方式
物理地址 =(DS)*16 + 5000H
=30000H + 5000H =35000H
【例2.3】
• 设执行前: (AX)=0040H, (BX)=0030H, (DS)=2000H, (20036H)=0050H • 执行指令:ADD 6[BX],AX • 执行后:(AX)=?,(BX)=?, (DS)=?,(20036H)=?
• 指令中直接使用寄存器名,可以是8位或16
位或32通用寄存器。
第5章80X86指令系统及汇编语言基础.

▪ 当某条指令要求访问存储器和I/O时,EU就向BIU发出请 求,由BIU通过总线去完成数据的读和写。
Intel 8086/8088 CPU
▪ 2. 总线接口部件(BIU)
▪ BIU执行EU所要求的全部总线操作,按照EU的要求,完 成CPU与存储器或I/O设备之间的数据传送。
寻址,起变址作用。 ▪ CX称为计数器。一般作为循环或串操作等指令中的隐含
计数器。 ▪ DX称为数据寄存器。常用于字乘法和除法中存放双字数
据的高16位,或用来存放外设端口地址。
Intel 8086/8088 CPU
▪ 3. EU中的寄存器
▪ EU中含有8个16位的寄存器,按其用途可分成2组: ▪ 1)数据寄存器组(AX、BX、CX、DX) ▪ 数据寄存器既可作16位寄存器使用,又可按高8位和低8位
▪ 往堆栈中存入数据必须采用专门的指令进行,而且只能是 字操作。
Intel 8086/8088 CPU
▪ 4. 主存地址的形成
▪ 3)堆栈段 ▪ 堆栈段可用作程序的临时数据存储区。特别是在作子程序
调用、系统功能调用、中断处理等操作时,用来保留返回 主程序的地址或各寄存器的内容等。 ▪ 进行堆栈操作时,栈顶的物理地址为:
Intel 8086/8088 CPU
▪ 4. 主存地址的形成
▪ 1)代码段 ▪ 代码段是程序代码的存储区。当前代码段在主存中的起始
地址由代码段寄存器CS确定,指令指示器IP总是保存着 下一条将要取出指令相对于CS的偏移地址,如果要取出 这条指令执行,它的物理地址PA应为:
PA= (CS)左移4位 +(IP)
源地址。 ▪ DI,目的变址寄存器。在串操作指令中,常用DI表示操
第3章80x86指令系统.ppt

•
PUSH DATE[SI]
• ② POP(出栈)指令:将信息从堆栈中弹出恢复到原处。
• 指令格式:POP DST
• 例句: POP BX
•
POP ES
•
POP MEM[DI]
• ③ 堆栈操作的特点
• 先进后出或者后进先出
• 以字(16位)为单位或者双字(32位)操作,低字 节对准低地址且为偶地址,高字节对准高地址且为奇 地址。
1.直接寻址
• 例句: MOV AX,DS:[2000H] ; 将存储器中 逻辑地址为DS:2000H字单元的内容传送到AX。
• 本指令也可写成MOV AX,[2000H] ; 即该指令 默认的操作数段基址由DS段寄存器确定。由于操作 数通常皆放在数据段中,故段寄存器DS可以缺省, 而不必指明。
• 注意:使用直接寻址方式时要求: • 在常数位移量中,2000H必须加上方括号,此括号
• 是指令中参与操作且紧跟在操作码后面的常数。立即数只 能作为源操作数使用。 2.寄存器操作数 (1)指令中要操作的数据存放在8个通用寄存器或者4个段 寄存器中。 (2)对于AX、BX、CX、DX可以当作8位寄存器使用,存 放字节操作数或者作为16位寄存器使用,存放字操作数; (3)对于SI、DI、SP、BP,则只能存放字操作数;
3 .2 .3 寄存器寻址
• 这是最常用也是最简明的一种寻址方式。指令所需 的操作数就存放在指令规定的某个寄存器内。
• 例句:MOV BX,CX ;将CX寄存器中的内容复 制到BX中。
•
MOV DS,AX ;将AX中的内容复制到
DS段寄存器中。
3 .2 .4 存储器寻址
• 直接寻址、寄存器间接寻址、寄存器相对寻址、基 址变址寻址、相对基址变址寻址,共有5种方式。
微机原理第4章练习题及答案

微机原理第4章练习题及答案第4章 80x86指令系统一、自测练习题㈠选择题 1.MOV AX,[BX+SI]的源操作数的物理地址是( )。
A.(DS)×16+(BX)+(SI) B. (ES)×16+(BX)+(SI) C.(SS)×10H+(BX)+(SI) D.(CS)×10H+(BX)+(SI)2.MOV AX,[BP+Sl]的源操作数的物理地址是( )。
A.(DS)×10H+(BP)+(SI) A. (ES)×16+(BP)+(SI) C.(SS)×16+(BP)+(SI) D.(CS)×10H+(BP)+(SI) 3.MOV AX,ES:[BX+SI]的源操作数的物理地址是( )。
A.(DS)×16+(BX)+SI) B.(ES)×10H+(BX)+(SI) C.(SS)×10H+(BX)+SI) D.(CS)×16+(BX)+(SI)4.JMP WORD PTR[DI]是( )。
A.段内间接转移B.段间间接转移C.段内直接转移D.段间直接转移5.JMP FAR PTR BlOCK(BLOCK是符号地址)是( )。
A.段内间接转移B.段间间接转移C..段内直接转移D.段间直接转移6.INC指令不影响( )标志。
A.OF B.CF C.SF D.ZF 7.条件转移指令JNE的测试条件是( )。
A.ZF=1 B.CF=0 C.ZF=0 D.CF=1 8.下列指令中,有语法错误的是( )。
A.MOV [SI],[DI] B.IN AL,DX C.JMP WORD PTR[BX+8] D.PUSH WORD PTR 20[BX+S1] 9.假定(SS)=2000H,(SP)=0100H,(AX)=2107H,执行指令PUSH AX后,存放数据21H的物理地址是。
A.20102H B.20101H C.200FEH D.200FFH 10.对于下列程序段:AGAIN:MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 也可用指令完成同样的功能。
80X86 Instructions - Advanced Microcomputer Systems80x86指令-先进的微机系统

; Super simple test program ORG $B600 SEGMENT code TLOOP:INCA INCB JMP TLOOP
Cont..
Looking ahead at the programming procedure:
• Here is the machine code that results from the assembly-lang. program given above Address
$B600 $B601
o The machine code is transferred to the HC11 through the coordinated efforts of DevHC11.exe (running on your PC) and the Buffalo monitor program (running on the HC11)
Cont.
Programmer’s Model
• SP: 16-bit stack pointer
Stack may be anywhere in the 64 Kbyte address space The stack grows downward in memory (i.e., a push decrements SP)
Contents
01001100 01011100
$B602
$B603 $B604
01111110
第三章 汇编语言80X86的指令系统和寻址方式

第3章 80x86指令系统和寻址方式
《汇编语言》
对同一类型指令,执行速度: 寄存器操作数 立即数操作数 存储器操作数
快
慢
例
mov mov mov
AL , BL AL , 0 AL , [ BX ]
快
慢
17
第3章 80x86指令系统和寻址方式
《汇编语言》
3.2
80x86寻址方式
3.2.1 寻址、寻址方式的概念
18
第3章 80x86指令系统和寻址方式
《汇编语言》
3.2.2 80X86的指令格式
指令助记符 [ 操作数1 [ , 操作数2 [ , 操作数3 ] ] ] [;注释]
指令助记符体现该指令的功能,它对应一条二进 制编码的机器指令。 指令的操作数个数由该指令确定,可以没有操作 数,也可以有一个、二个或三个操作数。
指令系统的基本概念
指令系统
计算机的指令系统就是指该计算机能够执行
的全部指令的集合。 每种计算机都有它支持的指
令集合。 16位8086指令系统是整个Intel 80x86 系列微处 理器指令系统的基础。
2
第3章 80x86指令系统和寻址方式
《汇编语言》
3.1.2
指令格式
指令由操作码和操作数两部分组成。
双操作数: 指令中给出两个操作数。
7
第3章 80x86指令系统和寻址方式
《汇编语言》
① 无操作数: 指令只有一个操作码,没有操作数。
有两种可能: ▲ 有些操作不需要操作数。 如 HLT,NOP等处理机控制指令。 ▲ 操作数隐含在指令中。 如 STC , CLC等处理机控制命令。
AAA , DAA等调整指令。
1) 立即寻址方式
微型计算机原理-第4章(5)微机原理与接口技术(第三版)(王忠民)

▪DEC(Decrement) 减1
格式:DEC DST 操作: DST <= DST -1
第四章 80x86 指令系统—算术运算指令
▪NEG(Negate)求补
格式:NEG DST 操作: DST <= 0-DST
利用NEG指令可以得到负数的绝对值
60H
被
ACH
加
74H
数
3BH
…
DATA2 C1H
36H
加
9EH
数
D5H
20H
…
图4.19 例4.3中被加数和加数在内存中的存放情况
第四章 80x86 指令系统—算术运算指令
程序如下: LOOPER:MOV
MOV CX,5
;设置循环次数
MOV SI,0
;置位移量初值
CLC
AL,DATA2[SI]
;取一个
第四章 80x86 指令系统—算术运算指令
说明: 1、DST:REG/MEM,SRC:8/16data/REG/MEM。 2、DST、SRC不能同时为MEM。 3、加法指令影响标志寄存器的状态标志。 4、INC指令不影响CF标志。
第四章 80x86 指令系统—算术运算指令 例 4.3 计 算 两 个 多 字 节 十 六 进 制 数 之 和 : 3B74AC60F8H+20D59E36C1H=?
第四章 80x86 指令系统—算术运算指令
(3)乘法指令
▪MUL(Unsigned Multiple) 无符号数乘法
格式:MUL SRC 操作:AX<=AL*SRC(字节)/ DX,AX<=AX*SRC(字)
第3章8086指令系统(上)

【例3-6】
已知:(DS)=3000H,(BX)=1000H, COUNT=2000H,(33000H)=13H, (33001H)=24H,执行指令: MOV AX, COUNT[BX] 操作数的物理地址为: (DS)×16+(BX)+COUNT =3000H×16+1000H+2000H =33000H 指令执行后,(AX)=2413H。
若有效地址用SI、DI和BX等之一来指定,则 其缺省的段寄存器为DS; 若有效地址用BP来指定,则其缺省的段寄存 器为SS(即:堆栈段)。
该寻址方式物理地址的计算方法如下: BX 物理地址PA=16×DS + SI DI 或 物理地址PA=16×SS+ BP
33
【例3.4】假设有指令:MOV BX, [DI],在执行时, (DS)=1000H,(DI)=2345H,存储单元12345H 的内容是4354H。问执行指令后,BX的值是什么?
8
我们把一条指令中所包含的二进制代码 的位数称为指令字长,它通常是机器字 长的一倍、两倍、多倍或半倍。 另外,即使对于同一条指令,由于其操 作数寻址方式的不同,其长度也是变化 的,这样的指令被称为不定长指令。 反之,如果某些指令长度始终不变,我 们则称其为定长指令。
9
操作码:由CPU设计人员定义。每一种操作 唯一对应一个操作码。说明计算机要执行哪 种操作,如传送、运算、移位、跳转等操作 例:加法操作助记符ADD; 数据传送操作助记符MOV; 比较操作助记符CMP 操作数:可由编程人员采用不同方式给出。
源操作数:后者(BL) 目的操作数:前者(AL)
11
操作数
2、操作数存放地点,可以有以下几种:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.1.3 8086/8088指令系统8086/8088CPU指令系统包含有133条基本指令。
按其功能可以分为6类,它们是:⑴数据传送类指令⑵算术运算类指令⑶逻辑运算与位移类指令⑷字符串指令⑸控制转移类指令⑹处理器控制类指令。
一、数据传送类指令数据传送类指令时将数据、地址或立即数传送到寄存器或存储器单元中。
可完成寄存器与寄存器之间、寄存器与存储器之间、寄存器与I/O端口之间的字节或字传送。
它又可分为通用数据传送指令、输入/输出指令、目标地址传送指令和标志传送指令四组。
特点:除SAHF和POPF不影响标志寄存器内容。
(一)通用数据传送指令1. 最基本的传送指令指令格式及操作:MOV dst,src;(dst)←(src)将源操作数s指定的内容送到d目的操作数dst是目的操作数,它可以是存储器、通用寄存器(不能为IP)和段寄存器(不能为CS),不能为立即数。
Src是源操作数,它可以是存储器、通用寄存器、段寄存器和立即数。
MOVE指令需要注意的问题:①MOVE指令可传送8位数据,也可传送16位数据。
②MOVE指令中的两操作数s和d,必用1个寄存器,不允许同时为存储单元。
③不能用CS和IP做目的操作数。
④不允许段寄存器之间直接数据传送。
⑤不允许立即数做目的操作数。
⑥不能向段寄存器送立即数。
2.堆栈操作指令堆栈操作指令是用来完成压入和弹出堆栈操作的。
8086/8088指令系统中提供了完成这两种操作的相应指令。
⑴压入堆栈指令指令格式及操作:PUSH src;(SP) ←(SP)-2,((SP)+1:(SP)) ←(src) src源操作数可以是寄存器操作数和存储器操作数,且必须是16位的操作数,但不能是立即数。
⑵弹出堆栈指令指令格式及操作:POP dst; (dst) ←((SP)+1:(SP)),(SP) ←(SP)+2dst目的操作数可以是寄存器操作数和存储器操作数,且必须是16位的操作数,但不能是立即数。
特点:①s和d可以是16位寄存器或存储器两相邻单元;②堆栈按字操作;③每执行一条入栈指令,堆栈地址指针SP减2,入栈的数据位于栈顶;④高位字节先入栈,放在高位地址单元,低位字节后入栈,放在较低地址单元;先进先出原则;⑤执行弹出指令时,过程相反,栈顶指针的值加2;⑥CS段寄存器的值可以入栈,但不能反过来弹出一个字到CS3.交换指令将源操作数和目的操作数(字或字节)相互对应交换位置。
指令格式及操作:XCHG opr1, opr2;(opr1) ←→(opr2)4.字节转换指令通过查表来完成代码转换,用于实现字节翻译的功能。
指令格式及操作:XLAT src_table;(AL) ←((BX)+(AL))XLAT指令是用来将一种字节代码转换成另一种字节代码。
执行的结果放在AL中。
使用指令前:BX寄存器的内容指向表格首址;AL中存放待查的码,即某一项与表首地址的距离。
XLAT指令还可以有以下几种表示形式:XLAT;不写操作数XLATB;有B就不允许再写操作数。
XLAT ES:src_table;重设段寄存器为ESHex_table码,则可用以下几条指令实现:Hex_table+F46H6100FH(二) 输入/输出指令只能用累加器作为执行I/0数据传送的机构。
输入输出指令可以分为两大类:一类是直接端口地址的输入/输出指令:一类是通过DX寄存器间接端口地址的输入/输出指令。
⑴输入指令①直接寻址的输入指令寻址范围0-255(少于8位地址)指令格式及操作:IN acc, port;(acc) ←(port)②间接寻址的输入指令寻址范围0-65535(少于或超过8位地址)指令格式及操作:IN acc, DX;(acc) ←((DX))⑵输出指令①直接寻址的输出指令指令格式及操作:OUT port, acc; (port) ←(acc)②间接寻址的输出指令指令格式及操作:OUT DX, acc; ((DX)) ←(acc)(三)目标地址传送指令1. 取有效地址指令指令格式:LEA reg16, mem此指令的功能是将存放源操作数的16位偏移地址(即有效地址EA)送到一个16位的通用寄存器中。
即源操作数必须是一个存储器操作数,目的操作数必须是一个通用寄存器操作数。
例如:LEA BX, bufferLEA AX, [BP][DI]LEA DX, beta[BX][SI]注意LEA指令和MOV指令的异同。
不同:LEA BX, buffer;将存储器buffer的偏移地址送到BXMOV BX, buffer;将存储器buffer的内容传送到BX相同:LEA BX, bufferMOV BX, OFFSET buffer以上两条指令都是将存储器buffer的偏移地址送到BX。
其中OFFSET buffer表示存储器偏移地址。
LAHF和SAHF指令操作示意图3.标志压入堆栈指令将16位标志寄存器F的内容入栈保护。
指令格式及操作:PUSHF;(SP) ←(SP)-2,;((SP)+1;(SP)) ←(FLAG)4.标志弹出堆栈指令将当前栈顶和次栈顶中的数据弹出,送回标志寄存器当中。
指令格式及操作:POPF; (FLAG) ←((SP)+1;(SP)),;(SP) ←(SP)+2经常成对出现,用在子程序和中断处理程序的首尾,用来保护和恢复主程序涉及的标志寄存器的内容。
必要时可修改标志寄存器的内容。
二、算术运算指令8086/8088有丰富的算术运算指令,而且可以处理4种类型的数据,无符号/有符号、8/16位二进制数、无符号压缩型/非压缩型十进制。
根据运算结果影响标志位,有时要利用某些标志位才能得到正确的结果。
分成5小类:加法减法乘法除法十进制调整指令1.加法指令结果。
①功能:源操作数和目的操作数相加,结果送到目的操作数。
源操作数:通用寄存器、存储器、立即数目的操作数:通用寄存器、存储器提示:目的操作数不能为立即数,源操作数和目的操作数不能同时为存储器。
ADD dst, src(dst) ←(dst) +(src)②功能:源操作数和目的操作数相加外,再加上进位标志CF ,结果送到目的操作数。
CF 将从新根据结果置成新的状态,ADC 指令一般用于16位以上的多字节数相加。
ADC dst, src (dst) ←(dst) +(src)+1③功能:将目的操作数当作无符号数,加1后结果送到目的操作数。
目的操作数:通用寄存器、存储器,但不允许为立即数。
间接寻址的存储单元加1时,数据长度需用伪指令说明。
循环程序中,常用该指令对地址指针和循环计数值进行修改。
INC d d ←d +1例 4.3 计算两个多字节十六进制数之和:3B74AC60F8H+20D59E36C1H=?式中被加数和加数均有5个字节,可以编一个循环程序实现以上运算。
假设已将被加数和加数分别存入从DATA1和DATA2开始的两个内存区,且均为低位字节在前,高位字节在后,如图4.15所示。
要求相加所得结果仍存回以DATA1为首址的内存区。
程序流程图如图4.16所示。
程序如下:MOV CX,5;设置循环次数MOV SI,0 ;置位移量初值CLC ;清进位CFLOOPER:MOV AL,DATA2[SI];取一个加数ADC DATA1[SI],AL;和一个被加数相加INC SI ;位移量加1DEC CX ;循环次数减1JNZ LOOPER ;加完否,若没完,转LOOPER,继续相加HLT ;程序暂停开始如果两个对应的BCD数相加若得到的结果大于9或向高位有进位就需要使用BCD码的调整指令。
AAA指令(非压缩型BCD码加法调整指令)的操作为:如果(AL) ∧0FH>9 或(AF)=1(低4位>9或有进位)则(AL) ←(AL)+06H(AH) ←(AH)+1(AF) ←1(CF) ←(AF)(AL) ←((AL) ∧0FH)否则(AL) ←((AL) ∧0FH)DAA指令(压缩型BCD码加法调整指令)的操作为:如果(AL) ∧0FH>9, (AF)=1则(AL) ←(AL)+06H(AF) ←1如果(AL) > 9FH 或(CF)=1(高四位>9或有进位)则(AL) ←(AL)+60H(CF) ←1[例]要求计算两个至今指数之和,7+8=?。
可用以下指令实现:MOV AX, 0007H;(AL)=07H,(AH)=00HMOV BL, 08H;(BL)=08HADD AL, BL;(AL)=0FHAAA;(AL)=05H,(AH)=01H;(CF)=(AF)=1MOV AX, 0007H;(AL)=07H,(AH)=00HMOV BL, 08H;(BL)=08HADD AL, BL;(AL)=0FHDAA;(AL)=15H,(AH)=00H;(CF)=0,(AF)=12.DASBCD调整指令○×○○○○①功能:目的操作数减去源操作数,结果送到目的操作数。
源操作数:通用寄存器、存储器、立即数目的操作数:通用寄存器、存储器提示:目的操作数不能为立即数,源操作数和目的操作数不能同时为存储器。
不允许进行段寄存器减法。
SUB dst, src (dst) ←(dst) -(src)②功能:目的操作数减去源操作数外,再减去进位标志CF ,结果送到目的操作数。
CF 将从新根据结果置成新的状态,SBB 指令一般用于16位以上的多字节数相加。
SBB dst, src (dst) ←(dst) -(src)-1③功能:将目的操作数减1后结果送到目的操作数。
目的操作数:通用寄存器、存储器,但不允许为立即数。
间接寻址的存储单元加1时,数据长度需用伪指令说明。
循环程序中,常用该指令对地址指针和循环计数值进行修改。
DEC d d ←d -1④功能:将目的操作数取负后结果送到目的操作数。
目的操作数:通用寄存器、存储器,但不允许为立即数。
NEG d d ←0-d⑤功能:目的操作数减去源操作数,不送回结果,只根据运算结果置标志位。
源操作数:通用寄存器、存储器、立即数目的操作数:通用寄存器、存储器提示:目的操作数不能为立即数,源操作数和目的操作数不能同时为存储器。
不允许进行段寄存器比较。
CMP d, s d-s 只置标志位例4.4 内存数据段存放了200个带符号数,首地址为TAB1,要求将各数取绝对值后存入以TAB2为首址的内存区。
由于200个带符号数中可能既有正数,又有负数,因此先要判断正负。
如为正数,可以原封不动地传送到另一内存区;如为负数,则需先求补即可得到负数的绝对值,然后再传送。
程序如下:LEA SI,TAB1;(SI)←源地址指针LEA DI,TAB2 ;(DI)←目标地址指针MOV CX,200 ;(CX)←循环次数CHECK:MOV AL,[SI] ;取一个带符号数到ALOR AL,AL ;AL内容不变,只影响标志位JNS NEXT ;若(SF)=0,则转NEXTNEG AL ;否则求补NEXT:MOV [DI],AL ;传送到目标地址INC SI ;源地址加1INC DI ;目标地址加1DEC CX ;循环次数减1JNZ CHECK ;如不等于零,则转CHECKHLT ;停止AAS指令的操作为:如果(AL) ∧0FH>9 或(AF)=1则(AL) ←(AL)-06H(AH) ←(AH)-1(AF) ←1(CF) ←(AF)(AL) ←((AL) ∧0FH)否则(AL) ←((AL) ∧0FH) DAS指令的操作为:如果(AL) ∧0FH>9, (AF)=1则(AL) ←(AL)-06H(AF) ←1如果(AL) > 9FH 或(CF)=1则(AL) ←(AL)-60H(CF) ←13.乘法指令①功能:完成两个无符号的二进制数相乘。