汇编语言程序设计2.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言程序设计2

什么是溢出 处理器内部以补码表示有符号数 8个二进制位能够表达的整数范围是:+127 ~ -128 16位表达的范围是:+32767 ~ -32768 如果运算结果超出了这个范围,就是产生了溢出 有溢出,说明有符号数的运算结果不正确 无符号数有溢出吗? FFH + 01H = 00H, CF = 1, 进位溢出 溢出的判断 方法一(CPU): 如果最高位与次高位同时向前有或无进/借位,则OF = 0;(?) 如果最高位与次高位不同时向前有或无进/借位,则OF = 1; 方法二: 两个正补码数相加结果为负 两个负补码数相加结果为正 正补码数 - 负补码数为负 负补码数 - 正补码数为正 其他情况 OF = 1 OF = 0 溢出和进位 溢出标志OF和进位标志CF是两个意义不同的标志 进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确; 可恢复的错误。 溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。 不可恢复错误。 溢出和进位的对比 例1:7FH + 01H=80H 无符号数运算:127+1=128, 范围内,无进位 有符号数运算: 127+1=128 ,范围外,有溢出 例2:FFH + 01H=(1)00H 无符号数运算:255+1=256,范围外,有进位 有符号数运算:-1+1=0 , 范围内,无溢出 如何运用溢出和进位 处理器对两个操作数进行运算时,并不知道操作数是有符号数还是无符号数,所以全部设置,按各自规则。 应该利用哪个标志,则由程序员来决定。 将参加运算的操作数是无符号数,就应该关心CF; 将参加运算的操作数是有符号数,则要注意是否溢出。 我怎么知道是什么数? 除了你没人知道,? 例: MOV AX, 1 MOV BX, 2 ADD AX, BX 指令执行后,(AX)=3, OF=0, CF=0, ZF=0, SF=0 例: MOV AX, FFFFH MOV BX, 1 ADD AX, BX 指令执行后,(AX)=0, OF=0, CF=1, ZF=1, SF=0 方向标志DF(Direction Flag) 用于串操作指令中,控制地址的变化方向: 设置DF=0,串操作的存储器地址自动增加; 设置DF=1,串操作的存储器地址自动减少。 CLD指令复位方向标志:DF=0 STD指令置位方向标志:DF=1 中断允许标志IF(Interrupt-enable Flag) 用于控制外部可屏蔽中断是否可以被处理器响应: 设置IF=1,则允许中断; 设置IF=0,则禁止中断。 CLI指令复位中断标志:IF=0 STI指令置位中断标志:IF=1 陷阱标志TF(Trap Flag) 用于控制处理器是否进入单步操作方式: 设置TF=0,处理器正常工作; 设置TF=1,处理器单步执行指令。 单步执行指令——处理器在每条指令执行结束时,便产生一个编号为1的内部中断。这种内部中断称为单步中断,所以TF也称为单步标志。 利用单步中断可对程序进行逐条指令的调试。 这种逐条指令调试程序的方法就是单步调试。 2.3 80x86 CPU的工作模式 实模式 保护模式 虚拟8086模式 实模式(Real Mode) 与8086兼容的工作模式,只有低20位地址线起作用,仅能寻址第一个1MB的内存空间。 MS DOS运行在实模式下, 80286-Pentium系列复位后工作于实模式,直到OS引导后,切换到保护模式。 实模式(Real Mode) 分段技术 Why? 矛盾:AB 20位 ≮≯ DB 16位 地址:20位≮≯地址Register:16位 How? 用两个16位Register 方案? 方案 用两个16位Register 16 16 + 20 分段定义 将存储器分成若干个逻辑段 段首地址必须为:****0H。其有效地址“****H”存放在段寄存器中,称为段地址。 段中某一个单元相对于段首的距离称为偏移地址,偏移地址存放在偏移地址寄存器中。 段的长度不超过216=64K。(仅能访问4*64K?) 对 比 物理地址 = 16 ×段地址 + 偏移地址 16 16 + 20 0 0 0 0 段地址 偏移地址 物理地址 段首地址 4个专门存放段地址的段寄存器(16位) 代码段 段寄存器 CS 数据段 段寄存器 DS 堆栈段 段寄存器 SS 附加段 段寄存器 ES 例:(DS)=3000H, 偏移=1234H, 物理地址=16d ? (DS) + 偏移 =31234H 存储器 8K代码

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档