文档库 最新最全的文档下载
当前位置:文档库 › 8086(8088)指令手册

8086(8088)指令手册

8086(8088)指令手册
8086(8088)指令手册

8086/8088指令手册

郑治强整理

2007-4-3

目录

8086/8088指令分类

一、数据传送类指令 (3)

1. 通用数据传送指令 (3)

2.目标地址传送指令 (4)

3.标志位传送指令 (5)

4.I/O数据传送指令 (5)

二、算术运算类指令

1. 加法指令 (6)

2.减法指令 (7)

3.乘法指令 (8)

4.除法指令 (9)

5.十进制调整指令 (10)

三、逻辑运算和移位循环类指令 (12)

四、操作类指令 (14)

五、程序控制指令 (15)

六、处理器控制类指令 (16)

名词表

表一、微机系统 (17)

表二、8086/8088 CPU的内部结构 (18)

表三、数据寄存器的隐含使用 (19)

表四、标志寄存器 (20)

8086/8088指令分类

8086/8088的指令按功能可分为6类:数据传送、算术运算、逻辑运算、串操作、程序控制和CPU控制。

(一)数据传送类指令

数据传送类指令可完成寄存器与寄存器之间、寄存器与存储器之间以及寄存器与I/O端口之间的字节或字传送,它们所具有的共同特点是不影响标志寄存器的内容。这类指令又可分成4种类型。

(二)算术运算类指令

算术运算类指令能对无符号或有符号的8/16位二进制数以及无符号的压缩型/非压缩型(又称为装配型/拆开型或组合型/未组合型)十进制数进行运算,有加、减、乘、除以及十进制调整5类指令。

(三)逻辑运算和移位循环类指令。

附表:

(四)串操作类指令

串操作类指令是惟一地在存储器内的源与目标之间进行操作的指令。

(五)程序控制指令

一般情况下,指令是按顺序逐条执行的。但在实际运行中,也经常会根据微处理器的状态和工作要求等不同情况而随时改变程序的流向。程序控制指令就是用来控制程序流向的一类指令。本节介绍无条件转移、条件转移、循环控制和中断共4种类型的程序控制指令。

(六)处理器控制类指令

处理器控制指令只完成对CPU的简单控制功能。

名词表表一、微机系统

表二、8086/8088 CPU的内部结构

表三、数据寄存器的隐含使用

表四、标志寄存器

8086/8088的16位标志寄存器F只用了其中的9位作标志位,即6个状态标志位,3个控制标志位。低八位的5个标志与8080/8085的标志相同。

x86汇编指令集

x86汇编指令集 数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. MOVSX reg16,r/m8 ; o16 0F BE /r [386] MOVSX reg32,r/m8 ; o32 0F BE /r [386] MOVSX reg32,r/m16 ; o32 0F BF /r [386] MOVZX reg16,r/m8 ; o16 0F B6 /r [386] MOVZX reg32,r/m8 ; o32 0F B6 /r [386] MOVZX reg32,r/m16 ; o32 0F B7 /r [386] PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.

PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里) XLAT 字节查表转换. ── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即 0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS.

微机原理第6章习题参考答案

第6章习题参考答案 1.CPU与外部设备通信为什么要使用接口? 答: CPU要与外部设备直接通信会存在以下两个方面的问题:首先是速度问题,CPU的运行速度要比外设的处理速度高得多,通常仅使用简单的一条输入/输出指令是无法完成CPU与外设之间的信息交换的;其次,外设的数据和控制线也不可能与CPU直接相连,如一台打印机不能将其数据线与CPU的管脚相连,键盘或者其他外设也是如此,同时外设的数据格式千差万别,也不可能直接与CPU 连接。所以,要完成CPU与外部各通信设备的信息交换,就需要接口电路以解决以上问题。 2. I/O接口有什么用途? 答: 主要由以下几个方面的用途: a完成地址译码或设备选择,使CPU能与某一指定的外部设备通信。 b状态信息的应答,以协调数据传输之前的准备工作。 c进行中断管理,提供中断信号。 d进行数据格式转换,如正负逻辑转换、串行与并行数据转换。 e进行电平转换,如TTL电平与MOS电平间的转换。 f协调速度,如采用锁存、缓冲、驱动等。 h时序控制,提供实时时钟信号。 3.I/O端口有哪两种寻址方式?各有何优缺点? 答: I/O端口的寻址方式有存储器映像I/O和I/O映像I/O两种寻址方式。存储器映像I/O 方式是将系统中存储单元和I/O端口的地址统一编址,这样一个I/O端口

地址就是一个存储单元地址,在硬件上没有区别,对I/O端口的访问与存储器的访问相同。其缺点是占用了储存器的地址空间,同时由于存储器地址和I/O 端口在指令形式上没有区别,增加了程序设计的难度。其优点是不需要专门为I/O端口设计电路,可与存储器地址访问硬件混合设计。另一个优点是,由于I/O端口和存储器地址是相同的形式,就可以直接使用与存储器相同的指令,这将会丰富对I/O端口的操作指令。 与存储器映像I/O相反,I/O映像I/O就必须为I/O端口设计专门的硬件电路,其端口地址也是独立于存储器,也有专门的输入/输出指令等其优缺点与存储器映像I/O正好相反。 4.在8086微机系统中有个外设,使用存储器映像的I/O寻址方式该外设地址为01000H。试画出其译码器的连接电路,使其译码器输出满足上述地址要求,译码器使用74LS138芯片。 答: 见图6-1

8086 8088指令系统

8086/8088指令系统 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为: MOV DST,SRC 执行的操作:(DST)<-(SRC) .PUSH进栈指令 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) .POP出栈指令 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 .XCHG 交换指令 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) 2.累加器专用传送指令 IN(Input) 输入 OUT(Output) 输出 XLA T(Translate) 换码 这组指令只限于使用累加器AX或AL传送信息. .IN 输入指令 长格式为: IN AL,PORT(字节) IN AX,PORT(字) 执行的操作: (AL)<-(PORT)(字节) (AX)<-(PORT+1,PORT)(字) 短格式为: IN AL,DX(字节) IN AX,DX(字) 执行的操作: AL<-((DX))(字节) AX<-((DX)+1,DX)(字) .OUT 输出指令 长格式为: OUT PORT,AL(字节) OUT PORT,AX(字) 执行的操作: (PORT)<-(AL)(字节) (PORT+1,PORT)<-(AX)(字) 短格式为: OUT DX,AL(字节) OUT DX,AX(字)

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

8086与8088的区别

这两种CPU的主要区别,归纳起来有以下几方面: 1.外部数据总线位数的差别:8086CPU的外部数据总线有16位,在一个总线周期内可输入/输出一个字(16位数据),使系统处理数据和对中断响应的速度得以加快;而8088 CPU的外部数据总线为8位,在一个总线周期内只能输入/输出一个字节(8位数据)。也正因为如此,8088被称为准16位处理器。 2.指令队列容量的差别:8086CPU的指令队列可容纳6个字节,且在每个总线周期中从存储器中取出2个字节的指令代码填入指令队列,这可提高取指操作和其它操作的并行率,从而提高系统工作速度;而8088CPU的指令队列只能容纳4个字节,且在每个总线周期中只能取一个字节的指令代码,从而增长了总线取指令的时间,在一定条件下可能影响取指令操作和其它操作的并行率。3.引脚特性的差别:两种CPU的引脚功能是相同的,但有以下几点不同:(1) AD15~AD0的定义不同:在8086中都定义为地址/数据复用总线;而在8088中,由于只需用8条数据总线,因此,对应予8086的AD15~AD8这8条引脚,只作地址线使用。 (2)34号引脚的定义不同:在8086中定义为BHE信号;而在8088中定义为SS0,它与DT/R,IO/M一起用作最小方式下的周期状态信号。 (3)28号引脚的相位不同:在8086中为M/IO;而在8088中被倒相,改为IO/M,以便与8080/8085系统的总线结构兼容。 复用引脚 8086:AD15~AD0,分时用作地址和数据总线; 8088:AD7~AD0,分时用作地址和数据总线; 8086/8088:A19~A16/S6~S3,分时用作地址和状态总线。 8086的最小/最大工作方式 通过CPU的第33条引脚MN/ 来控制。 1.最小工作模式(MN/MX=1):把8086CPU的33引脚接+5V时,系统处于 最小工作模式。最小模式系统适用于单微处理器组成的小系统,系统中通常只有一个微处理器,所有的总线控制信号都直接由8086CPU产生,系统中的总线控制逻辑电路被减到最少。 2.最大工作模式(MN/MX=0):当把8086的33引脚接地时,系统处于最大工 作模式。此时,系统中存在两个或两个以上的微处理器,其中有一个主处理器8086,其他处理器称为协处理器。 8086/8088的存储器系统 1.有关存储器的基本概念 (1)字节与字 字节(Byte)是指一组相邻的8位二进制数码 字(Word)是指两个相邻的字节(16位二进制数码)。

8086汇编指令手册

8086汇编指令手册 一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里) XLAT 字节查表转换. —— BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即 0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL ) 2. 输入输出端口传送指令. IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器) 输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时, 其范围是0-65535. 3. 目的地址传送指令. LEA 装入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI. 4. 标志传送指令. LAHF 标志寄存器传送,把标志装入AH. SAHF 标志寄存器传送,把AH内容装入标志寄存器.

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

8086汇编指令大全.

标志寄存器:9个有效位,分 6个状态寄存器和 3个控制寄存器 CF 当执行一个加法(减法使最高位产生进位(借位时 CF=1 否则 CF=0 PF 指令执行的结果低 8位有偶数个一时, CF=1 否则 CF=0 AF 当执行一个加法(减法使运算结果低 4位向高 4位有进位(借位时 AF=1 否则 AF+0 ZF 当前运算结果为零, ZF=1 否则 ZF=0 SF 符号标志位 OF 溢出标志位 DF 方向标志位 IF 中断允许位 IF=1时响应外部中断

TF 跟踪标志位 操作数:[目的操作数(OPD ,源操作数(OPS ] ;立即操作数,寄存器操作数,存储器操作数。寻址方式: 1 寄存器寻址例:INC AX ; MOV AX , BX 2 寄存器间接寻址 (寄存器只能是 BX , DI , SI , BP ; [PA=(BX 、 DI 、 SI +DS》 4 或 BP+SS》4] 3 寄存器相对寻址 4 基址变址寻址 5 相对基址变址寻址 6 直接寻址 7 立即数寻址 i. 立即数寻址立即数寻址不能用在单操作数指令中 ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段 指令系统: 1 数据传送指令 mov 注意: 不允许在两个存储单元之间直接传送数据

不允许在两个段寄存器之间传送数据 不允许用立即数直接为段寄存器赋值 不影响标志位 不允许寄存器或存储单元到除 CS 外的段寄存器 2 入栈(出栈指令 PUSH (POP 注意: PUSH 操作数不能是“立即数” POP 操作数不能是段寄存器 CS 不影响标志位 先进后出 单操作符 3 交换指令 XCHG 注意:

微机原理第2章习题与答案

习题 一、选择题 1.8086/8088CPU内部有一个始终指示下条指令偏移地址的部件是_______。 A. SP B.CS C.IP D.BP 答案:C 2. 指令队列的作用是_________。 A.暂存操作数地址 B.暂存操作数 C.暂存指令地址 D.暂存预取指令 答案:D 3. 8086/8088下列部件中与地址形成无关的是______。 A. ALU B. 通用寄存器 C. 指针寄存器 D. 段寄存器 答案:A 4.对于8086,下列说法错误的是_______。 A.段寄存器位于BIU中 B.20位的物理地址是在EU部件中形成的 C.复位后CS的初值为FFFFH D.指令队列的长度为6个字节 答案:B 5.8086/8088中ES、DI分别属于_______。 A. EU、BIU B. EU、EU C. BIU、BIU D. BIU、EU 答案:D 6.BIU与EU工作方式的正确说法是_______。 A. 并行但不同步工作 B.同步工作 C. 各自独立工作 D. 指令队列满时异步工作,空时同步工作 答案:A 7.在执行转移、调用和返回指令时,指令队列中原有的内容_______。 A.自动清除 B.用软件清除 C.不改变 D.自动清除或用软件清除 答案:A 8.下列说法中,正确的一条是______ A. 8086/8088标志寄存器共有16位,每一位都有含义。 B. 8088/8086的数据总线都是16位。 C. 8086/8088的逻辑段不允许段的重叠和交叉 D. 8086/8088的逻辑段空间最大为64KB,实际应用中可能小于64KB。 答案:D 9.8086/8088工作于最大模式,是因为_____。 A.可以扩展存储容量 B.可以扩大I/O空间 C.可以构成多处理器系统 D.可以提高CPU主频 答案:C 10.8088/8086最大模式比最小模式在结构上至少应增加_____。 A.中断优先级控制器 B.总线控制器 C.数据驱动器 D.地址锁存器 答案:B 11.组成最大模式下的最小系统,除CPU、时钟电路,ROM,RAM及I/O接口外,至少需增加的芯片类型为______。

8086指令总结

8086指令系统总结 学习微处理器及其程序设计,必须掌握微处理器的指令系统。本章以8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。 本章的重点难点内容是:8086 的指令格式及寻址方式,8086 的常用指令和8086 指令前缀的使用。 下面我们分别进行总结: 一.8086寻址方式 (1)操作数是数字,指令中立即写出数字------------立即数寻址 MOV AX,1234H 解释此句意义 (2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址 MOV AX,BX (3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址 MOV AX,[1234H] MOV AX,ES:[1234H] (4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX] MOV AX,ES:[SI] MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI] 二.8086指令系统 1.数据传送指令 (一)通用传送指令 (1)MOV指令 指令格式:MOV 目,源 功能:将源操作数传送给目标操作数。 (2)堆栈操作指令 进栈指令:PUSH 格式:PUSH 源 功能:将源操作数压入堆栈。 例:用堆栈指令完成上例的功能。 MOV AX,3000H MOV DS,AX ;段寄存器填充 MOV SI,0100H ;基本指令执 MOV DI,2000H ;行前的初值 MOV CX,50 NT: PUSH [SI] ;程序从这 POP [DI] ;开始设计 INC SI INC SI INC DI INC DI LOOP NT MOV AH,4CH INT 21H

机组实验二报告—找出8086 8088指令系统所有指令的操作码的编码

实验二找出8086/8088指令系统所有指令的操作码的编码 实验目的: 本实验旨在利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作码编码对应的指令功能,得到8086/8088操作码从00~FF所对应的汇编指令名字。 附:本次实验用到的e和u功能的解释: debug的e命令、u命令的作用及用法:e 100...表示从100号单元开 始编写内容;u 100 105表示将100~105号单元共6个字节反汇编出 来、所谓“反汇编”就是把机器码还原成汇编语句。 每次先用e命令改写100号单元(从00到FF,第一次是00,第二次是 01,第三次是02,第四次是03,……,最后一次是FF),再用u命令反汇编出指令,再记录下来。 第一回合 实验步骤: 一、启动debug程序: 鼠标单击“开始->程序->附件->命令提示符”,打开DOS(其实虚拟DOS)窗口,出现命令提示符 Microsoft Windows XP [版本5.1.2600] 版权所有1985-2001 Microsoft Corp. 输入debug并按回车键,出现一个debug程序的提示符,一个短杆如下图所示: 二、用试探法 -e 100 00 00 00 00 00 00 -u 100 105 1375:0100 0000 ADD [BX+SI],AL 1375:0102 0000 ADD [BX+SI],AL 1375:0104 0000 ADD [BX+SI],AL 结论:操作码字节前六位为000000(二进制)看来是一条ADD指令,而且只占两个字节。 记下来: 指令码汇编指令 ---------------------------------------------------------------------

8086汇编指令表

8086汇编指令表

MOV MOV DST,SRC DST≠CS、IP和imm 不影响 标志位 MOV [9AF0H],AL MOVS MOVS mem, mem MOVSB/W 不影响 标志位 字符串传送ES:DI←(DS:SI) SI←(SI)(+/-)1 DI←(DI)(+/-)1 MOVS ES:BYTE PTR[DI], DS:[SI] MUL MUL r/m8 设置CF OF S Z A P无法预 测 无符号乘法:AX←AL*r/m8 MUL CL MUL r/m16 无符号乘法:DX:AX←AX*r/m16 MUL CX NEG NEG reg/mem CF OF SF ZF AF PF 求补:取反加一 0-(DST) NEG CL NOP NOP 不影响空操作NOP NOT NOT reg/mem 不影响按位取反NOT CL OR 同AND PF SF ZF CF=OF=0 逻辑或 OR AL,0FH (不变\置1) OUT OUT imm8,AL/AX/EAX 不影响 标志位 将AL/AX/EAX输出到imm8指定端 口 OUT 0FFH,AL OUT DX,AL/AX/EAX 将AL/AX/EAX输出到DX指定的端口OUT DX,AL POP POP DST DST!=imm & CS 不影响 标志位 DST←((SP)+1,(SP)) SP←(SP)+2 POP WORD Ptr [87EAH] POPF POPF 设置所有标志位从堆栈中弹出16位标志寄存器POPF PUSH PUSH SRC 8086 SRC!=imm 不影响 标志位 SP<--(SP)-2 ((SP)+1,(SP))←(SRC) [SP循 环] PUSH WORD Ptr [87EAH] PUSHF PUSHF 不影响压栈16位标志寄存器PUSHF RCL 同SHL 同ROL 带进位循环左移 RCL AL,1 RCR 同SHL 同ROL 带进位循环右移 RCR AL,1 ROL 同SHL 移一位后符号位 改变则OF=1 循环左移: ROL AL,1 ROR 同SHL 同ROL 循环右移: ROR AL,1 REP REP String operation 不影响 标志位 CX=0则终止---CX←(CX)-1 ---串操作---SI/DI增量 REPZ REPE REPE String operation AF CF OF PF SF ZF CX=0||ZF=0则终止 ---CX←(CX)-1 ---串比较---SI/DI增量 REPNZ REPNE REPNE String operation AF CF OF PF SF ZF CX=0||ZF=1则终止--- CX←(CX)-1 ---串比较---SI/DI增量 RET RET 恢复压栈标志位 POP IP[CS] 子过程返回(Near)/(Far) RET RET imm16 子过程返回后SP←(SP)+imm16 RET 08

微机原理习题-第3章

3.18086CPU有多少根数据线和地址线?它能寻址多少内存地址单元和I/O端口?8088又有多少根数据线 和地址线?为什么要设计8088CPU? 3.28086CPU内部按功能可分为哪两大部分?它们各自的主要功能是什么?8086与8088CPU中的指令队列 缓冲器有何区别?在微处理器中设置指令队列缓冲器有什么作用? 3.38086CPU内部的总线接口单元(BIU)由哪些功能部件组成?它们的基本操作原理是什么? 3.4什么叫微处理器的并行操作方式?为什么说8086CPU具有并行操作的功能?在什么情况下8086的执行 单元(EU)才需要等待总线接口单元(BIU)提取指令? 3.5逻辑地址和物理地址有何区别?为什么8086微处理器要引入“段加偏移”的技术思想?“段加偏移” 的基本含义是什么?试举例说明。 3.6段地址和段起始地址相同吗?两者是什么关系?8086的段起始地址就是段基址吗?它是怎样获得的? 3.7在8086微计算机中,若段寄存器中装入如下数值,试写出每个段的起始地址和结束地址。(假设段的最 大长度为64K) (1)1000H (2)1234H (3)E000H (4)AB00H 3.8已知8088微处理器组成的系统中,对于下列CS:IP组合,计算出要执行的下条指令的存储器地址。 (1)CS=1000H和IP=2000H (2)CS=2400H和IP=1A00H (3)CS=1A00H和IP=B000H (4)CS=3456H和IP=ABCDH 3.9已知计算机中两个16位数算术运算的结果为0E91BH,求PF = ?,SF = ?,ZF = ? 3.10一个基本的总线周期由几个状态组成?微处理器在什么情况下才执行总线周期?在什么情况下需要插 入等待状态? 3.11什么叫做非规则字,微处理器对非规则字是怎样操作的?字节、字在存储单元的存放顺序与存储单元的 地址有什么关系?字符在存储单元中以什么形式存放,举例说明? 3.128086对1MB的存储空间是如何按高位库和低位库来进行选择和访问的?用什么控制信号来实现对两个 库的选择? 3.13堆栈的深度由哪个寄存器确定?为什么说一个堆栈的深度最大为64KB?在执行一条入栈或出栈指令 时,栈顶地址将如何变化? 3.148086/8088CPU对(RESET)复位信号的复位脉冲宽度有何要求?复位后内部寄存器的状态如何? DT/信号起什么作用?它在什么情况下被浮置为高3.15ALE信号起什么作用?它在使用时能否被浮空?R 阻状态? 3.168086/8088CPU的哪些引脚采用了分时复用技术?哪些引脚具有两种功能?

8086指令系统之算术运算类指令

8086 指令系统之算术运算类指令 2007-04-17 07:51 1 加法指令 1.1 加法指令 ADD ADD reg,imm/reg/mem ;reg←reg+imm/reg/mem ADD mem,imm/reg ;mem←mem+imm/reg 2.17a: 例 2.17a:加法运算 mov add mov mov add add al,0fbh ;al=0fbh al,07h ;al=02h word ptr[200h],4652h ;[200h]=4652h bx,1feh ;bx=1feh al,bl ;al=00h word ptr[bx+2],0f0f0h ;[200h]=3742h
ADD 指令按照状态标志的定义相应设置这些标志的 0 或 1 状态。例如 在 07+FBH→02H 运算后:标志为 OF=0、SF=0、ZF=0、AF=1、PF=0、CF=1;用调 试程序单步执行后,上述标志状态依次为 NV、PL、NZ、AC、PO、CY。 同样进行 4652h+f0f0h→3742H 运算后,标志为 OF=0、SF=0、ZF=0、 AF=0、PF=1、CF=1;调试程序依次显示为 NV、PL、NZ、NA、PE、CY。注意,PF 仅反映低 8 位中“1”的个数,AF 只反映 D3 对 D4 位是否有进位。 1.2 带进位加法指令 ADC ADC reg,imm/reg/mem ;reg←reg+imm/reg/mem+CF ADC mem,imm/reg ;mem←mem+imm/reg+CF ;mem←mem+imm/reg+CF 加法运算外, CF, ADC 指令除完成 ADD 加法运算外,还要加进位 CF,其用法及对状态标志的 指令一样。 影响也与 ADD 指令一样。ADC 指令主要用于与 ADD 指令相结合实现多精度 数相加。 数相加。 2.17b: 例 2.17b:无符号双字加法运算 mov ax,4652h ;ax=4652h add ax,0f0f0h ;ax=3742h,CF=1 mov dx,0234h ;dx=0234h adc dx,0f0f0h ;dx=f325h,CF=0 上述程序段完成 DX.AX = 0234 4652H + F0F0 F0F0H = F325 3742H。 1.3 增量指令 INC INC reg/mem ;reg/mem←reg/mem+1 增量)。 INC 指令对操作数加 1(增量)。

汇编语言指令分类详解

3.1 8086/8088寻址方式 计算机中的指令由操作码字段和操作数字段组成。 操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。 操作数:指在指令执行操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。 寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。8086/8088的基本寻址方式有六种。 1.立即寻址 所提供的操作数直接包含在指令中。它紧跟在 操作码的后面,与操作码一起放在代码段区域中。 如图所示。 例如:MOV AX,3000H 立即数可以是8位的,也可以是16位的。若 是16位的,则存储时低位在前,高位在后。 立即寻址主要用来给寄存器或存储器赋初值。 2.直接寻址 操作数地址的16位偏移量直接包含在指令中。它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。如图2-2所示。 例如:MOV AX,DS:[2000H];

图2-2 (对DS来讲可以省略成MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。 8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。此时只要在指令中指明是段超越的,则16位地址偏移量可以与CS或SS或ES相加,作为操作数的地址。 MOV AX,[2000H] ;数据段 MOV BX,ES:[3000H] ;段超越,操作数在附加段 即绝对地址=(ES)*16+3000H 3.寄存器寻址 操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。 例如:MOV DS,AX MOV AL,BH 4.寄存器间接寻址 操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。可以 分成两种情况: (1)以SI、DI、BX间接寻址,则 通常操作数在现行数据段区域 中,即数据段寄存器(DS)*16 加上SI、DI、BX中的16位偏移 量,为操作数的地址, 例如:MOV AX,[SI] 操作数地址是:(DS)*16+(SI) (2)以寄存器BP间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器(SS)*16与BP的内容相加作为操作数的地址, 例如:MOV AX,[BP] 操作数地址是:(SS)*16+(BP)若在指令中规定是段超越的,则BP的内容也可以与其它的段寄存器相加,形成操作数地址。 例如:MOV AX,DS:[BP] 操作数地址是:(DS)*16+(BP)5.变址寻址 由指定的寄存器内容,加上指令中给出的8位或16位偏移量(当然要由一个

8086 汇编指令集

8086 汇编指令集 一、数据传输指令 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令 MOV 传送字或字节. 格式为: MOV DST,SRC 执行的操作:(DST)<-(SRC) MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. 格式为:PUSH SRC 执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC) POP 把字弹出堆栈. 格式为:POP DST 执行的操作:(DST)<-((SP+1),(SP)) (SP)<-(SP)+2 PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI 依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX 依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 依次弹出堆栈. BSWAP 交换32 位寄存器里字节的顺序 XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) 格式为:XCHG OPR1,OPR2 执行的操作:(OPR1)<-->(OPR2) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里) 2. 输入输出端口传送指令. IN I/O 端口输入. ( 语法: IN 累加器,{端口号│DX} ) 长格式为: IN AL,PORT(字节) IN AX,PORT(字) 执行的操作: (AL)<-(PORT)(字节) (AX)<-(PORT+1,PORT)(字) 短格式为: IN AL,DX(字节) IN AX,DX(字) 执行的操作: AL<-((DX))(字节) AX<-((DX)+1,DX)(字) OUT I/O 端口输出. ( 语法: OUT {端口号│DX},累加器),输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX 指定时,其范围是0-65535. 长格式为: OUT PORT,AL(字节) OUT PORT,AX(字) 执行的操作: (PORT)<-(AL)(字节)

8086-8088指令系统

实验二(找出8086/8088指令系统所有指令的操作码的编码) 一、实验目的 本实验旨在利用debug工具的e和u功能找出8086/8088指令系统的指令格式中各种操作码编码对应的指令功能。 二、实验原理 已经知道: 1、每条指令1~6个字节不等 2、指令的第一字节为操作码,规定指令的操作类型。第二字节规定操作数的寻址方式 接着以后的3~6 字节依据指令的不同取舍。 3、第一个字节的八个二进制位中前六位为操作码的主要部分,之后一位是D字段,然 后是W字段,W指出操作数类型: W=0 为字节, W=1 为字, D指出操作数的传送方向: D=0 寄存器操作数为源操作数, D=1 寄存器操作数为目标操作数。 三、实验步骤 (一) 1、用试探法 结论:操作码字节前六位为000000(二进制)看来是一条ADD指令,而且只占两个字节。记下来: 指令码汇编指令 --------------------------------------------------------------------- 037F:0100 0000 ADD [BX+SI],AL 2、将指令首字节变为01,重复以上实验

结论:第1字节由00(二进制0000 0000)变为01(二进制0000 0001),ADD指令的第二个操作数由AL变为了AX。AL为8位寄存器、AX为16位寄存器,印证了W字段的作用,增加一条有用的记录: 指令码汇编指令 ------------------------------------------------------------------------- 037F:0100 0000 ADD [BX+SI],AL 037F:0100 0100 ADD [BX+SI],AX 3、将指令首字节变为02,重复以上实验 第1字节由00(二进制0000 0000)变为02(二进制0000 0010),ADD 操作的传送方向发生转变,印证了D字段的作用。增加一条记录: 指令码汇编指令 ------------------------------------------------------------------------ 037F:0100 0000 ADD [BX+SI],AL 037F:0100 0100 ADD [BX+SI],AX 037F:0100 0200 ADD AL,[BX+SI] 4、将指令首字节变为03,重复以上实验 D和W同时变化,记下: 指令码汇编指令 ----------------------------------------------------------------------- 037F:0100 0000 ADD [BX+SI],AL 037F:0100 0100 ADD [BX+SI],AX 037F:0100 0200 ADD AL,[BX+SI] 037F:0100 0300 ADD AX,[BX+SI]

汇编指令手册

8086/8088指令系统 8086/8088的指令系统丰富,而且指令的功能也强。 大多数指令既能处理字数据,又能处理字节数据; 算术运算和逻辑运算不局限于累加器, 存储器操作数也可直接参加算术逻辑运算。 8086/8088的指令系统可分为如下六个功能组: (1)数据传送 (2)算术运算 (3)逻辑运算 (4)串操作 (5)程序控制 (6)处理器控制 汇编语言语句的一般格式。指令语句可由四部分组成,一般格式如下:[标号:] 指令助记符[操作数1] [操作数2] [;注释] 指令是否带有操作数,完全取决于指令本身标号的使用取决于程序的需要, 标号只被汇编程序识别,它与指令本身无关。 (一)数据传送指令 数据传送指令组又可分为:传送指令,交换指令,地址传送指令,堆栈操作指令,标志传送指令,查表指令,输入输出指令在有关章节介绍。 除了SAHF和POPF指令外,这组指令对各标志没有影响。 1,传送指令 其格式如下:MOV DST,SRC 目的,源 源操作数可以是累加器,寄存器,存储单元以及立即数, 而目的操作数可以是累加器,寄存器和存储单元。传送不改变源操作数。 传送指令能实现下列传送功能: (1)CPU内部寄存器之间的数据传送。例如: MOV AH,AL MOV DL,DH MOV BP,SP MOV AX,CS 注意:源和目的操作数不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP即不能作为源,也不能作为目的。注意,这种例外永远存在。 (二)交换指令 利用交换指令可方便地实现通用寄存器与通用寄存器或存储单间的数据交换,交换指令的格式如下: XCHG OPRD1,OPRD2 此指令把操作数OPRD1R的内容与操作数OPRD2的内容交换。操作数同时是字节或字。 例如: XCHG AL,AH;XCHG SI,BX

8086指令整理v0.95

8086/8088指令小结 一、数据传送指令 通用传送指令 基本传送指令 MOV dst, src;要类型匹配;不能同时为存储器操作数 ;立即数,CS,IP不能作为目的 ;不能给段寄存器赋立即数,段寄存器间不能直接赋值数据交换指令 XCHG dst, src;使源与目的互换;要类型匹配 ;不能同时为存储器操作数,段寄存器不能参加交换堆栈操作指令 PUSH src;将16位操作数压入栈顶,SP=SP-2,不能压立即数 POP dst;从堆栈弹出一个字送至目的,SP=SP+2,dst不能为立即数查表转换指令 XLAT src-tabel;src-tabel表的表首地址应先放入BX,表中元素序号送AL ;查询后结果存于AL,可以段超越,如XLAT ES:src-tabel 输入输出指令 输入指令IN IN ac, port;从一个端口输入一个字节或字到累加器(ac)输出指令OUT;对于IN和OUT,间接寻址时,地址只能装在DX中OUT port, ac;执行与IN相反的操作。 地址传送指令 取有效地址指令LEA LEA reg, src;送指定存储器的16位偏移地址到16位通用寄存器指针送寄存器和DS的指令LDS LDS reg, src;32位地址,段地址放入DS,偏移地址放入reg 指针送寄存器和ES的指令LES LES reg, src;32位地址,段地址放入ES,偏移地址放入reg 标志位传送指令 取标志位Load AH Flag对标志位无影响 LAHF;将SF、ZF、AF、PF、CF存入AH的7、6、4、2、0位存标志位Save AH Flag明显对标志位有影响 SAHF;将AH的7、6、4、2、0位存入SF、ZF、AF、PF、CF 标志位入栈PUSHF;将16位标志位入栈保护 标志位出栈POPF;将栈顶字单元弹出到标志位

相关文档
相关文档 最新文档