【原创】C运行时函数对浮点参数的处理
摘要:先来看一段简单的Win32汇编代码: .386 .model flat, stdcall option casemap:noneinclude windows.incinclude kernel32.incincludelib kernel32.libinclude msvcrt.incincludelib msvcrt.lib .datafNum1 REAL4 999.999dwNum2 DWORD 3fNum3 REAL4 ? .constszF...
阅读全文
posted @
2012-04-18 20:25
克劳德曼
阅读(1692)
推荐(3)
【原创】VKDebug调试工具的使用
摘要:VKDebug调试工具是Masm32开发包中附带的一个调试工具,在Masm32程序中做输出调试是很方便的。 使用VKDebug很简单,只需像下面这样将debug.inc、debug.lib包含到程序中就可以了:include debug.incincludelib debug.lib 这里要注意的是:VKDebug中的调试宏用到了Windows.inc头文件中定义的常量,以及使用了一些Kernel32.dll和Masm32库中的函数,因此必须在包含debug.inc和debug.lib之前包含windows.inc, kernel32.inc, kernel32.lib, masm32...
阅读全文
posted @
2012-04-09 20:07
克劳德曼
阅读(496)
推荐(1)
【原创】Masm32中使用VC运行时函数(msvcrt.inc)
摘要:Masm32 SDK包中有一个msvcrt.inc头文件和msvcrt.lib导入库文件。这个头文件中的函数是由Masm32爱好者从VC的运行时库中导出整理的,msvcrt.inc头文件开头就说了:“prototypes for EXPORT msvcrt functions”。因此,在Win32汇编中用这个头文件来使用VC运行库的函数对编写Win32汇编程序来说是非常方便的。 从msvcrt.inc中各个函数的原型可以看出,VC运行时中的各个函数名称前都多了一个crt__xxx,crt_xxx的前缀,使用这些函数只需要将msvcrt.inc和msvcrt.lib包含到源代码中,然后...
阅读全文
posted @
2012-04-09 19:18
克劳德曼
阅读(1929)
推荐(1)
【笔记】CPU是如何检测溢出的?
摘要:问题: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汇编语言程序设计》第五版
阅读全文
【笔记】汇编标志位 - FLAGS
摘要:·汇编标志位:------------------------------------------------------------------------------------标志名 标志 1 标志 0------------------------------------------------------------------------------------OF (溢出标志) OV NVDF (方向标志) UP DNIF (中断标志) EI DISF (符号标志位) PL NGZF (零标志) ZR NZAF (辅助进位标志位) AC...
阅读全文
【转载】通用存储器的作用
摘要:通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。表2.1 通用寄存器的主要用途寄存器的分类寄存器主 要 用 途通用寄存器数据 寄存器AX乘、除运算,字的输入输出,中间结果的缓存AL字节的乘、除运算,字节的输入输出,十进制算术运算AH字节的乘、除运算,存放中断的功能号BX存储器指针CX串操作、循环控制的计数器CL移位操作的计数器DX字的乘、除运算,间接的输入输出变址寄存器SI存储器指针、串指令中的源操作数指针DI存储器指针、串指令中的目
阅读全文
【转载】标志(专用)寄存器的作用
摘要:16位CPU内部有一个16位的标志寄存器,它包含9个标志位。这些标志位主要用来反映处理器的状态和运算结果的某些特征。各标志位在标志寄存器内的分布如图2.2所示。1514131211109876543210OFDFIFTFSFZF AF PF CF31…17161514131211109876543210……VMRFNTIOPLOFDFIFTFSFZF AFPFCF图2.2 16位/32位标志寄存器的示意图上面9个标志位可分为二组:运算结果标志位(有背景色的标志位)和状态控制标志位。前者受算术运算和逻辑运算结果的影响,后者受一些控制指令执行的影响。有些指令的执行会改变标志位(如:算术运算指令等)
阅读全文