²Ä¤@³¹¡@²Ä¤@­Ó Win64 µ{¦¡¡]¤@¡^

«e¤@³¹¤w¸g³]©w¦n¼¶¼g Win64 ²Õ¦X»y¨¥ªºÀô¹Ò¤F¡A³o¤@³¹´N¥Î²Õ¦X»y¨¥¼g²Ä¤@­Ó¡uµ{¦¡¡v¡AFIRST¡C¦ý FIRST °õ¦æ¤§«á¨Ã¤£·|²£¥Íµøµ¡¡AWindows ¤]¨S¦³¥ô¦ó¤ÏÀ³´Nµ²§ô¤F¡CFIRST ªº°ß¤@¥Øªº¬O¤¶²Ð²Õ¦X»y¨¥ªº³Ì°ò¥»·§©À¡C

²Ä¤@­Ó Win64 µ{¦¡¡GFIRST

¥Îµ{¦¡»y¨¥©Ò¼¶¼gªºµ{¦¡¡A¤£½×¬O C/C¡Ï¡Ï¡BPython¡K¡K³£¬O¯Â¤å¦rÀÉ¡AºÙ¬°¡u­ì©lµ{¦¡¡v¡]source code¡A¤]¥i½Ķ¬°­ì©l½X©Î·½½X¡^¡A¹q¸£¬O¬Ý¤£À´ªº¡A¦]¬°¹q¸£¥u¯à¬Ý±oÀ´¤@³s¦êªº¹s»P¤@¡C©Ò¥H¡A­ì©lµ{¦¡¥²¶·¸g¹L²ÕĶ»P³sµ²ªº¹Lµ{¡A¤~¯à§â¯Â¤å¦r¡u½Ķ¡v¦¨¥i°õ¦æÀÉ¡]°ÆÀɦW³q±`¬O EXE¡^¡C¥i°õ¦æÀɤºªº«ü¥O¬O¤@³s¦êªº¤G¶i¦ì¼Æ¡A³o¤~¬O¹q¸£¬Ý±oÀ´¨Ã¥B¯à°õ¦æªº«ü¥O¡C

¹ï²Õ¦X»y¨¥¨Ó»¡¡A¨ä­ì©lµ{¦¡ªº°ÆÀɦW³q±`¬O ASM¡C©³¤U´N¨Ó¬Ý¬Ý²Õ¦X»y¨¥ªº­ì©lµ{¦¡¡AFIRST.ASM ªøªº¤°»ò¼Ë¤l¡H

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
OPTION  CASEMAP:NONE
OneTwo  EQU     12345h
;***************************************
.DATA
Number  DQ      OneTwo
Sum     DQ      111222h
;***************************************
.CODE
;---------------------------------------
main    PROC
        mov     rax,OneTwo+0b000000h
        add     rax,Number
        push    rax
        pop     Sum
main    ENDP
;***************************************
END

­º¥ý¥Î°O¨Æ¥»©Î UltraEdit 32 µ¥¤å®Ñ³B²z¾¹¡A¿é¤J¤W­±¤º®e¡AµM«á¥H¡uANSI¡v©Î¡uASCII¡vªº½s½X¤è¦¡¡]¤£­n¥Î UTF-8 ©Î¨ä¥L½s½X¤è¦¡¦sÀÉ¡^¡AÀx¦s¦b¡uE:\HomePage\SOURCE\Win64\FIRST\FIRST.ASM¡vÀÉ®×ùØ¡C²Ä¤G¨B¡A¶}±Ò¡u©R¥O´£ÃѦr¤¸¡v¡A¿é¤J¥H¤U«ü¥O´N¯à²£¥Í FIRST.EXE¡C³Ì«á°õ¦æ FIRST.EXE¡C

¦b¤W­z¹Lµ{¤¤¡A¦pªG¨S¦³¿ù»~°T®§¡Aªí¥Ü¤w¦¨¥\»s§@¦n FIRST.EXE¡A·|¦b¡uE:\HomePage\SOURCE\Win64\FIRST\¡v¤l¥Ø¿ý¤º¥Í¦¨¤@­Ó FIRST.EXE ¥i°õ¦æÀɮסC¦pªG­n°õ¦æ¥i°õ¦æÀÉ¡A¶È¶·¿é¤J¥DÀɦW¡A¥B¤j¤p¼g¤£©ë¡A¨£¤W­±¹Lµ{ªº³Ì«á¤@¦æ©ÒÅã¥Üªº¡C¡]¦³ÃöÀɮצWºÙªº³W«h¡A½Ð°Ñ¾\ DOS ²Õ¦X»y¨¥ªþ¿ý¤»¡^

¨ì¦¹¨Ã«D´Nµ²§ô¤F¡AÁÙ­n¬Ý¬Ý°õ¦æµ²ªG¬O§_¦p¹w´Á¡A¦pªG¬O¡A´Nªí¥Ü¦¹µ{¦¡¤w¼¶¼g§¹¦¨¡F¦pªG¤£¬O¡Aªí¥Üµ{¦¡¥i¯à¥Ç¤FÅÞ¿è¤Wªº¿ù»~©Î¨ä¥L¿ù»~¡A¥²¶·­«·sÀˬd¨º¨à¥X¿ù¤F¡C³o®É¥i¯à­n¦^¨ì­ì©lµ{¦¡¥J²ÓÀˬd¿ù»~¨Ã¤@¤@­×¥¿¡Aª½¨ì¯à¥¿½T²ÕĶ¡B³sµ²¨Ã°õ¦æ¡A¦P®ÉÁÙ¯à²Å¦X¹w´Áµ²ªG¡A¤~ºâ¬O§¹¦¨¾ã­Ó¼¶¼gµ{¦¡ªº¹Lµ{¡C¤U¹Ï¬O¨ä¬yµ{¡G¤W¹Ï¤¤ªº¡u³sµ²OBJÀÉ¡v¡Aªº¥Øªº¬O­n§â§Ú­Ì¼¶¼g¦¨ªºµ{¦¡¡A»P¨ä¥Lµ{¦¡®w³sµ²°_¨Ó¡C¤@¯ë¦Ó¨¥¡A¶}µoµ{¦¡ªº¤u¨ã¡A¹³ Visual Studio¡A³£·|´£¨Ñ³\¦hµ{¦¡¤ù¬q¨Ñµ{¦¡¶}µo¤H­û¨Ï¥Î¡C¨Ï¥Î¤è¦¡´N¬O§Q¥Î³sµ²¾¹¡A¨Ò¦p LINK.EXE¡A§â§Ú­Ì»s§@¥X¨Óªº OBJ ÀÉ»P¥L­Ì´£¨Ñªºµ{¦¡®w³sµ²¡C

¤W­±²ÕĶ»P³sµ²ªº¹Lµ{¤¤¡A¨Ï¥Î ML64.EXE ²ÕͮɡA¦pªG²Õͦ¨¥\¡AML64.EXE ·|¦Û°Ê°õ¦æ LINK.EXE ¶i¦æ³sµ²¡CML64.EXE ·|¥ý¨ì·í«e¥Ø¿ý¤¤´M§ä LINK.EXE¡A¦pªG§ä¤£¨ì«K·|¨ì PATH ©Ò³]©wªº¥Ø¿ý¥h§ä¡A³o¤]´N¬O­n¥ý³]¦n¡upath E:\masm64\bin64;%path%¡vªº½t¬G¡C

¥Î masm64.bat §å¦¸Àɲ¤Æ²ÕĶ»P³sµ²

¦pªG¨C¦¸²ÕĶ¤Î³sµ²­ì©l½X®É¡A³£­n¿é¤J«e¥|¦æ«ü¥O³]©w¦n²ÕĶ»P³sµ²©Ò»Ý³]©w¡A«D±`³Â·Ð¡C¨Æ¹ê¤W¡A³o¥|¦æ«ü¥O¥u¶·°õ¦æ¤@¦¸³]©w¦n¤§«á¡A¦A­n²ÕĶ©Î³sµ²¡A¤£¶·¦A¦¸³]©w¡C©Ò¥H¡A¬°¤F§ïµ½®Ä²v¡A¥i¥H¥Î¤å®Ñ³B²z³nÅé¡A¨Ò¦p°O¨Æ¥»¡BUltraEdit 32 µ¥¡A¿é¤J¤U­±¤º®e¡A¨ÃÀx¦s¦b¡uC:\Users\wanker\masm64.bat¡v§å¦¸ÀÉùØ¡C¨C¦¸¤@¶i¤J¡u©R¥O´£¥Ü¦r¤¸¡v¡A´N°õ¦æ¡umasm64.bat¡v¡A·|¤è«K³\¦h¡C©³¤U¬O¡umasm64.bat¡vªº¤º®e¡G¡]¦³Ãö§å¦¸Àɪº»¡©ú¡A½Ð°Ñ¦Ò DOS ²Õ¦X»y¨¥ªþ¿ý¤»¡^

path E:\masm64\bin64;%path%
set link=/subsystem:windows /entry:main
cd E:\HomePage\SOURCE\Win64
E:

¦Ò¼{¨ì©¹«á­n¥Î²Õ¦X»y¨¥¼¶¼g³\¦h¤£¦Pªºµ{¦¡¡A¦U¦Û¦s©ñ¦b¤£¦P¥Ø¿ýùØ¡A©Ò¥H²Ä¤T¦æ§ï¦¨¡ucd E:\HomePage\SOURCE\Win64¡v¡C

¦³¤F§å¦¸Àɤ§«á¡A¶}±Ò©R¥O´£¥Ü¦r¤¸¡A¥u»Ý¿é¤J masm64¡A«ö¤U Enter Áä¡A´N¯à¦Û°Ê³]¦n²ÕĶ»P³sµ²©Ò»ÝÀô¹Ò¡C¦p¤U¡A¥u»Ý¿é¤J¶À¦rªº³¡¤À§Y¥i¡A¦pªG­n²ÕĶ»P³sµ² FIRST.ASM¡A¥ý¤Á´«¶i FIRST ¥Ø¿ý¡A¦A¿é¤J¡uml64 first.asm¡v§Y¥i¡C³o¼Ë¬O¤£¬O«Ü¤è«K©O¡H

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\wanker>masm64

C:\Users\wanker>path E:\masm64\bin64;C:\Windows\system32;C:\Windows;C:\Windows\S
ystem32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\


C:\Users\wanker>set link=/subsystem:windows /entry:main

C:\Users\wanker>cd E:\HomePage\SOURCE\Win64

C:\Users\wanker>e:

E:\HomePage\SOURCE\Win64>cd first

E:\HomePage\SOURCE\Win64\FIRST>ml64 first.asm ¡÷©¹«á­n²ÕĶ¡B³sµ²¡A¥u¶·¿é¤J¡uml64 first.asm¡v§Y¥i

¨Æ¹ê¤W¡AFIRST ¨Ã¤£¬O§¹¾ãªºµ{¦¡¡A¦]¬°¥¦µ²§ôµ{¦¡ªº¤èªk¿ù»~¡C­nµ²§ô Win64 À³¥Îµ{¦¡¡A¥²¶·©I¥s Win64 API¡A²Ä¤G³¹¦A»¡©ú¡C²{¶¥¬q¥u¶·ª¾¹D¡AFIRST ÁöµM¤£·|¤Þ°_·í¾÷¡A¦ý¨Ã«D¥¿½Tªº¼gªk¡C¨º¬°¦óÁÙ­n¤¶²Ð FIRST ©O¡H¨º¬O¦]¬°¦pªG­n¤¶²Ð§¹¾ã¥B¥¿½Tªºµ{¦¡¡A¨º»ò¥»³¹ªº½g´T·|«Ü¦h¡A¹ï©óªì¾Ç²Õ¦X»y¨¥ªº¤H¨Ó»¡¡A¬O«Ü¦Y¤Oªº¡C©Ò¥H³o¤@³¹¥u¬O¥Î¨Ó¤¶²Ð Win64 ²Õ¦X»y¨¥ªº¬[ºc¡B°O¾ÐÅé¦ì§}¡B°ïÅ|µ¥Æ[©À¡A¨Ã¥B¤]·|¤¶²Ð MOV¡BADD¡BPUSH¡BPOP µ¥´X­Ó x64 «ü¥O¡C


¸ÑªR FIRST

©³¤Uªº¤º®e¬O¤p¤ì°¸³v¦æ¸Ñ»¡ FIRST.ASM¡C¦ý¦]¬°ªì¾ÇªÌ¥²©w¦³³\¦hÆ[©À¡A¹³­è­è´£¨ìªº°O¾ÐÅé¦ì§}¡B°ïÅ|µ¥¡A¬Oªì¦¸¹J¨ì¡A¨Ã¤£ÁA¸Ñ¡A©Ò¥H·|¥ý¸Ñ»¡³o¨ÇÆ[©À¡Aµ¥©ú¥Õ¤§«á¡A¦A¦^¨Ó¬Ý­ì©lµ{¦¡´N·|ÁŵM¶}®Ô¡C

°²«ü¥O¡GOPTION

FIRST.ASM ²Ä¤@¦æ¬O¡uOPTION CASEMAP:NONE¡v¡A¡uOPTION¡v¬O²Õ¦X»y¨¥ªº«O¯d¦r¡A¤]¬O¤@ºØ°²«ü¥O¡A¥¦¥i¥H³]©w¦h¨Æ±¡¡A¤£¹L¦b³oùضȤ¶²Ð¡uOPTION DOTNAME¡v»P¡uOPTION CASEMAP:maptype¡v¡C

¡uOPTION DOTNAME¡v¬OÅý ML64 ¤¹³\ÅܼƦW¡B°Æµ{¦¡¦W¡K¡Kªº²Ä¤@­Ó¦r¬O¡u.¡v¡F¦pªG¬O¡uOPTION NODOTNAME¡v¡A´N¤£¤¹³\ÅܼƦW©Î±`¼Æ¦Wµ¥¥H¡u.¡v¶}ÀY¡C¦pªGµ{¦¡¤¤¨S¦³³]©w¡A¨º»ò¤º©w­È¬O¡uNODOTNAME¡v¡C

¡uOPTION CASEMAP:maptype¡v«ü¥Ü ML64.EXE ²Õ;¹¬O§_§â¤j¼g¸ò¤p¼gªº­^¤å¦r¥À¬Ý¦¨¬O¬Û¦Pªº¡Cª`·N¡A³oºØ¬O§_°Ï§O¤j¤p¼g¶È¾A¥Î©ó¨Ï¥ÎªÌ©w¸qªº¦WºÙ¡A¨Ò¦pÅܼƦW¡B°Æµ{¦¡¦W¡K¡Kµ¥¡F¦Ó«O¯d¦r¬O¤£¨ü¡uOPTION CASEMAP¡vªº¼vÅT¡Cmaptype ¦³¨âºØ¿ï¾Ü¡G

  1. NONE¡G¡uOPTION CASEMAP:NONE¡v·|¨Ï²Õ;¹«O¯dÅܼơB°Æµ{¦¡¦WºÙªº¤j¤p¼g¡A¦Ó¨Ï¤j¼g»P¤p¼gµø¬°¤£¦Pªº¦WºÙ¡C¨Ò¦p°²³]¦b­ì©lµ{¦¡¤¤¡A¥ý«á©w¸q¡uSum¡v¡B¡usum¡v¨â­ÓÅܼơA¥B­ì©lµ{¦¡«e­±¤w«ü©w¡uOPTION CASEMAP:NONE¡v¡A¨º»ò²Õ;¹µø¬°¤£¦PªºÅܼơF¦pªG¨S«ü©w¡uOPTION CASEMAP:NONE¡v¡A¨º´N·|µo¥ÍÅܼƭ«½Æ©w¸qªº¿ù»~¡C¦pªG¨S¦b­ì©lµ{¦¡¤¤«ü©w¡uOPTION CASEMAP:NONE¡v¡A¤]¥i¥H¦b²ÕĶ®É¥Î¡u/Cp¡v«ü©w¡A¦Ó¹F¨ì¦P¼Ë®ÄªG¡C¦b Win64 §@·~¨t²Î¤¤¡AÅܼơB°Æµ{¦¡¡K¡K¬Æ¦Ü Win64 API ¦WºÙ³£°Ï¤À¤j¤p¼g¡A¦]¦¹¦b¼¶¼g Win64 µ{¦¡®É¡A¥²©w­n³]©w¡uOPTION CASEMAP:NONE¡v©Î²ÕĶ®É¿ï¥Î¡u/Cp¡v©Î¡u-Cp¡v¿ï¶µ¡C
  2. NOTPUBLIC¡G¥u¦³«Å§i¬° PUBLIC ªºÅܼƩΰƵ{¦¡¤~«O¯d¤j¤p¼g¡A¨ä¾l³£·|Âà´«¦¨¤j¼g¡C¦pªG¨S¦b­ì©lµ{¦¡¤¤«ü©w¡uOPTION CASEMAP:NOTPUBLIC¡v¡A¤]¥i¥H¦b²Õͮɫü©w¡u/Cx¡v©Î¡u-Cx¡v¿ï¶µ¡A¦Ó¦³¦P¼Ë®ÄªG¡C§âÅܼƩΰƵ{¦¡«Å§i¦¨ PUBLIC ªº¥Øªº¡A¬OÅý³oÃþÅܼƩΰƵ{¦¡¥i¥HÅý¨ä¥Lµ{¦¡¨Ï¥Î¡C¦pªG¨S¦³³]©w¡uOPTION CASEMAP¡v¡A¤º©w­È¬O¡uOPTION CASEMAP:NOTPUBLIC¡v¡C

°²«ü¥O¡GEQU »P =

EQU »P = ³£¥Î¨Ó§â¤@­Ó²Å¸¹«Å§i¬°¤@­Ó¾ã¼Æ¡A¦Ó¨Ï±o¨ä«áªºµ{¦¡¯à¥Î¦¹²Å¸¹¥N´À¸Ó¾ã¼Æ¡C¥¦­Ìªº»yªk¬O¡G

²Å¸¹    EQU     ºâ³N¹Bºâ¦¡
²Å¸¹    =       ºâ³N¹Bºâ¦¡

¦¹³Bªººâ³N¹Bºâ¦¡¬O«ü¥i¥H¬O¥Îºâ³N­pºâªº¼Æ¾Ç¦¡¤l¡A¨ä¹Bºâ¤¸À³¸Ó³£¬OÅܼƩμƭȡC¹³©³¤Uªº¨Ò¤l¡A«Å§i¨â­Ó²Å¸¹¡A¤@­Ó¯x§Îªº length¡]ªø¡^¬° 12¡Awidth¡]¼e¡^¬° 5¡G

length  EQU     12
width   EQU     5
area    EQU     length*width

¦]¬°Áä½L¤W¨S¦³¡Ñ²Å¸¹¡A©Ò¥H¥Î * ¥Nªí­¼¸¹¡C³Ì«á area¡]­±¿n¡^·|µ¥©ó 60¡C

EQU »P = ªº®t§O¦³¤G¡G

  1. ¥H EQU «Å§i«áªº²Å¸¹µLªk§ó§ï¨ä­È¡F¦ý¬O¥H = «Å§iªº²Å¸¹¥i¥H§ó§ï¨ä­È¡C
  2. EQU ¤]¥i¥H§â¤@­Ó²Å¸¹«Å§i¬°¦r¦ê¡F¦ý = ¤£¯à¡C

¦pªG­n§â²Å¸¹«Å§i¬°¦r¦ê¡A¨ä»yªk¬O

²Å¸¹    EQU     <¦r¦ê>

ÁöµM¥H EQU §â¬Y­Ó²Å¸¹«ü©w¬°¬Y¼Æ¡A¸Ó²Å¸¹µLªk­×§ï¬°¥t¤@­Ó¼Æ­È¡F¦ý¬O¥H EQU §â¬Y­Ó²Å¸¹«ü©w¬°¬Y¦r¦ê¡A«o¬O¥i¥H­×§ï¦¨¥t¤@­Ó¦r¦ê¡C

¥H³o¨â­Ó°²«ü¥O«Å§i²Å¸¹¡A¦³¨â­Ó¦n³B¡G

  1. ­×§ïµ{¦¡«Ü¤è«K¡G°²³]¦bµ{¦¡¤¤¦³­Ó±`¼Æ¡A«Ü±`¥Î¨ì¡A¥H­P©ó¥X²{©óµ{¦¡¦U³B¡C´N¥i¥H¥Î EQU «Å§i¥H¤@­Ó²Å¸¹¥N´À±`¼Æªº¼Æ­È¡A¸U¤@­þ¤Ñ³o­Ó±`¼Æ­n§ó°Ê¡A¥u»Ý­n­×§ï¥Î EQU «Å§iªº¦a¤è´N¥i¥H¤F¡C
  2. ¼W¥[¥iŪ©Ê¡G¥H¦³·N¸qªº²Å¸¹¦WºÙ¥N´À¼Æ­È¡A¥²µM¯àª¾¹D¨ä¥Nªíªº·N¸q¡C

¦b FIRST.ASM ªº²Ä¤G¦æ¬O¡uOneTwo EQU 12345h¡v¡A·N«ä¬O§â 12345h ¥Î OneTwo ²Å¸¹¥N´À¡A©¹«áªºµ{¦¡¤¤¹J¨£ OneTwo ´N¬O 12345h¡A¦Ó 12345h ¬O¤Q¤»¶i¦ì¼Æ­È¡C¦b²Õ¦X»y¨¥¤¤¡A­nªí¥Ü¤Q¤»¶i¦ì¼Æ¡A´N¦b¸Ó¼Æ­È¤§«á¥[¤W¡uh¡v©Î¡uH¡v¡F¤Q¶i¦ì¼Æ«h¦b¼Æ­È«á­±¥[¤W¡ud¡v©Î¡uD¡v¡A¤]¥i¥H¬Ù²¤¡A³o¬O¤º©wªº¡F¤K¶i¦ì¼Æ«h¦b¼Æ­È«á­±¥[¤W¡uo¡v©Î¡uO¡v¡F¤G¶i¦ì¼Æ«h¥[¤W¡ub¡v©Î¡uB¡v¡C¦pªG§A¤£¼ô±x¨ä¥L¶i¦ìªk¡A½Ð¸Ô¾\ DOS ²Õ¦X»y¨¥ªþ¿ý¤G¡A¤×¨ä¬O¤Q¤»¶i¦ì¡A±N·|«D±`ÀWÁcªº¨Ï¥Î¡C

¦b FIRST ¸Ì¦³¨â³B¦a¤è¥Î¨ì 12345h¡A©Ò¥H¥Î OneTwo ¨Ó¥N´À¡C¦pªG­n­×§ï³o­Ó¼Æ­È¡A¨º»ò¥u¶·§â 12345h §ï¦¨¨ä¥L¼Æ§Y¥i¡A¤ñ¸û¤è«K¡C·íµM¦b¤pµ{¦¡¤¤¡A¬Ý¤£¥X¨Ó³o¼ËªºÀuÂI¡A¦ý¦b¤jµ{¦¡¤¤´N«Ü©úÅã¤F¡C

°²«ü¥O¡G; »P COMMENT

FIRST.ASM ²Ä¤T¦æ¬O¡u;¡v¡A¨ä«á¬O¬P¸¹¡C¤Z¬O¦b¡u;¡v¤§«áªº¤å¦r³£·|³Q ML64.EXE ©Ò©¿²¤¡A¥i¥H¼g¤U¥ô·N¤å¦r¡A«Ü¾A¦X·í¦¨µù¸Ñ¡C¡u;¡v¥i¥H¦b¤@¦æªº¶}ÀY¡A¤]¯à¦b¨ä¥L¦ì¸m¡F¤£½×¦b­þ¨à¡A¦b¡u;¡v¤§«á¨ì¦¹¦æªºµ²§ô¡A³£·|³Q ML64.EXE ©¿²¤¦Ó·í¦¨µù¸Ñ¡C

µù¸Ñ¬OÅý¤H¡]¥]§t³]­p³o­Óµ{¦¡ªº¤H»P§O¤H¡^ª¾¹D¡A³o¤@¦æ©Î³o´X¦æµ{¦¡ªº§@¥Î¡AÁA¸Ñµ{¦¡¹B§@¡A¶i¦Ó­×§ï©Î°£¿ù¡Cµ{¦¡³]­p®vÀ³¾¨¶q¯d¤Uµù¸Ñ¡A¥H«K¤é«á­×§ï¡C§Y¨Ï¦b§A½s¼gµ{¦¡ªº·í¤U¡A«Ü²M·¡¦UºØ²Ó¸`¡F¦ý¹L¤F´X¶g¡B´X­Ó¤ë´N·|²H§Ñ¡A¦]¦¹¤£¥i¤£¯d¤Uµù¸Ñ¡C¼g¤Uªºµù¸Ñ³Ì¦n¯à»¡©úºtºâªk¡B©Ò¥Îªº­ì²z¡BÅܼƩҥNªíªº·N¸q¡K¡K©Î¬O·í®Éªº·Qªkµ¥µ¥¡A¶V¸Ô²Ó¶V¦n¡F¤£­n¼g¤@¨ÇµL·N¸qªºµù¸Ñ¡A¨Ò¦p¤U­±ªºµù¸Ñ¬O¨S¦³·N¸qªº¡G

;***************************************    ;³o¬Oµù¸Ñ

¦³®Éµù¸Ñ¤Óªø¡A¥²¶·¨Ï¥Î¦n´X¦æ¤å¦r®É¡A¥i¥H¥Î COMMENT ¨Ó·í¦¨µù¸Ñ¡ACOMMENT ªº»yªk¬O¡G

COMMENT ¤À¹j¦r¤¸
µù¸Ñ¤å¦r
¤À¹j¦r¤¸

¦b COMMENT ¤§«áªº¤À¹j¦r¤¸¥i¥H¬O¥ô·N¦r¤¸¡A²Õ;¹·|©¿²¤¦¹¤À¹j¦r¤¸¤§«áªº¤å¦r¡A©Ò¥H³o¨Ç¤å¦r¥i¥H°µ¬°µù¸Ñ¡Fª½¨ì¦A¦¸¥X²{¸Ó¤À¹j¦r¤¸¡Aªí¥Üµù¸Ñµ²§ô¡C¤À¹j¦r¤¸¤£¥i¥H¥X²{¦bµù¸Ñ¤å¦r¤¤¡A°²¦p³o¼Ëªº¸Ü¡A²Õ;¹·|»{¬°µù¸Ñµ²§ô¤F¡A¦Óµo¥Í¿ù»~¡Cµù¸Ñ©ñ¦b¨â­Ó¤À¹j¦r¤¸¤§¶¡¡A¥i¥H¦³³\¦h¦æ¡A¥B«e­±¤£»Ý­n¥[¤W¡u;¡v¡C

¦r¤¸¡]character¡^¬O«ü¥i³Q¹q¸£½s½X¡BÀx¦s¡B³B²zªº³Ì¤p²Å¸¹³æ¦ì¡C¨Ò¦p¡uA¡v¬O¦r¤¸¡A¥¦ªº½s½X¬O 41h¡A¤]´N¬O¥Î¼Æ­È 41h ¥h¥N´À¡uA¡v¡C¦]¬°¹q¸£¥u¯à³B²z¼Æ­È¡A©Ò¥H¥²¶·§â¤å¦r¥[¥H½s½X¶i¦ÓÅý¹q¸£¯à³B²z¡BÀx¦s¡CCOMMENT ªº¤À¹j¦r¤¸¡A¥i¥H¬O¥ô·N¦r¤¸¡F¦ý¬O³Ì¦n¨Ï¥Î¯S®í²Å¸¹¡A¹³¡u#¡v¡B¡u@¡v¡K¡K¡A³Ì¦n¤£­n¨Ï¥Î­^¤å¦r¥À©Îªü©Ô§B¼Æ¦r¡A°£«D½T©wµù¸Ñ¤å¦r¤¤¨S¦³¥¦­Ì¡C

FIRST.ASM ²Ä¤T¦æ¬O¡u.DATA¡v¡A­nÁA¸Ñ¨ä·N¸q¡A»Ý¥ý©ú¥Õ¡u°Ï¬q¡v¡]section¡^¡C

°Ï¬q¡]Section¡^

²³æªº»¡¡Aµ{¦¡¬O³B²z¸ê®Æªº¤èªk¡A©Ò¥Hµ{¦¡¤º·|¦³¸ê®Æ¡A·|¦³³B²zªº¤èªk¡C¨Ò¦pÅý CPU ¹Bºâ 2¡Ï3¡×5¡A2 »P 3 ¬O¸ê®Æ¡A¡u¡Ï¡v©M¡u¡×¡v¬Oµ{¦¡½X¡C²{¥Nªºµ{¦¡¡A³£§â¸ê®Æ¶°¤¤¦b¤@°_¡AºÙ¬°¸ê®Æ°Ï¬q¡]section¡^¡Fµ{¦¡½X¤]¶°¤¤¦b¤@°_¡A©ñ¦b¥t¤@°Ï¬q¡AºÙ¬°µ{¦¡½X°Ï¬q¡C

¦Ó Win64 µ{¦¡¤¤¡A¥i¥H¤À¦¨¤TºØ°Ï¬q¡G¸ê®Æ°Ï¬q¡Bµ{¦¡½X°Ï¬q©M°ïÅ|°Ï¬q¡]µy«á¤¶²Ð¡^¡C¤@­Ó°Ï¬q¶}©lªº¦a¤è¡A´N¬O¥t¤@­Ó°Ï¬qªºµ²§ô¤§³B¡A¦]¦¹¤£¥²¼g¥X°Ï¬q¦b­þ¨àµ²§ô¡C

°²«ü¥O¡G.DATA »P .CODE

µ{¦¡½X°Ï¬q¥Î¡u.CODE¡v«Å§i¡F¸ê®Æ°Ï¬q¦³¤TºØ¡A¤À§O¥Î¡u.CONST¡v¡B¡u.DATA¡v©Î¡u.DATA?¡v«Å§i¡F°ïÅ|°Ï¬q¦b Win64 µ{¦¡¤¤¤£¶·«Å§i¡A¥Ñ¨t²Î³]©w¡C³o¨Ç«Å§i°Ï¬qªº°²«ü¥O¡A¤£°Ï¤À¤j¤p¼g¡A¥ç§Y«Å§iµ{¦¡½X°Ï¬q¥Î¡u.CODE¡v¥i¥H¡A¥Î¡u.code¡v¤]¥i¥H¡C¤Uªí¬O«Å§i°Ï¬qªº¤èªk¡Aªí¤¤ªº²Ä¤GÄæ¬O«Å§i«á°Ï¬q¦WºÙ¡A¬O²Õ;¹¹w³]ªº¡C

«Å§i¦WºÙ»¡¡@¡@©ú
.CODE_TEXTµ{¦¡½X°Ï¬q¡A³q±`·|¦³³\¦h x64 «ü¥O¤Î»P¤§°t¦Xªº°²«ü¥O¡C
.CONSTCONST¦s©ñ±`¼Æ¸ê®Æªº°Ï¬q¡A¦b³oºØ°Ï¬q¤ºªº¸ê®Æ¥u¯àŪ¨ú¤£¯à§ó§ï¡C
.DATA?_BBS¦s©ñÅÜ¼Æ¸ê®Æªº°Ï¬q¡A¦b³oºØ°Ï¬q¤ºªº¸ê®Æ¥i¥HŪ¨ú¤]¥i¥H§ó§ï¡F¦¹¥~¦b³o°Ï¬q©w¸qÅܼơA¤£¥²³]©wªì©l­È¡A§Y¨Ï³]©w²Õ;¹¤]·|¨Ï¨äÅܦ¨ 0¡C
.DATA_DATA¦s©ñÅÜ¼Æ¸ê®Æªº°Ï¬q¡A¦b³oºØ°Ï¬q¤ºªº¸ê®Æ¥i¥HŪ¨ú¤]¥i¥H§ó§ï¡F¦¹¥~¦b³o°Ï¬q©w¸qÅܼơA¥i¥H³]©wªì©l­È¡A¤]¥i¥H¤£³]¡C¦pªG³]©wªì©l­È¡A²Õ;¹¤£·|§ïÅÜ¥¦¡C
.STACK°ïÅ|°Ï¬q¡A­ì©l½X¤º¤£³]©w¡A§_«hµo¥Í¿ù»~¡A¥¦¥²¶·¥Ñ¨t²Î³]©w¡C

FIRST.ASM ¤¤ªº²Ä¤T¡B¤C¡B¤Q¤»¦æ¬Oµù¸Ñ¡A¦Ó¥B¾ã¦æµù¸Ñ¡C³o¼Ë§@ªº¥Øªº¡A¥u¬O¬°¤F°Ï¹j¨â­Ó°Ï¬q¡A¥H¤è«K¾\Ū¡A¨S¦³¯S§Oªº¥\¥Î¡C§AÁÙ¥i¥H¬Ý¨£¡A§@¬°²Ä¤@­Óµ{¦¡¡AFIRST.ASM ªº­ì©lµ{¦¡¥u¦³¨â­Ó°Ï¬q¡A¤À§O¦b²Ä¥|¡B¤K¦æ«Å§i¤F¸ê®Æ°Ï¬q»Pµ{¦¡½X°Ï¬q¡A¥i»¡¬Û·í²³æ¤F¡C

FIRST.ASM ¦b²Ä¥|¦æ«Å§i¡u.DATA¡v¡A´Nªí¥Ü¸ê®Æ°Ï¬q±q³o¨à¶}©l¡A©Ò¥H²Ä¤­¡B¤»¨â¦æ¬O¸ê®Æ°Ï¬q¡C±µ¤U¨Óªº²Ä¤C¦æ¬Oµù¸Ñ¡A©¿²¤¥¦¡C²Ä¤K¦æ«Å§i¡u.CODE¡v¡Aªí¥Üµ{¦¡½X°Ï¬q±q³o¨à¶}©l¡A¤]¥Nªí¸ê®Æ°Ï¬q¦b³o¨àµ²§ô¡Cµ{¦¡½X°Ï¬q±q¶}©l³B¤@ª½¨ì²Ä 17 ¦æµ{¦¡µ²§ô¡A³£¨S¦³¨ä¥L«Å§i°Ï¬qªº°²«ü¥O¡A©Ò¥Hµ{¦¡½X°Ï¬q¤@ª½©µ¦ù¨ìµ{¦¡µ²§ôªº¦a¤è¡C

FIRST.ASM ²Ä¤­¡B¤»¦æ«D±`¬Û¦ü¡A¥¦­Ì©w¸q¤F Number¡BSum ¨â­ÓÅܼơA¨ä¤¤ªº DQ ¬O°²«ü¥O¡A¥t¥~ÁÙ¦³ DB¡BDW¡BDD »P DQ Ãþ¦ü¡A¥¦­Ì³£»P¸ê®ÆÃþ«¬¡]data type¡^¦³Ãö¡C

¸ê®ÆÃþ«¬¡]Data Type¡^

¸ê®ÆÃþ«¬¬O§i¶D¹q¸£¡A³o¥÷¸ê®Æ¡u¬O¤°»ò¼ËªºªF¦è¡v¥H¤Î¡u¥i¥H«ç»ò¨Ï¥Î¡v¡A¨Ò¦p¥e¥Î¦h¤Ö¦ì¤¸²Õªº°O¾ÐÅé¡B¦p¦ó¸ÑŪ³o¨Ç¦ì¤¸¡]¬O¾ã¼Æ¡B¦r¦êÁÙ¬O¯BÂI¼Æ¡^¡B¥i¥H«ç»ò¹Bºâ¡]°µ¥|«h¹Bºâ¡AÁÙ¬O¤ñ¸û¡A©Î¬O·í°µ¦ì§}¨Ï¥Î¡^¡C¦b Win64 ²Õ¦X»y¨¥¤¤¡A³Ì±`¨£ªº¸ê®ÆÃþ«¬¦³¾ã¼Æ¡B¦r¦ê¡C

°²«ü¥O¡GDB¡BDW¡BDD¡BDQ

²Õ¦X»y¨¥¤¤¡A¦pªG­n©w¸q¾ã¼Æªº¸ê®ÆÃþ«¬¡A¥i¥H¥Î¡uDB¡v¡B¡uDW¡v¡B¡uDD¡v¡B¡uDQ¡v¥|ºØ°²«ü¥O¡A¨Ì·Ó©Ò¨Ï¥Îªº¾ã¼Æ½d³ò¦Ó©w¡A¨£¤Uªí¡G

°²«ü¥O¦P¸q°²«ü¥O¦WºÙªø«×
¡]¦ì¤¸²Õ¡^
¦ì¤¸¼Æ©Ò¯àªí¥Üªº¾ã¼Æ½d³ò¤¤¤å
DBBYTE¦ì¤¸²Õ180¡ã255¨â¦Ê¤­¤Q¤­
DWWORD¦r²Õ2160¡ã65,535¤»¸U¤­¤d¦h
DDDWORDÂù¦r²Õ4320¡ã4,294,967,295¥|¤Q¤G»õ¦h
DQQWORD¥|¦r²Õ8640¡ã18,446,744,073,709,551,615¤@¤d¤K¦Ê¨Ê¦h

¤p¤ì°¸¥Î¡uDB¡v»¡©ú¥¦­Ìªº»yªk¡C°²¦p­n©w¸q¤@­Ó¦ì¤¸²Õªº¾ã¼Æ¡A´N¥Î°²«ü¥O¡uDB¡v¡]DB ¬O define byte ªº·N«ä¡^©Î¡uBYTE¡v¡A³o¨â­Ó«ü¥O¨ä¹ê¬O¤@¼Ëªº¡A¨ä»yªk¦p¤U¡G

ÅܼƦW  DB      ¼Æ­È
ÅܼƦW  BYTE    ¼Æ­È

¨ä¾lªº DW¡BDD¡BDQ ¤]³£Ãþ¦ü¡A¥ç§Y DW »P WORD ¦P¸q¡BDD »P DWORD ¦P¸q¡BDQ »P QWORD ¦P¸q¡C©³¤Uªº¨Ò¤l¬O©w¸q¡uminutes¡vÅܼƪì©l­È¬° 60¡A¡udays¡vÅܼƬ° 365¡A¡useconds_per_day¡vÅܼƬ° 15180h¡C

.DATA
minutes         DB      60
days            DW      365
seconds_per_day DD      15180h  ; ¼Æ­È«á¦³¡uh¡v¡Aªí¥Ü¤Q¤»¶i¦ì¼Æ­È
year            DWORD   ?       ; DWORD »P DD ¦P¸q¡A¤£³]ªì©l­È

¦pªGÅܼƨS¦³ªì©l­È¡A¤]¥i¥H¥Î¡u?¡vªí¥Ü¡A¦ý¦¹Åܼƥ²¶·¦b¡u.DATA¡v©Î¡u.DATA?¡v°Ï¬q¤º¡A¨Ò¦p¤W­±ªº¡uyear¡vÅܼơC

DB ©Î BYTE °£¤F©w¸q¾ã¼Æ¥~¡A¤]¥i¥H¥Î¨Ó©w¸q¦r¦ê¡C¦r¦êªº­^¤å¬O string¡A¥i¥H§â¥¦·Q¦¨¤@¬q¥Ñ¦r¤¸©Ò²Õ¦¨ªº¸ê®ÆÃþ«¬¡A¤£½×¬O¤¤¤å©Î­^¤å¦r¤¸§¡¥i¡Aªø«×¥i¥H¬O¤@­Ó¦r¤¸©Î¦h­Ó¦r¤¸³£¥i¥H¡C¦b Windows µ{¦¡¤¤¡A¦r¦ê±`±`¥H¹s§@¬°µ²§À¡AºÙ¬°¥H¹sµ²§Àªº¦r¦ê¡C¥Î DB ©Î BYTE ©w¸q¦r¦ê®É¡A»Ý¥Î¡u"¡v©Î¡u'¡v±N¾ã­Ó¦r¦ê¬A¦í¡C»yªk¦p¤U¡G

¦r¦ê¦W  DB      "¦r¦ê¤º®e"
¦r¦ê¦W  BYTE    "¦r¦ê¤º®e"

©³¤U¬O©w¸q¨â­Ó¦r¦ê¡AMonday »P ChMonday¡A«áªÌ´N¬O¥H¹sµ²§Àªº¦r¦ê¡G

.CONST
Monday   DB     "Monday"
ChMonday DB     '¬P´Á¤@',0

FIRST.ASM ²Ä¤­¡B¤»¦æ©w¸q¤F Number¡BSum ¨â­ÓÅܼơA¦Ó«áªºµ{¦¡·|­pºâ¥X RAX »P Number ¤§©M¡A¦A¦s¤J Sum ÅܼƸ̡C©Ò¥H¡A±µ¤U¨Ó«K¶i¤J¤F³B²z¸ê®Æªº¶¥¬q¡A¤]´N¬O¶i¤Jµ{¦¡½Xªº½dÃ¥¡C²Ä¤@­Ó¹J¨ìªº¬O²Ä¤Q¦æ¡A¡umain PROC¡v¡A³o¤@¦æÀ³»P²Ä¤Q¤­¦æ¤@°_»¡©ú¡C¥¦­Ì»P°Æµ{¦¡ªºÆ[©À¦³Ãö¡A©³¤U¥ý»¡©ú¦ó¿×°Æµ{¦¡¡C

°Æµ{¦¡¡]Subroutine ©Î Subprogram¡^

§Ú­Ì¦b¼¶¼gµ{¦¡®É¡A³q±`·|¹J¨ì³o¼Ëªºª¬ªp¡A´N¬O¬Y¨Çµ{¦¡¤ù¬q·|±`±`°õ¦æ¨ì¡A¦pªG­n­«·s¼g¤@¹M¡A¤]«Ü³Â·Ð¡CÁ|¨Ò¨Ó»¡¡A«Ø¥ßµøµ¡´N¬O±`±`·|°õ¦æ¨ìªºµ{¦¡¡C«Ø¥ßµøµ¡®É¡A³£­n°õ¦æÃ¸»s¼ÐÃDÄæ¡BÃ䮨¡B³Ì¤j¤Æ³Ì¤p¤Æ«ö¶sµ¥°Ï°ìªºµ{¦¡½X¡A¨C¦¸«Ø¥ßµøµ¡®É¤j·§³£¬O­n°µ¬Û¦Pªº¨Æ¡A¦³©Ò®t§Oªº¬O¤£¦Pªº¼ÐÃDÄæ¤å¦r¡B¤£¦Pªºµøµ¡¦ì¸m¡B¤£¦Pªºµøµ¡¤j¤pµ¥¡C©Ò¥H¡A°²¦p¯à§â«Ø¥ßµøµ¡ªºµ{¦¡½X¿W¥ß¥X¨Ó¡Aµ¥¨ì¨C¦¸­n«Ø¥ßµøµ¡®É¡A¥u»Ý«ü©w¦n¼ÐÃDÄæ¤å¦r¡Bµøµ¡¦ì¸m¡Bµøµ¡¤j¤pµ¥¡AµM«á§â±±¨îÅvÂಾ¨ì¿W¥ß¥X¨Óªºµ{¦¡¥h°õ¦æ¡Aµ¥«Ø¥ß¦nµøµ¡¡A¦A§â±±¨îÅvÂಾ¦^­ì¨Óªºµ{¦¡¡AÄ~Äò°õ¦æ¡C

¹³³o¼Ë¡A¡u¦b¤j«¬µ{¦¡¤¤¡A¯à§¹¦¨¬Y¶µ¯S©w¤u§@¡A¦Ó¥B¤ñ¸û¨ã³Æ¿W¥ßªºµ{¦¡¤ù¬q¡v´NºÙ¬°°Æµ{¦¡¡A¦Ó­ì¨Óªº¤j«¬µ{¦¡´NºÙ¬°¥Dµ{¦¡¡C¥Dµ{¦¡§â±±¨îÅvÂಾ¨ì°Æµ{¦¡ªº¹Lµ{¡A´NºÙ¬°©I¥s¡]call¡A¤j³°Â½Ä¶¦¨½Õ¥Î¡^¡C¥Dµ{¦¡¦b©I¥s°Æµ{¦¡®É¡A§â¬Y¨Ç¸ê®Æ¶Çµ¹°Æµ{¦¡¡A¦Ó¨Ï°Æµ{¦¡¨Ì¾Ú¦¹¸ê®Æ°õ¦æ¡C¨Ò¦p©I¥s«Ø¥ßµøµ¡ªº°Æµ{¦¡®É¡A­n§â¼ÐÃDÄæ¤å¦r¡Bµøµ¡¦ì¸m¡Bµøµ¡¤j¤pµ¥¸ê®Æ¶Çµ¹°Æµ{¦¡¡A°Æµ{¦¡¦n¨Ì¾Ú³o¨Ç¸ê®Æ°õ¦æ¤u§@¡C¹³³o¨Ç¥Dµ{¦¡¶Çµ¹°Æµ{¦¡ªº¸ê®Æ¡AºÙ¬°¡u°Ñ¼Æ¡v©Î¡u¤Þ¼Æ¡v¡]µù¤T¡^¡C

°Æµ{¦¡°õ¦æ§¹²¦«á¡A·|§â±±¨îÅv¥æÁÙµ¹¥Dµ{¦¡¡A¥Dµ{¦¡Ä~Äò°õ¦æ±µ¤U¨Óªºµ{¦¡¡F»P¦¹¦P®É¡A°Æµ{¦¡¦³®É¤]·|§â°õ¦æµ²ªG¶Ç¦^µ¹¥Dµ{¦¡¡C³o­Ó°õ¦æµ²ªG³q±`¬O¤@­Ó¼Æ­È¡AºÙ¬°¡u¦^¶Ç­È¡v¡]return value¡^¡A§i¶D¥Dµ{¦¡°õ¦æ±o¦p¦ó¡A¨Ò¦p«Ø¥ßµøµ¡¬O§_¦¨¥\¡C¹³³oºØ¦bµ²§ô®É¡A·|§â¦^¶Ç­È¶Çµ¹¥Dµ{¦¡ªº°Æµ{¦¡ºÙ¬°¨ç¦¡¡]function¡A¥ç¦³Â½Ä¶¦¨¨ç¼Æ¡^¡C

°²«ü¥O¡GPROC/ENDP

¨º»ò¸Ó¦p¦ó§â¬Y­Óµ{¦¡¤ù¬q«Å§i¦¨°Æµ{¦¡©O¡H«Ü²³æ¡A¨Ï¥Î PROC °²«ü¥O¡A¦Ó PROC ¥²©w­n»P ENDP ·f°t¡A¥¦­Ìªº»yªk¬O¡G

label  PROC  [distance][language-type][visibility][USES ¼È¦s¾¹¦Cªí][°Ñ¼Æ¦Cªí][FRAME[:ehandler-address]]
       µ{¦¡¤ù¬q
label  ENDP

label ¬O°Æµ{¦¡ªº¦WºÙ¡A¦b Win64 ùجO°Ï¤À¤j¤p¼gªº¡A¦]¦¹©R¦W®É­nª`·N¡C¥Î[]¬A°_¨Óªº¥i¥H¬Ù²¤¡A¡udistance¡v¡]¶ZÂ÷¡^©M¡ulanguage-type¡v¡]»y¨¥Ãþ«¬¡^¥u¦³¦b 16 ¦ì¤¸©Î 32 ¦ì¤¸ªº MASM ¤¤¤~¦³®Ä¡F¡uFRAME¡v ¥u¾A¥Î©ó ML64.EXE¡A¸Ô²Óªº±¡§Î¥i¥H°Ñ¦Ò·L³nªººô­¶¡A¦ý¦¹³B¥Î¤£¨ì¥H«á¦³¾÷·|¦A»¡¡C¦¹³B¥u»¡©ú visibility¡BUSES¡B°Ñ¼Æ¦Cªí¤T¶µ¡G

  1. visibility¡G¥i¥H¬O PRIVATE¡BPUBLIC ©Î EXPORT¡CPRIVATE ªí¥Ü¥u¦³¥»¼Ò²Õ¥i¥H©I¥s¦¹°Æµ{¦¡¡FPUBLIC ªí¥Ü¹ï©Ò¦³ªº¼Ò²Õ³£¥i©I¥s¡FEXPORT ªí¥Ü¬O¾É¥Xªº¨ç¼Æ¡A·í½s¼g DLL ªº®É­Ô­n±N¬Y­Ó¨ç¼Æ¾É¥Xªº®É­Ô¥i¥H³o¼Ë¨Ï¥Î¡C¹w³]­È¬O PUBLIC¡A¤j³¡¤Àµ{¦¡ªº°Æµ{¦¡³£¨Ï¥Î³o­Ó¿ï¶µ¡C
  2. USES ¼È¦s¾¹¦Cªí¡G¦b²ÕͮɡA²Õ;¹·|§â¦¹¦Cªíªº¼È¦s¾¹±À¤J°ïÅ|¡A±N¨ä­È«O¯d¤U¨Ó¡A¦b RET «ü¥O«e¥Ñ°ïÅ|¼u¥X¦Ü­ì¼È¦s¾¹¡C´«¥y¸Ü»¡¡A°Æµ{¦¡°õ¦æ§¹²¦«á¡A¦b¦¹¦Cªí¤ºªº¼È¦s¾¹¤§­È¤£·|§ïÅÜ¡C¦³Ãö¼È¦s¾¹»P°ïÅ|¡Aµy«á¦A¸Ñ»¡¡C
  3. °Ñ¼Æ¦Cªí¡G¥Dµ{¦¡­n¶Çµ¹°Æµ{¦¡ªº¸ê®Æ¡A³£¦s¦b°Ñ¼ÆùØ¡C°Ñ¼Æ¥i¯à¤@­Ó¡B¨â­Ó¡K¡K¨Ã¤£¤@©w¡A¤]¦³¤£»Ý­n°Ñ¼Æªº¡Aµø±¡ªp¦Ó©w¡C¨Ò¦p«Ø¥ßµøµ¡ªº°Æµ{¦¡¡A´N»Ý­n¶Ç¤Jµøµ¡¼ÐÃDÄæªº¤å¦r¡Bµøµ¡¼e«×¡Bµøµ¡°ª«×µ¥¸ê®Æ¡C¦]¦¹§â³o¨Ç°Ñ¼Æ°µ¦¨¤@¦C¡A¹³¡u°Ñ¼Æ1:¸ê®ÆÃþ«¬,°Ñ¼Æ2:¸ê®ÆÃþ«¬¡K¡K¡v¡A°Ñ¼Æ¦WºÙ¤£¯à©M¸ê®Æ°Ï¬q©Ò©w¸qªºÅܼƦWºÙ©Î°Ï°ìÅܼƦWºÙ¬Û¦P¡AÃþ«¬¥i¯à¬OÂù¦r²Õ¡]DWORD¡^©Î¥|¦r²Õ¡]QWORD¡^¡A¤]¬O¨Ì±¡§Î¦Ó©w¡C

PROC ªí¥Ü°Æµ{¦¡°_©l¤§³B¡AENDP ªí¥Ü³Bµ{¦¡µ²§ô¡A¦b³o¨âªÌ¤§¶¡ªºµ{¦¡¤ù¬q´N¬O lebel °Æµ{¦¡ªºµ{¦¡½X¡C·í¥Dµ{¦¡§â±±¨îÅv¥æµ¹°Æµ{¦¡®É¡A·|±q°Æµ{¦¡ªº²Ä¤@¦æ¶}©l¡A©¹¤U³v¦æ°õ¦æ¨C¤@¹D«ü¥O¡Aª½¨ì°Æµ{¦¡³Ì«á¤@¦æ¡AµM«á§â±±¨îÅvÂkÁÙ¥Dµ{¦¡¡C¥Dµ{¦¡±o¨ì±±¨îÅv«á¡AÄ~Äò°õ¦æ¥Dµ{¦¡©I¥s°Æµ{¦¡¤§«áªºµ{¦¡½X¡C

·í¨Ï¥ÎªÌ­n Windows °õ¦æ FIRST.EXE ®É¡AWindows ªº°µªk¨ä¹ê´N¬O©I¥s FIRST.EXE ¤¤ªº main °Æµ{¦¡¡A³o¼Ë´N¯à§â±±¨îÅv²¾¨ì main °Æµ{¦¡¤¤¡A¦]¬°³o­Ó¹Lµ{ Windows ¨S¦³¶Ç»¼°Ñ¼Æ¡A¦]¦¹¡umain PROC¡v¤§«á¨S¦³¨ä¥L¸ê®Æ¡C¨Æ¹ê¤W¡AWindows °õ¦æÀ³¥Îµ{¦¡®É¡A³£¬O¾ú¸g³o¼Ëªº¹Lµ{¡C¹ï Windows ¨Ó»¡¡Amain ¬O°Æµ{¦¡¡F¦ý¹ï FIRST ¨Ó»¡¡A«o¥i¥H§â main ¬Ý¦¨¥Dµ{¦¡¡C³o¬O¦]¬°©¹«á§Ú­Ìªºµ{¦¡·|¶V¨Ó¶V½ÆÂø¡A·|¦b main ¤¤©I¥s¨ä¥L°Æµ{¦¡¡A³o®É main ¥iµø¬°¥Dµ{¦¡¡C

¦pªGÀ³¥Îµ{¦¡¤¤¦³³\¦h°Æµ{¦¡¡A¨º»ò­þ¤@­Ó¤~¬Oµ¹ Windows ©I¥sªº©O¡H­ì¨Ó²ÕͮɡA¦b¡u©R¥O´£¥Ü¦C¡v¤¤¤U¹F¡uml64 first.asm /link /entry:main¡v«ü¥O¡A¦b³oùتº¡u/entry:¡v«á­±©Ò±µªº°Æµ{¦¡¦WºÙ¡A´N¬Oµ¹ Windows ©I¥sªº¡C¤]¥i¥H»¡¡Amain ´N¬OÀ³¥Îµ{¦¡ªº¶i¤JÂI¡A·í Windows §@·~¨t²Î°õ¦æ FIRST.EXE µ{¦¡®É¡A¬O±q³oùض}©l°õ¦æ¡C

±µ¤U¨Ó¡A¥»À³Ä~Äò»¡©ú¦b main °Æµ{¦¡¸Ì­±ªº«ü¥O¡A¦ý¬O¥»³¹½g´T¤w¸g¤Ó¦h¡A©Ò¥H²Ä¤G³¹¦AÄ~Äò¡C


µùÄÀ

µù¤@¡G²Õ¦X»y¨¥«O¯d¦r

¥ô¦ó¤@ºØµ{¦¡»y¨¥¡A³£¦³¦Û¤vªº«O¯d¦r¡A³o¨Ç«O¯d¦r¦b³]­pµ{¦¡»y¨¥®É´N¤w¸g¨Ï¥Î¤F¡A±Mªùµ¹»yªk©Î¨t²Î¨Ï¥Î¡Aµ{¦¡³]­p®vµLªk¦A¨Ï¥Î¥¦°µ¬°¦Û¦æ©R¦Wªº¦WºÙ¡C²Õ¦X»y¨¥¤]¦³«O¯d¦r¡A¥i¤À¬°¤­Ãþ¡G

  1. °²«ü¥O¡]directives¡^¡G¹ï²Õ;¹µo¥Xªº«ü¥O¡A¤]ºÙµêÀÀ«ü¥O©Î«ü¤Þ¡C¨Ò¦p OPTION¡B.CODE¡B.DATA¡BDQ¡BPROC¡K¡K¡C
  2. CPU «ü¥O¡]instructions¡^¡G¹ï³B²z¾¹¡]CPU¡^µo¥Xªº«ü¥O¡A¤]ºÙ x86 «ü¥O¡]©Î x64 «ü¥O¡^¡C¨Ò¦p MOV¡BADD¡BPUSH¡K¡K¡C
  3. Äݩʡ]attributes¡^¡G«ü¥O©Ò»Ý­nªº¿ï¶µ¡C¨Ò¦p¡APROC °²«ü¥O¤¤ªº¡uUSES¡v¡C
  4. ¹Bºâ¤l¡]operators¡^¡G¦b¹Bºâ¦¡¤¤¥Î¨ìªº¹Bºâ¹Lµ{¡A¦p¡u+¡v¡B¡u-¡v¡B¡u*¡v¡B¡u/¡vµ¥¡A¤À§O¥Nªí¥[¡B´î¡B­¼¡B°£¥|«h¹Bºâ¡C
  5. ¹w©w¸q²Å¸¹¡]predefined symbols¡^¡G¨Ò¦p²©ö©w¸q°Ï¬q®É¡A©Òªð¦^ªº°Ï¬q¦WºÙ¡C

¦b­ì©lµ{¦¡¤¤¡A«O¯d¦r¥i¥H¥ô·N¨Ï¥Î¤j¼g©Î¤p¼g­^¤å¦r¥À¡A¤£·|¦³¥ô¦ó°ÝÃD¡A¦Ó¦Û¦æ©R¦Wªº¦WºÙ¡A¦pÅܼƦW¡B°Æµ{¦¡¦Wµ¥¡A³£¤£¥i¨Ï¥Î«O¯d¦r¡A§_«h ML64 µLªk¤À¿ë¨ì©³¬O«O¯d¦r¡AÁÙ¬O¬Y­ÓÅܼơC

µù¤G¡G°²«ü¥O

°²«ü¥O¬O«ü¤£·|³Q²Õ;¹Âà´«¬°¾÷±ñ½Xªº«ü¥O¡A¥¦¬O«ü¥Ü²Õ;¹¦p¦ó²ÕĶ¡A¨Ò¦p¬O§_°Ï¤À¤j¤p¼g¡B¦w±Æ°O¾ÐÅé¡B©w¸q¸ê®Æµ¥µ¥¡A¹³ OPTION¡BEQU¡B.CODE¡B.DATA¡BDB¡BDW¡K¡K³£¬O°²«ü¥O¡C

»P°²«ü¥O¬Û¤ÏªººÙ¬° x86 «ü¥O©Î x64 «ü¥O¡Ax64 «ü¥O¸g¥Ñ²Õ;¹²Õͤ§«á¡A·|¥Í¦¨¾÷±ñ½X¡C¥i¥H¥Î x64dbg ¸ü¤J FIRST.EXE¡A´N¯à¬Ý±o¥X¨Ó¦b FIRST ¤¤¡A¥u¦³ MOV¡BADD¡BPUSH¡BPOP ¬O x64 «ü¥O¡A¨ä¾l³£¬O°²«ü¥O¡C

µù¤T¡G°Ñ¼Æ¡]Parameter¡^»P¤Þ¼Æ¡]Argument¡^

°Ñ¼Æ©M¤Þ¼Æ¬O©I¥s°Æµ{¦¡®É¡A¥Ñ¥Dµ{¦¡¶Çµ¹°Æµ{¦¡ªº¸ê®Æ¡A±`±`²V¦b¤@°_¡AÅý¤H·d¤£²M·¡¡C¦³®É¤£°Ï¤À¥¦­Ì¡A¤]¥¼¹Á¤£¥i¡C¦pªG¤@©w­n°Ï¤À¡A¥i¥H³o¼Ë¤À¡G°Ñ¼Æ¬O¥Î¦b©w¸q°Æµ{¦¡®É©Ò¨Ï¥ÎªºÅܼơA¦Ó¤Þ¼Æ«h¬O©I¥s°Æµ{¦¡®É¡A¹ê»Ú¶Çµ¹°Æµ{¦¡ªº¼Æ­È¡C

Á|­Ó¨Ò¤l¨Ó»¡¡A°²³]¦³­Ó°Æµ{¦¡¡]gcd¡^¬O­pºâ¨â­Ó¾ã¼Æªº³Ì¤j¤½¦]¼Æ¡A¨º»ò³o­Ó°Æµ{¦¡¥i¥H³o¼Ë©w¸q¡G

gcd     PROC    int1:QWORD,int2:QWORD
        ⁝
gcd     ENDP

°²³]²{¦b­n­pºâ 48 ©M 18 ªº³Ì¤j¤½¦]¼Æ¡A¨º»ò·|³o¼Ë©I¥s¡]²Ä¤»³¹¤~·|¤¶²Ð INVOKE¡A²{¦b¥u­nª¾¹D¥¦¬O¥Î¨Ó©I¥s°Æµ{¦¡ªº¡u«ü¥O¡v§Y¥i¡A©I¥s®É int1 ·|¥H 48 ¥N¤J¡Aint2 ·|¥H 18 ¥N¤J¡AµM«á±N±±¨îÅvÂಾ¨ì gcd °Æµ{¦¡¥h­pºâ³o¨â¼Æªº³Ì¤j¤½¦]¼Æ¡^¡G

        INVOKE  gcd,48,18

¦b¤W­±ªº¨Ò¤l¤¤¡Aint1 ©M int2 ¬O°Ñ¼Æ¡A48 ©M 18 ¬O¤Þ¼Æ¡C