《微机原理与应用》PPT课件.ppt

上传人:xin****828 文档编号:15488312 上传时间:2020-08-12 格式:PPT 页数:65 大小:355.50KB
返回 下载 相关 举报
《微机原理与应用》PPT课件.ppt_第1页
第1页 / 共65页
《微机原理与应用》PPT课件.ppt_第2页
第2页 / 共65页
《微机原理与应用》PPT课件.ppt_第3页
第3页 / 共65页
点击查看更多>>
资源描述
子程序调用指令CALL,CALL指令用在主程序中,实现子程序的调用 分成段内调用(近调用)和段间调用(远调用) 目标地址采用相对寻址、直接寻址或间接寻址 入栈返回地址:将CALL下一条指令的地址压入堆栈 16位段段内:16位偏移地址,段间:再加16位段地址 32位段段内:32位偏移地址,段间:再将16位段选择器零位扩展为32位保存到堆栈,CALL label ;调用标号指定的子程序 CALL reg16/reg32 ;调用寄存器指定地址的子程序 CALL mem16/mem32 ;调用存储单元指定地址的子程序,子程序返回指令RET,RET指令用在子程序结束,实现返回主程序 RET ;无参数返回:出栈返回地址 RET i16 ;有参数返回:出栈返回地址,ESPESPi16,过程定义,过程定义伪指令获得子程序信息 过程名PROC ;过程体 过程名ENDP ;过程名为符合语法的标识符 PROC后面可加参数:NEAR或FAR,CSEG SEGMENT ASSUME CS:CSEG START: . CALL SUBT . MOV AH,4CH INT 21H SUBT PROC (NEAR) . RET SUBT ENDP CSEG ENDS END START,子程序设计,利用过程定义,获得子程序名和调用属性 RET指令返回主程序,CALL指令调用子程序 压入和弹出操作要成对使用,保持堆栈平衡 开始保护寄存器,返回前相应恢复 安排在代码段的主程序之外 子程序允许嵌套和递归 可共用一个数据段,也可具有独立数据段,最好有完整的注释,难点是参数传递,子程序的参数传递,主程序与子程序间通过参数传递建立联系 入口参数(输入参数):主程序子程序 出口参数(输出参数):子程序主程序 传递参数的多少反映程序模块间的耦合程度 参数的具体内容 数据本身(传递数值) 数据的存储地址(传递地址,传递引用) 参数传递方法:寄存器、变量或堆栈,寄存器传递参数(例5-16),最简单和常用的参数传递方法 把参数存于约定的寄存器 少量数据直接传递数值 大量数据只能传递地址 带有出口参数的寄存器不保护 带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致,例题5-16字符串显示程序-1,;数据段 msgdb Well, I made it !,0 ;代码段(主程序) mov si,offset msg;主程序提供显示字符串 call dpstri;调用子程序 mov ah,4ch int 21h,寄存器 地址参数传递,例题5-16字符串显示程序-2,;代码段(子程序) dpstriproc;子程序:显示字符串 push ax ;寄存器保护 dps1:mov al,si;取显示字符 cmp al,0;是结尾,则显示结束 jz dps2 call dpchar;调用字符显示子程序 inc si jmp dps1 dps2:pop ax ;寄存器恢复 ret dpstriendp,寄存器 数值参数传递,例题5-16字符串显示程序-3,dpcharproc;子程序显示字符 push ax;顺序入栈,保护寄存器 push dx mov ah,2 mov dl,al;显示一个字符 int 21h pop dx;逆序出栈,恢复寄存器 pop ax ret dpcharendp,共享变量传递参数,子程序和主程序使用同一个变量名存取数据 变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTREN声明 共享变量传递参数,子程序的通用性较差 特别适合在多个程序段间、尤其在不同的程序模块间传递数据,例题5-19有符号十进制数输出程序-1,算法如下: 首先判断数据是零、正数或负数,是零显示“0”退出; 是负数,显示“”,求数据的绝对值; 接着数据除以10,余数加30H转换为ASCII码压入堆栈; 重复第3步,直到商为0结束; 依次从堆栈弹出各位数字,进行显示,例题5-19有符号十进制数输出程序-2,mov ecx,count mov ebx,0 again:mov eax,arrayebx*4 mov dtemp,eax;入口参数存放到共享变量 call dispsid;调用子程序显示一个数据 inc ebx call dpcrlf;光标回车换行 loop again,例题5-19有符号十进制数输出程序-3,dispsidproc;显示有符号十进制数子程序 push eax;入口参数:共享变量DTEMP push ebx push edx mov eax,dtemp;取出显示数据 test eax,eax;判断数据是零、正数或负数 jnz dsid1 mov dl,0;是零,显示“0”后退出 mov ah,2 int 21h jmp dsid5,例题5-19有符号十进制数输出程序-4,dsid1:jns dsid2;是负数,显示“-” mov ebx,eax;EAX数据暂存于EBX mov dl,- mov ah,2 int 21h mov eax,ebx neg eax;数据求补(绝对值),例题5-19有符号十进制数输出程序-5,dsid2:mov ebx,10 push bx;10压入堆栈,作为退出标志 dsid3:cmp eax,0;数据(商)为零,转向显示 jz dsid4 sub edx,edx;扩展被除数EDX.EAX div ebx;数据除以10:EDX.EAX10 add dl,30h;余数(09)转换为ASCII码 push dx;数据先低位后高位压入堆栈 jmp dsid3,例题5-19有符号十进制数输出程序-6,dsid4:pop dx;数据先高位后低位弹出堆栈 cmp dl,10;是结束标志10,则退出 je dsid5 mov ah,2;进行显示 int 21h jmp dsid4 dsid5:pop edx pop ebx pop eax ret;子程序返回 dispsidendp,字符串输入功能,例题5-12输入字符串大小写转换程序-1,;数据段 keynum= 255 keybufdb keynum;键盘输入缓冲区 db 0 db keynum dup(0) ;代码段 mov dx,offset keybuf;设置入口参数DX mov ah,0ah int 21h;用户用回车键结束 mov dl,0ah;回车后再进行换行 mov ah,2 int 21h,输入“Hi”,回车,缓冲区: FF 02 48 69 0D 00 ,例题5-12输入字符串大小写转换程序-2,mov bx,offset keybuf+1;输入字符个数 mov cl,bx mov ch,0;作为循环的次数 again:inc bx;BX指向输入字符 mov dl,bx;取出一个字符 cmp dl,a;小于小写字母“a” jb disp cmp dl,z;大于小写字母“z” ja disp;直接去显示 sub dl,20h;小写字母转换为大写字母 disp:mov ah,2;显示一个字符 int 21h loop again;循环,计数控制循环,堆栈传递参数,主程序将入口参数压入堆栈,子程序从堆栈中取出参数 子程序将出口参数压入堆栈,主程序弹出堆栈取得它们 采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法,例题5-20计算有符号数平均值程序-1,算法如下: 被加数进行符号扩展 求和 除以数据个数得到平均值 32位有符号数扩展到64位,32位表示数据个数(最大232 ) ,不会溢出,例题5-20计算有符号数平均值程序-2,mov eax,count push eax;压入数据个数(0表示232个) mov ebx,offset array push ebx;压入缓冲区的偏移地址 call mean;调用子程序,求平均值 add esp,8;平衡堆栈 mov dmed,eax;保存出口参数,例题5-20计算有符号数平均值程序-3,meanproc;计算有符号数平均值 push ebp mov ebp,esp push ebx;保护寄存器 push ecx push edx push esi push edi mov ebx,ebp+6;从堆栈取偏移地址 mov ecx,ebp+10;从堆栈取数据个数,例题5-20计算有符号数平均值程序-4,xor esi,esi;ESI保存求和的低32位值 mov edi,esi;EDI保存求和的高32位值 mean1:mov eax,ebx;取出一个数据EAX cdq;符号扩展EDX.EAX add esi,eax;求和低32位 adc edi,edx;求和高32位 add ebx,4;指向下一个数据 loop mean1;循环 mov eax,esi;累加和在EDX.EAX mov edx,edi,例题5-20计算有符号数平均值程序-5,mov ecx,ebp+10;数据个数在CX idiv ecx ;有符号数除法,EAX平均值(EDX余数) pop edi;恢复寄存器 pop esi pop edx pop ecx pop ebx pop ebp ret meanendp,第6章 微处理器外部特性,6.1 8086的引脚信号 6.1.1 地址/数据信号 6.1.2 读写控制信号 6.1.3 其他控制信号 6.2 8086的总线时序 6.2.1 写总线周期 6.2.2 读总线周期 6.3 奔腾微处理器引脚和时序 6.3.1 引脚定义 6.3.2 总线周期 6.4 微机系统总线 6.4.1 微机总线技术 6.4.2 ISA总线 6.4.3 PCI总线,CPU,外设、存储器,地址,数据,控制,运算单元,控制单元,微型计算机系统硬件结构,1. 微处理器 2. 存储器 3. I/O接口和I/O设备 4. 系统总线,控制总线CB,数据总线DB,地址总线AB,微处理器,I/O设备,I/O接口,存储器,系统总线BUS,处理器总线,数据总线(DB:Data Bus) 处理器与存储器或外设交换信息的通道 个数(条数)是一次能够传送数据的二进制位数 地址总线(AB:Address Bus) 指定存储器或外设的具体单元 个数反映访问的主存储器容量或外设范围 控制总线(CB:Control Bus) 控制处理器数据传送等操作,一个信号两种状态(高或低)两种编码(1或0),引脚信号,信号的功能 用英文单词或英文缩写表示引脚名称 信号的流向 微处理器输出到外部,从外部输入到微处理器内部 有效方式 低电平有效,高电平有效,上升沿或下降沿有效 高电平和低电平都有效 三态能力 高阻状态放弃对引脚的控制 其他设备控制该引脚,总线信号图形表示,单一信号 用单线表示,实线高低表示电平高低,虚线表示状态任意; 成组信号 用高低双线表示,两线交叉表示成组信号改变。双线变为一条居中横线表示输出高阻状态。,总线复用,同一引脚在不同时刻具有不同功能,最常复用:地址引脚数据引脚 目的:减少引脚个数,8086的数据总线和地址总线,AD15AD0(Address/Data) 地址/数据分时复用引脚,共16个引脚 单向输出地址总线,双向数据总线,三态输出,8086的数据总线和地址总线,AD15AD0(Address/Data) 地址/数据分时复用引脚,共16个引脚 单向输出地址总线,双向数据总线,三态输出 A19/S6A16/S3(Address/Status) 地址/状态分时复用引脚,4个三态输出信号 输出高4位地址,输出状态信号,8086的数据总线和地址总线,AD15AD0(Address/Data) 地址/数据分时复用引脚,共16个引脚 单向输出地址总线,双向数据总线,三态输出 A19/S6A16/S3(Address/Status) 地址/状态分时复用引脚,4个三态输出信号 输出高4位地址,输出状态信号 ALE(Address Latch Enable) 地址锁存允许,三态、输出、高电平有效 有效时,表示复用引脚正在传送地址信号,8086的基本读写引脚,WR*(Write) 写控制,三态、输出、低电平有效 有效时,表示微处理器正将数据写到存储单元或I/O端口 RD*(Read) 读控制,三态、输出、低电平有效 有效时,表示微处理器正从存储单元或I/O端口读取数据 M/IO*(Memory/Input and Output) 访问存储器或者I/O,三态、输出、高低电平均有效 高电平(M),表示微处理器访问存储器 低电平时(IO*),表示微处理器访问I/O端口,基本总线操作,存储器读(Memory Read) 微处理器从存储器读取代码或读取操作数 每条指令执行前都需从主存取指 以存储单元为源操作数的指令在执行时 存储器写(Memory Write) 微处理器向存储器写入操作数 以存储单元为目的操作数的指令在执行时,CPU,地址,数据,控制,专用寄存器,通用寄存器,.,.,地址就是号码,CPU,A0A19地址,AD0AD15数据,ALE,.,.,RD/WR,M/IO*,总线时序,总线时序(Timing) 描述总线信号随时间变化的规律以及总线信号间的相互关系 采用时序图形象化地表现时序 指令周期 一条指令从取指、译码到最终执行完成的过程 总线周期或机器周期 伴随有数据交换的总线操作 T状态 微处理器的基本工作节拍,对应时钟周期,8086的写总线周期,完成对存储器或I/O端口的一次写操作 T1状态 输出20位存储器地址A19A0 M/IO*输出高电平,表示存储器操作 或者M/IO*输出低电平,表示I/O操作 ALE输出正脉冲,表示复用总线输出地址 T2状态 输出控制信号WR*和数据D15D0 T3状态 检测数据传送是否能够完成 T4状态 完成数据传送,MOV mem, imm/reg,M/IO*为高,8086的读总线周期,完成对存储器或I/O端口的一次读操作 T1状态 输出20位存储器地址A19A0 M/IO*输出高电平,表示存储器操作 或者M/IO*输出低电平,表示I/O操作 ALE输出正脉冲,表示复用总线输出地址 T2状态 输出控制信号RD*,存储器或I/O端口发送数据 T3状态和Tw状态 检测数据传送是否能够完成 T4状态 获取数据,完成传送,MOV reg, mem,M/IO*为高,BHE*/S7(Byte High Enable/Status) 高字节允许/状态分时复用引脚,三态输出信号 输出低有效表示传送高字节数据,输出状态信号,I/O读(Input/Output Read) 只有执行输入指令IN时才有 微处理器从外设读取操作数 I/O写(Input/Output Write) 微处理器向外设写出操作数 只有执行输出指令OUT时才有,基本总线操作,OUT DX/i8, AL/AX/EAX,M/IO*为低,IN AL/AX/EAX, DX/i8,M/IO*为低,等待状态,微处理器运行速度远远快于存储器和I/O端口 控制READY信号为低无效,不进入T4状态,插入等待状态Tw Tw状态:引脚信号延续T3时的状态 一个Tw状态的长度是一个时钟周期 在Tw的前沿,继续对READY进行测试 无效继续插入Tw;有效时转入T4状态,同步操作引脚,同步操作 读写操作要保证存储器或外设与微处理器速度一致 否则,慢速的I/O或存储器发出一个信号 让快速的微处理器等待 READY 就绪(准备好) 输入信号,高电平有效表示可以进行数据读写 利用该信号无效请求微处理器等待数据 微处理器在进行读写前检测READY引脚,中断请求和响应引脚,INTR(Interrupt Request) 可屏蔽中断请求,高电平有效的输入信号 有效时,表示中断请求设备向微处理器申请可屏蔽中断 中断IF标志对该中断请求进行屏蔽 主要用于实现外设数据交换的中断服务 INTA*(Interrupt Acknowledge) 可屏蔽中断响应,低电平有效的输出信号 有效时,表示来自INTR引脚的中断请求已被微处理器响应,NMI(Non-Maskable Interrupt) 不可屏蔽中断请求,上升沿有效的输入信号 有效时,表示外界向CPU申请不可屏蔽中断 中断级别高于可屏蔽中断请求INTR 常用于处理系统发生故障等紧急情况下的中断服务,总线请求和响应引脚,HOLD 总线请求,高电平有效的输入信号 有效时,表示其他总线主控设备申请使用总线 HLDA(HOLD Acknowledge) 总线响应,高电平有效的输出信号 有效时,表示微处理器已响应总线请求 总线释放:地址总线、数据总线及具有三态输出能力的控制总线呈现高阻状态,其他引脚,RESET 复位,高电平有效的输入信号 有效时,将迫使微处理器回到其初始状态 8086复位后,寄存器CSFFFFH,IP0000H CLK(Clock) 时钟输入,频率稳定的数字信号 微处理器的基本操作节拍 频率的倒数是时钟周期的时间长度,总线带宽,单位时间传输的数据量,也称为总线传输速率或吞吐量; 单位:每秒兆字节(MBps)或每秒位(bps); 取决于总线数据宽度、时钟频率和传输类型; 公式:总线带宽=传输的数据量/需要的时间,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!