汇编语言结构与8086概述

1.1 汇编语言基本结构模板
汇编语言的基本框架由这四部分组成,如果某个段没有代码,可以将与该段有关的代码删除。1.2 8086 cpu简介intel8086是一个由intel于1978年所设计的16位微处理器芯片,是x86架构的鼻祖。不久之后,intel 就推出了 intel 8088 (一个拥有8根外部数据总线的微处理器)。它是以8080和8085的设计为基础,拥有类似的寄存器组,但是数据总线扩充为16位。总线界面单元透过6字节预存的队列位指令给执行单元,所以取指令和执行是同步的,8086 cpu有20条地址线,可直接寻址1mb的存储空间,每一个存储单元可以存放一个字节的二进制信息。1.2.1 8086引脚详解
(1) 地址/数据复用ad0~ad15 :双向三态门结构,采用分时的方法传送地址或数据的复用引脚。根据不同时钟周期的要求,决定当前是传送要访问的存储单元或i/o端口的低16位地址,还是传送16位数据,或是处于高阻状态;
(2) 地址状态s3~s6 :地址/状态信号,三态门,采用分时的方法传送地址或状态的复用引脚。其中a19~a16为20位地址总线的高4位地址,s6~s3是状态信号。s6表示cpu与总线连接的情况,s5指示当前中断允许标志if的状态。s4,s3的代码组合用来指明当前正在使用的段寄存器。s4与s3的代码组合及对应段寄存器的情况;
(3) 允许总线高8位数据传送/状态信号bhe/s7 :输出三态,为总线高8位数据允许信号,当低电平有效时,表明在高8位数据总线d15 ~d8上传送1个字节的数据。s7为设备的状态信号;
(4) 时钟脉冲输入端口clk :用于输入工作脉冲,8086的脉冲为5mhz的方波信号;
(5) 准备就绪信号ready :高电平有效;
(6) 最大最小工作模式选择端mn/mx :高电平为最小工作模式,低电平为最大工作模式;
(7) 读信号rd :低电平有效;
(8) 等待测试控制信号test :输入,低电平有效。信号用来支持构成多处理器系统,实现8086 cpu与协处理器之间同步协调的功能,只有当cpu执行wait指令时才使用;
(9) 可屏蔽中断请求信号intr :高电平有效,8086 cpu在每条指令执行到最后一个时钟周期时,都要检测intr引脚信号。intr为高电平时,表明有i/o设备向cpu申请中断,若if=1,cpu则会响应中断,停止当前的操作,为申请中断的i/o设备服务;
(10) 非屏蔽中断请求信号nmi :高电平有效,当nmi引脚上有一个上升沿有效的触发信号时,表明cpu内部或i/o设备提出了非屏蔽的中断请求,cpu会在结束当前所执行的指令后,立即响应中断请求;
(11) 复位信号reset :高电平有效。reset信号有效时,cpu立即结束现行操作,处于复位状态,初始化所有的内部寄存器。复位后各内部寄存器的状态,当reset信号由高电平变为低电平时,cpu从ffff0h地址开始重新启动执行程序
最小工作模式下使用的引脚
(1) 存储器和i/o端口选择控制信号m/io :信号指明当前cpu是选择访问存储器还是访问i/o端口。为高电平时,访问存储器,表示当前要进行cpu与存储器之间的数据传送。为低电平时,访问i/o端口,表示当前要进行cpu与i/o端口之间的数据传送;
(2) 写信号wr :低电平有效。信号有效时,表明cpu正在执行写总线周期,同时由信号决定是对存储器还是对i/o端口执行写操作;
(3) 可屏蔽中断响应信号inta :低电平有效;
(4) 地址锁存允许信号ale :高电平有效。cpu利用ale信号可以把ad15~ad0地址/数据、a19/s6~a16/s3地址/状态线上的地址信息锁存在地址锁存器中;
(5) 数据发送接收信号dt/r :三态门结构,用来控制数据传送的方向。高电平时,cpu发送数据到存储器或i/o端口;低电平时,cpu接收来自存储器或i/o端口的数据;
(6) 数据允许控制信号den :三态,低电平有效信号,用作总线收发器的选通控制信号。当为低电平时,表明cpu进行数据的读/写操作;
(7) 总线保持请求信号hold :高电平有效。在dma数据传送方式中,由总线控制器8237a发出一个高电平有效的总线请求信号,通过hold引脚输入到cpu,请求cpu让出总线控制权。
(8) 总线保持响应信号hlda :高电平有效。hlda是与hold配合使用的联络信号。在hlda有效期间,hlda引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,cpu让出对总线的控制权,将其交付给申请使用总线的8237a控制器使用,总线使用完后,会使hold信号变为低电平,cpu又重新获得对总线的控制权。
最大工作模式下使用的引脚
(1) 总线周期状态信号s2,s1,s0 :低电平有效。它们表明当前总线周期所进行的操作类型,代码组合及其对应操作见下表
s2s1s0执行的操作
0 0 0 中断响应
0 0 1 读io端口
0 1 0 写io端口
0 1 1 暂停
1 0 0 取指
1 0 1 读存储器
1 1 0 写存储器
1 1 1 无效
(2) 总线请求允许信号输入/总线请求允许输出信号rq和gt :低电平有效。该信号用以取代最小模式时的hold/hlda两个信号的功能,是特意为多处理器系统而设计的。当系统中某一部件要求获得总线控制权时,就通过此信号线向8086 cpu发出总线请求信号,若cpu响应总线请求,就通过同一引脚发回响应信号,允许总线请求,表明8086 cpu已放弃对总线的控制权,将总线控制权交给提出总线请求的部件使用。rq/gt0优先级高于rq/gt1;
(3) 总线封锁信号lock :低电平有效。信号有效时,表示此时8086 cpu不允许其他总线部件占用总线;
(4) 指令队列状态信号qs1和qs0 :qs1和qs0信号的组合可以指示总线接口部件biu中指令队列的状态,以便其他处理器监视、跟踪指令队列的状态。
1.2.2 8086内部结构框图
总线接口单元biu构成
(1) 地址加法器 :用于形成20位的物理地址,将段寄存器提供的段基址左移4位,再加上16位的偏移地址生成,送往外部总线,用于寻址内存单元,其工作原理如图所示。
(2) 4个16位的代码段寄存器 ,分别为代码段寄存器cs,数据段寄存器ds,堆栈段寄存器ss,扩展段寄存器es,其中:
代码段寄存器cs:用于存放当前程序所在段—代码段的首地址;
数据段寄存器ds:用于存放当前程序所用数据段的段首地址;
堆栈段寄存器ss:用于存放当前程序所用堆栈段的段首地址;
扩展段寄存器es:用于存放辅助数据(字符串操作的目的区地址)所在段的段首地址。
(3) 指令指针寄存器ip :用于存放下一条指令的偏移地址;
(4) 一个6字节的指令队列缓冲器 :当执行单元eu正在执行指令且不需要占用总线时,biu会主动的执行预取指令操作,将所取的指令按先后次序存入指令队列缓冲器中,队列遵循“先入先出”原则,并按顺序取到eu中执行;
(5) 总线控制部件 :用于产生并发出控制信号。
执行单元eu组成
(1) 算术逻辑单元alu :用于进行算术运算与逻辑运算;
(2) 4个16位通用寄存器ax,bx,cx,dx :用于保存操作数或者运算结果;
(3) 4个16位专用寄存器 :只能以字的形式操作,常用于段内寻址时提供偏移地址,分别为:堆栈指针寄存器sp,基址指针寄存器bp,源变址寄存器si和目的变址寄存器di;
(4) 一个16位的标志寄存器fr :又称为程序状态寄存器psw,用于存放控制标志和反应cpu运行的状态特征,标志寄存器内容如下图所示:
1514131211109876543210
of df if tf sf zf af pf cf
of:溢出标志位
0:没有溢出 1:数据溢出df:方向标志位
0:向前 1:向后if:中断标志位
0:禁止中断 1:允许中断tf:陷阱标志位
sf:符号标志位
0:正数 1:负数zf:零标志位
0:不是0 1:全0af:辅助进位标志位
0:关闭辅助 1:开启辅助pf:奇偶标志位
0:偶数 1:奇数cf:进位标志位
1.2.3 8086的工作时序图在8086cpu中,一个最基本的总线周期由4个时钟周期组成,即t1,t2,t3,t4一共4个状态,当cpu需要等待时,可以插入1个或多个等待状态tw。
最小工作模式下的读时序
最小工作模式下的写时序
总线写操作时序与读操作时序基本相似,但是存在几个不同点:
(1)cpu不是输出rd信号,而是输出wr信号;
(2)dt/r整个总线周期都是高电平,表示总线周期为写周期,在接有数据总线收发器的系统中,用来控制数据传输方向;
(3)ad15~ad0在t2到t4状态输出数据,输出地址与输出数据为同一方向,无需像读周期那样要高阻态做缓冲,所以t2状态无高阻态。
最大工作模式下的读时序
最大工作模式下的写时序
最大工作模式与最小工作模式时序的区别:
(1) 控制信号ale、den和dt/r :最大模式中,ale、den和dt/r由总线控制器8288发出,den高电平有效,最小模式中,ale、den和dt/r由8086 cpu直接发出,den是低电平有效;
(2) 命令信号mrdc、mwtc、amwc、iorc、iowc和状态信号s2,s1,s0 :由于在最大方式下必须使用总线控制器8288,因此在其时序图中必然出现访问存储器和io接口的命令信号。
复位时序
条件:检测到reset引脚为上升沿。
复位逻辑电路:用clk来与外部reset同步,内部reset信号要在时钟的上升沿到来时才有效
1.5 8086最小系统搭建
图中的8086 cpu只需要注意以下几个事情即可:
(1)8086是高电平复位,所以正常运行时需要将21脚接低电平,图中的复位电路当按键没有按下的时候,用一个10k的下拉电阻将该引脚强制拉低,当按键按下的时候,21脚会变为高电平,此时8086进入复位模式,抬起按键后,8086停止复位,进入工作模式;
(2)33脚是最大最小工作模式选择引脚,当该引脚接vcc时,8086工作在最小工作模式,当该引脚接gnd时,8086则工作在最大工作模式,一般默认其工作在最小工作模式;
(3)图中利用74hc373作为地址锁存,由于8086 cpu首先发送地址信息,然后发送数据,所以,当8086在t1和t2时刻发送地址时,利用ale的下降沿脉冲锁存地址,确保其余的器件能够检测到地址信息。(注:由于8086具有20根地址线,最大寻址空间为1m,在仿真图中只是用了其中的低16位);
(4)将8086的rd,wr,ale和m/io端口引出作为控制线;
(5)由于8086在仿真中已经设计了一个5mhz的时钟源,所以不需要绘制时钟信号输入,在实际设计中,需要外接5mhz的时钟源。
(6)inta是8086的一个外部中断引脚,可以单独使用,或者配合中断芯片来扩展中断的个数,最大可支持256个中断。
1.6 protuse 8.6环境搭建1.6.1 仿真8086 cpu配置(1)放置8086 cpu,74hc373等需要的器件,然后连接对应的引脚;
(2)设置8086cpu的参数,双击8086会弹出参数对话框,此时需要设置三个参数:internal memory size为1000h,program loading segment为200h,stop on int3为yes,如下图所示:
1.6.2 程序编写配置(1)点击如图所示的按钮创建一个源文件sourcecode;
(2)点击菜单栏中project->createproject,然后在弹出对话框进行设置:
① family中选择8086
② compiler中选择masm32(如果显示masm32未安装,直接点击download下载安装即可)。
③ 然后点击确定,即可创建一个8086的工程,输入如下图所示的代码后点击运行即可编译成功并运行程序。
注:汇编的源文件后缀是.asm格式

plc可编程控制器的工作阶段
魅族17年产品规划曝光,你要的魅族PRO7 魅族MX7都来了!
微星MSI Optix MAG161便携显示器发布,售价约合人民币1800元
激光导航技术是如何实现的?
澎湃微PT32x033系列|血糖仪专题技术文章连载_06
汇编语言结构与8086概述
SKYLAB:如何挑选优质的11ac双频WiFi模块?
人工智能+物联网在智能安防领域如何助力的
易事达首推miniLED商业化应用方案 全方位吊打目前市面上的LED电视
V5 FPGA配置回读
关于FPGA的FMC接口的详细介绍
如何操作SDRAM的自刷新命令而不影响正常读写操作?
魅族Pro7失利,魅族MX7大爆料:全面屏+骁龙660,只要1999起?必须买
物联网的世界范围有多大
打通互联互通的最后一公里  Matter加速智能家居创新
锂电池怎么组装_锂电池饿死了怎么激活
中国电力系统发展方向趋势解析
有机硅新材料行业的龙头硅宝科技坚守科技创新
现有AGV/AMR及零部件法规标准一览
无刷电机常见故障 无刷电机控制器坏了怎样维修