Win32/64汇编
文章平均质量分 79
G_Spider
Windows虽然乐趣 但易崩溃 GNU/Linux长相平平 成绩优秀 Mac OS魅力动人 成绩平平
BSD本性温顺 默默无闻
展开
-
_ftol2 _ftol2_sse
自己封装一下这两个函数,这样可以使用vc6.0的msvcrt.lib了。原创 2014-05-03 11:41:25 · 4990 阅读 · 3 评论 -
flat assembler fasm 支持OD源码调试
The flat assembleris a fast and efficient self-assembling x86 assembler for DOS, Windows and Linux operating systems. Currently it supports x86 and x86-64 instructions sets with MMX, 3DNow!, SSE up原创 2011-11-28 15:07:00 · 1274 阅读 · 0 评论 -
代码着色测试
代码着色测试<!--.S0 {font-family:'DejaVu Sans Mono'; color:#0; font-size:11pt}.S1 {font-family:'DejaVu Sans Mono'; color:#007F00; font-size:11pt}.S2 {color:#ff0000}.S3 {color:#7F00原创 2011-11-01 10:58:37 · 885 阅读 · 0 评论 -
fasm完成一个简单的FAT12的镜像文件
fasm完成一个简单的FAT12的镜像文件,方便裸机编程,以自己动手写操作系统的FAT12布局为例。;-----------------------------------------------------------------------;--===-- FAT12 image file make By G-Spider;--===-- fasm startOS.asm sta原创 2011-10-24 21:27:47 · 1992 阅读 · 0 评论 -
Software Task-Switching
Software Task-SwitchingFrom alt.os.developmentAll lines preceded by a ">" were written by sefirot. All other lines were written by Kovacs Viktor Peter. > hello,> would you explain the way of s原创 2011-10-27 23:36:02 · 899 阅读 · 0 评论 -
C/H/S与LBA的转换关系
为了与C/H/S寻址模式相兼容,大容量的硬盘一般也支持模拟的C/H/S寻址,此时的C/H/S参数都是模拟出来的,而不是实际的物理值。而且目前大多数的资料、磁盘工具类软件采用的硬盘参数介绍和计算方法,以及数据恢复技术中一般还是使用相对比较简单的C/H/S寻址模式进行定位,因此,应掌握C/H/S与LBA的转换关系。1.C/H/S与LBA的转换规则硬盘系统在写入数据时,是按照从柱面到柱面的方式进原创 2011-10-26 10:56:05 · 8094 阅读 · 3 评论 -
windows 7 x86 中内核模块nt(ntkrpamp 模块)源码学习
windows 7 x86 中内核模块 nt(即 ntkrpamp 模块)的实现:偏移 机器码 指令nt!memset:83c8ce40 8b54240c mov edx,dword ptr [esp+0Ch]83c原创 2011-10-18 19:29:08 · 2544 阅读 · 0 评论 -
简单的窗体透明示例 fasm 汇编
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Fasm AlphaWin.asm; 简单的窗体透明示例 by G-Spider;>>>>>>>>>>>>>>>>>>>>>>>>原创 2011-08-29 17:44:18 · 1485 阅读 · 0 评论 -
设置线程的亲缘性,多线程编程
在openmp中有个比较典型的测试例子cpp_compiler_options_openmp.cpp,展示了for循环中的归约操作, #pragma omp parallel for reduction(+:sum) private(x) 自已也写个多线程的版本,针对In原创 2011-09-13 17:16:30 · 2292 阅读 · 0 评论 -
lock 原子操作
text:7C809806 ; Exported entry 545. InterlockedIncrement.text:7C809806.text:7C809806 ; =============== S U B R O U T I N E =============原创 2011-09-13 11:55:37 · 1676 阅读 · 0 评论 -
fasm 32位转28位算法:remove each byte(Bit 7)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;*--==--* You are given a 32 bit value where the Most Significant原创 2011-09-13 20:18:43 · 912 阅读 · 0 评论 -
fasm 控制台多线程示例
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;*--==--* fasm console MultiThread example;*--==--* By G-Spider原创 2011-09-10 11:59:17 · 977 阅读 · 0 评论 -
一些指令笔记
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%总线锁定指令 LOCK格式:LOCK instruction (指令)说明:为确保不可分割的读/修改/写操作的发生,在某些特殊指令的执行期间置起LOCK#信号。当总线上有多个处理器时,这个信号对保证总线以及所有附加在总线上的内存来说是很重要的,尤其是在一些敏感的操作期间。比如说,当一个“信号灯”正在被修改的时刻。LOCK只能用于下列指令:ADC,ADD,AND,BT mem,reg/immBTS,BTR,BTC,OR mem,reg/immSBB原创 2011-05-07 19:50:00 · 1480 阅读 · 0 评论 -
GotoBlas2内核dgemm之dgemm_beta
经过对最新的GotoBlas2内核的分析,dgemm 分解为四个部分:dgemm_beta、dgemm_i*copy、dgemm_kernel、dgemm_o*copy.目标:以Intel Core2 Duo CPU E8500为平台,重新构建(masm语法)最小的dgemm模块。1.dgemm_beta完成:C=BETA*C的运算。先重构dgemm_beta,再给一个简单的c调用实例原创 2011-06-25 15:46:00 · 2321 阅读 · 0 评论 -
大数库最新进展
<!--.S0 {font-family:'DejaVu Sans Mono'; color:#0; font-size:11pt}.S1 {font-family:'DejaVu Sans Mono'; color:#007F00; font-size:11pt}.S2 {color:#ff0000}.S4 {color:#000000}.S9原创 2011-12-06 19:57:46 · 936 阅读 · 0 评论 -
纯净版fasm 浮点矩阵乘SSE
<!--.S0 {font-family:'DejaVu Sans Mono'; color:#0; font-size:11pt}.S1 {font-family:'DejaVu Sans Mono'; color:#007F00; font-size:11pt}.S2 {color:#ff0000}.S4 {color:#000000}.S6原创 2011-12-10 21:33:13 · 1922 阅读 · 0 评论 -
bochs smp 支持
~/bochs-2.6.2mingw pthread(增加多线程库)$ ./configure -enable-smp --enable-cpu-level=6 --enable-all-optimizations --enable-x86-64 --enable-vmx --enable-avx --enable-sb16 --enable-cdrommakemake in原创 2013-12-09 23:37:24 · 2622 阅读 · 0 评论 -
MmGetPhysicalAddress x86 pae or no pae
; no paent!MmGetPhysicalAddress:8083a918 55 push ebp8083a919 8bec mov ebp,esp8083a91b 8b4d08 mov ecx,dword ptr [ebp+8] ;BaseAddress8083a91e 8bc1原创 2013-09-28 19:38:39 · 1907 阅读 · 0 评论 -
UNICODE_STRING
struct UNICODE_STRING Length UINT16 MaximumLength UINT16 PADDING 4 Buffer PVOIDendsstruc defUNICODE_STRING [udata]{ common local s原创 2013-09-28 13:28:20 · 1372 阅读 · 0 评论 -
fasm Ke386SetIoAccessMap
nt!Ke386SetIoAccessMap:804f8160 8bff mov edi,edi804f8162 55 push ebp804f8163 8bec mov ebp,esp804f8165 57 push edi804f8166 8b7d08原创 2013-09-21 22:41:53 · 1581 阅读 · 0 评论 -
fasm giveio
format PE DLL native 4.0 at 10000hentry DriverEntryinclude 'win32.inc'IOPM_SIZE = 2000h ; sizeof I/O permission map;=================================================================原创 2013-09-12 21:33:19 · 1068 阅读 · 0 评论 -
fasm driver 驱动编程
1. 支持x86,x64的结构定义的统一(指针用PVOID),由此只需要维护一套结构体(对齐用PADDING),如下演示:struct DRIVER_OBJECT Type INT16 Size INT16 PADDING 4 DeviceObject原创 2013-09-09 22:40:56 · 1227 阅读 · 0 评论 -
关于一些透明窗体所需的的函数
效果图: 1.DIB32位, 预乘alphaproc AlphaPreMul uses ebx edi, pBitDst,pDstRect,dwDstWight local dwWight:DWORD,dwHight:DWORD ;--------------------------------------- mov edi,[pBitD原创 2013-08-11 15:47:40 · 1308 阅读 · 0 评论 -
How to use UpdateLayeredWindow with UI Controls like buttons etc?:)
Marc Gregoire said,Wrote on June 17, 2009 @ 12:21 pm In my example I have this device context called hDC which will be used in the call to UpdateLayeredWindow. This is just a 32bit device co原创 2013-08-08 22:32:07 · 1137 阅读 · 0 评论 -
大数copy相关的函数
<!--.S1 {color:#007F00; font-size:10pt}.S2 {color:#ff0000; font-size:10pt}.S4 {color:#000000; font-size:10pt}.S6 {color:#00007F; font-size:10pt}.S8 {color:#46aa03; font-s原创 2013-06-05 18:38:22 · 894 阅读 · 0 评论 -
大数左右移运算
; MP_BIT = 30; MP_NAIL = 32 - MP_BIT; MP_MASK = 3FFFFFFFh ;base 30bit 28~30; mp_limb_t; mpn_rshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt) ; assert (n >=原创 2013-06-05 18:34:25 · 1025 阅读 · 0 评论 -
fasm C-compatible syntax typedef macro
汇编在做c头文件移植的时候,总觉得db dw dd dq的类型有些生硬,不具可读性,并且对于win32,win64的结构需要维护两份。于是写了个fasm的typedef宏(与c的写法相同),可用于结构体定义,数据定义,函数的局部变量local 定义中。 ;---===---;---===---fasm typedef macro by G-Spider @2013;---===--原创 2013-03-13 21:23:37 · 1386 阅读 · 0 评论 -
适于fasm的DirectDraw头文件定义
接上两节,可以将ddraw.h定义为ddraw.inc,如下:;==========================================================================; *; * Copyright (C) Microsoft Corporation. All Rights Reserved.; *; * File:原创 2013-04-05 21:41:41 · 2330 阅读 · 0 评论 -
fasm 定制win32头文件
有了上一节写的typedef宏,觉得相当完美,为什么这么说呢?1. 可读性增强了。如HANDLE2. 32或64的结构只需要一份,因为PVOID可以很好的呈现指针,与c一致。开关:_WIN64 equ FALSE (或者TRUE)3. 结构体定义不再需要多见的?字符如:struct POINT x dd ? y dd ?ends变为struct PO原创 2013-04-05 21:27:17 · 1570 阅读 · 0 评论 -
fasm DirectDraw test
接前三节的头文件,写一个简单的测试:;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;*--==--* fasm directdraw test.;*--==--* By G-Spider;*--==--* fasm ddraw.asm ddraw.exe;>>>>>>>>>>>>>>>>>>>>>>>>原创 2013-04-05 21:47:05 · 1084 阅读 · 0 评论 -
X64对浮点参数的处理
编译:icl /EHa /Zi /Od icc64.c /link /debug#include double myfloat(double a,double b,double c,int d,int e,double g){ int tempInt=rand(); a=a+(double)tempInt; //1+41=42 b=a+1.0+(double)tempInt; //42+1+41=84 c=b+2.0*(double)tempInt; //84+82=16原创 2011-04-30 12:59:00 · 2212 阅读 · 1 评论 -
深入X64的栈桢分配策略
对于X64只支持fastcall调用规则,实测win7下的x64编程,并不一定要16字节对齐,即使是非叶子函数,但最好保证栈桢16字节对齐,即在进入某个函数入口前是16字节对齐的,这样保证了对栈中数据成员的16字节访问是对齐的,如SSE系列需要这个限制. win32/win64统一编程已初见成效,在此探索过程中深有体会,机会编程要不得,特别是关于rsp栈指针的处理,到底应该减多少加多少合适? 由于ml64.exe默认情况下编译出来的有prolog 和epilog 代码. 为了深入rsp的处理细节,在每个函数原创 2011-04-29 20:32:00 · 4565 阅读 · 0 评论 -
快速存拷贝 fast_memcpy
精确拷贝到字节,三种拷贝方式:1. movsd 2.SSE 系列 + 软预取 3.SSE系列+硬预取方式,要注意的是,不是所有的拷贝SSE都更优,正如为了行进100米,是开飞机还是步行咧?嘿嘿。所以,对于小字节量拷贝用movsd、 movsb过渡。 测试平台(CPU-Z): Intel(R) Celeron(R) CPU 2.66GHz 支持的指令集:MMX,SSE(1,2,3) ,EM64T 一级数据缓存:16KB 二级数据缓存:256KB 测试32.1 MB文件存拷贝: _fast_memcpy1 (m原创 2010-12-24 22:35:00 · 4565 阅读 · 0 评论 -
随机数生成方法
<br />当代计算机的创始人约翰.冯.诺依曼曾经说过,任何试图以算法生成随机数据的人都将处于一种两难境地。所谓两难说是指随机性与算法确定性之间是不可能完全统一的。所以我们必须有意识地根据需要伪随机序列的随机性才能达到模拟真随机序列的效果。<br />线性同余伪随机数发生器<br />目前应用最为广泛的均匀分布伪随面数发生器就是线线同余伪随机发生器(LCG)<br />LCG的迭代描述公式为:<br />Xi+1=(a*Xi+c)(mod m) (1)<br />式(1)中有三个参数a,c,m。其中m是一原创 2010-11-02 21:33:00 · 4186 阅读 · 0 评论 -
软件预取调度的距离
<br />Intel优化文档部分翻译 By G-Spider 2010-12-14 不妥之处,欢迎指正。<br />http://blog.csdn.net/G_Spider<br /> <br />Software Prefetch Scheduling Distance<br />软件预取调度的距离<br />Determining the ideal prefetch placement in the code depends on many architecturalparameters,原创 2010-12-14 20:41:00 · 1496 阅读 · 0 评论 -
浮点数冒泡排序
<br />;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$;-=- Double BubbleSort By G-Spider @2010;-=- ml /c /coff sort.asm ;-=- link /subsystem:console sort.obj;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.386.model flat,stdcallinclude user32.inc原创 2010-12-08 18:58:00 · 3081 阅读 · 0 评论 -
7-Zip 压缩与解压库-调用范例
<br />Welcome to the 7-Zip Home!开源站:http://www.7-zip.org/ 感谢Igor Pavlov的开源精神......<br />LZMA,(Lempel-Ziv-Markov chain-Algorithm的缩写),是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是Igor Pavlov,2001年被首次应用于7-Zip压缩工具中,是 2001年以来得到发展的一个数据压缩算法。它使用类似于 LZ77 的字典编码机制,在一般的情况下压缩率比 bz原创 2010-12-06 18:03:00 · 6048 阅读 · 1 评论 -
多精度pi计算 汇编实现
<br />vier Gourdon坛子上的那个算是好的开始的计算pi程序,piclassic.c的程序,我下载了,/o2编译,发现与我在没有改动思路的情形下,仍然比其快一点,当然不能和上面的程序相比。它用时770ms ,我重写了一下计算10000位用时465ms。是重写而不是改写,可见/o2有时也不如人工调优,呵呵。<br />我写这个程序,其效率不是主要学习的东东,主要是体会一下多精度计算的一种思想,用多字节模拟大数据,当然有些3两行的代码或许也可计算pi<br />但很难体会不到这一点。<br />像原创 2010-11-28 20:47:00 · 2072 阅读 · 0 评论 -
DirectShow Win32汇编工程 正式启动 (不断完善中.....)
<br />目的:通过汇编,较轻易的调用DirectShow接口,实现多媒体播放器...<br /> <br />;//------------------------------------------------------------------------------<br />;//<br />;// By G-Spider 2010<br />;//<br />;// Copyright (c) 2010 - 2010. All rights reserved.<br />;//-----原创 2010-10-06 18:58:00 · 1285 阅读 · 3 评论 -
审视WMI的结构,COM调用
;*********************************************************;*--==--* Call WMI (COM Inte**ce) Simple example ;*--==--* By G-Spider 2010.10.5;*--==--* Web:http://blog.csdn.net/G_Spider;*********************************************************充电:1.用标准C编写COM h原创 2010-10-06 18:50:00 · 3261 阅读 · 1 评论