2012年2月27日
摘要: 实现库函数sqrt的功能(C代码)正数 n 的平方根可以通过计算一系列近似值来获得,每个近似值够比前一个更加接近准确值。第一个近似值是 1 ,接下来的近似值则通过下面的公式来获得。 每进行一次计算得到的结果都是 n 的平方根的一个近似值,原则上,这种计算可以永远进行下去,它会不断产生更加精确的结果。但在实际中,由于浮点变量的精度限制,程序无法一直计算下去。当计算得到某个近似值与前一个近似值相等的时候,就可以停止计算。得到的这个值也就是 n 的平方根。#include <stdio.h>#include <stdlib.h> double Sqrt( double dNu 阅读全文
posted @ 2012-02-27 22:11 克劳德曼 阅读(1000) 评论(0) 推荐(1) 编辑
摘要: 问题:CPU是如何检测溢出的? 在加法和减法运算完成后,CPU使用一种非常有趣的方法确定溢出标志的值:运算结果最高有效位的进位值(即CF的值)与到最高有效位的进位值异或,其结果放到溢出标志中。例如8位二进制数 1000 0000 和 1111 1110 相加,第6位向最高有效位(第7位)无进位,但是第7位向高位有进位值(CF=1):第6位到第7位没有进位CF = 1← 1000 0000+ 1111 1110--------------------------------- = 0111 1110由于1 XOR 0 = 1,因此:OF = 1注:《Intel汇编语言程序设计》第五版 阅读全文
posted @ 2012-02-27 22:04 克劳德曼 阅读(563) 评论(0) 推荐(1) 编辑
摘要: ·汇编标志位:------------------------------------------------------------------------------------标志名 标志 1 标志 0------------------------------------------------------------------------------------OF (溢出标志) OV NVDF (方向标志) UP DNIF (中断标志) EI DISF (符号标志位) PL NGZF (零标志) ZR NZAF (辅助进位标志位) AC... 阅读全文
posted @ 2012-02-27 22:03 克劳德曼 阅读(798) 评论(0) 推荐(1) 编辑
摘要: 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。表2.1 通用寄存器的主要用途寄存器的分类寄存器主 要 用 途通用寄存器数据 寄存器AX乘、除运算,字的输入输出,中间结果的缓存AL字节的乘、除运算,字节的输入输出,十进制算术运算AH字节的乘、除运算,存放中断的功能号BX存储器指针CX串操作、循环控制的计数器CL移位操作的计数器DX字的乘、除运算,间接的输入输出变址寄存器SI存储器指针、串指令中的源操作数指针DI存储器指针、串指令中的目 阅读全文
posted @ 2012-02-27 22:01 克劳德曼 阅读(311) 评论(0) 推荐(1) 编辑
摘要: 16位CPU内部有一个16位的标志寄存器,它包含9个标志位。这些标志位主要用来反映处理器的状态和运算结果的某些特征。各标志位在标志寄存器内的分布如图2.2所示。1514131211109876543210OFDFIFTFSFZF AF PF CF31…17161514131211109876543210……VMRFNTIOPLOFDFIFTFSFZF AFPFCF图2.2 16位/32位标志寄存器的示意图上面9个标志位可分为二组:运算结果标志位(有背景色的标志位)和状态控制标志位。前者受算术运算和逻辑运算结果的影响,后者受一些控制指令执行的影响。有些指令的执行会改变标志位(如:算术运算指令等) 阅读全文
posted @ 2012-02-27 21:57 克劳德曼 阅读(582) 评论(0) 推荐(1) 编辑