?? asm1.asm
字號:
COMMENT |
這是注釋這是注釋這是注釋這是注釋這是注釋
這是注釋這是注釋這是注釋這是注釋
這是注釋,在遇到 | 結束
echo 在MSDN中輸入 "MASM (Microsoft Macro Assembler)" 就可得到MASM的幫助
%OUT 在MSDN中輸入 "MASM (Microsoft Macro Assembler)" 就可得到MASM的幫助
; Custom Build Step (for sieve.asm/sieve.obj), including a listing file placed in intermediate directory
; but without Source Browser information
; Command Line (debug):
; ml -c -Zi "-Fl$(IntDir)\$(InputName).lst" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
; Command Line (release):
; ml -c "-Fl$(IntDir)\$(InputName).lst" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
; Outputs:
; $(IntDir)\$(InputName).obj
; Additional Dependencies:
; $(InputDir)\$(InputName).inc
; Custom Build Step (for sieve.asm/sieve.obj), including a listing file placed in intermediate directory
; and Source Browser information also placed in intermediate directory
; Command Line (debug):
; ml -c -Zi "-Fl$(IntDir)\$(InputName).lst" "-FR$(IntDir)\$(InputName).sbr" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
; Command Line (release):
; ml -c "-Fl$(IntDir)\$(InputName).lst" "-FR$(IntDir)\$(InputName).sbr" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
; Outputs:
; $(IntDir)\$(InputName).obj;$(IntDir)\$(InputName).sbr
; Additional Dependencies:
; $(InputDir)\$(InputName).inc
.686p
.8087
.K3D
.MMX
.XMM
;.RADIX 16
.MODEL FLAT, stdcall ;沒有fastcall
; case sensitive,表達式為32位,不仿真浮點指令,代碼段只讀,段是32位段
;空格多了不行
;OPTION CASEMAP :NONE, EXPR32, NOEMULATOR,READONLY, SEGMENT:use32
;用此句可以,用上句不行
OPTION CASEMAP :NONE, EXPR32, NOEMULATOR, READONLY, SEGMENT:use32 ;use16不行
PUSHCONTEXT all ;保存匯編器標志
include windows.inc
include masm32.inc
include gdi32.inc
include user32.inc
include kernel32.inc
include testh2inc.inc
POPCONTEXT all ;彈出匯編器標志
;extra ll4:far
gc_MAX_INT EQU 64
gc_MAX_INT2 = 14
gs_DISP_STRING TEXTEQU <HELLO>
;//RECORD 最多為32為,且聲明時要在一行上,不能換行
BitRecord RECORD Hightbits:4, Midbits:gc_MAX_INT2, Lsb:8
FullName STRUCT
FirstNmae BYTE 15 DUP(?)
Initial BYTE ?
LastName BYTE 24 DUP (?)
FullName ends
FullName2 STRUCT
firstname2 byte '--------------------'
initial2 byte '-'
lastname2 byte '---------------'
FullName2 ends
point struct
people1 FullName2 {}
people2 FullName {} ;嵌套定義時必須用{},而不能用{"asdf", "a", "asdfkl"}
x byte ?
y byte ?
point ends
rectangle struct
uppperleft point {} ;必須要初始化,
lowerrt point {}
rectangle ends
Ppoint typedef ptr point
testmacro1 macro a
local lm1 ;使標號局部華,多次引用宏不會出現重定義標號
and ax,a
jz lm1
nop
lm1:
nop
endm
;externdef g_fileName ;externdef==(public+extern)
;externdef g_pfileName ;不能這樣聲明,要加變量的類型,
externdef g_fileName : byte
externdef g_pfileName : byte
EXTERNDEF g_Version : DWORD
EXTERNDEF g_Data :BYTE
EXTERNDEF g_Time :BYTE
EXTERNDEF g_Cpu :DWORD
;EXTERNDEF g_Environ :BYTE
EXTERNDEF g_Interface :BYTE ;Information about the language parameters
EXTERNDEF g_Line :DWORD
.DATA
EVEN ;偶地址對齊,必須在某一段內定義,只適合16位數據線
ALIGN 16 ;以16字節的倍數對齊,即128位對齊,適合128數據總線,及一下總線
teststruct1 FullName2 {}
g_Version DWORD @Version ;××××注意××××所有的symbols 都是大小寫敏感的
g_Time BYTE '@Time',0
g_Data BYTE @Date,0
g_Cpu DWORD @Cpu,0
;g_Environ BYTE @Environ PATH ,0
g_Interface BYTE @Interface,0 ;Information about the language parameters
g_Line DWORD @Line ,0
a1 WORD 04371h
a2 DWORD 033h
;a3 BitRecord 2;
;a4 OWORD 33h
Naba FullName {"Naba", " ", "barkakati"}
Mitch FullName {}
point1 point {}
;comm testh2inc2 : h2inc2 ;定義公共變量,不能被初始化,不用public了
.CONST
;externdef g_pfileName : label ptr byte ;不能這樣定義,externdef 不能用在定義處
FILENAME TEXTEQU @FileName
g_pfileName BYTE 'FILENAME',0
g_fileName BYTE '@FileCur',0 ; g_fileName 表示串的地址,而不是一個指針
.CODE
Test1 proc val1:DWORD
local i1:word,i2:sdword
MOV EAX,val1;
MUL eax;
mov eax,0ffffffffh
inc eax
nop
call testorg1
mov eax, offset testh2inc2;
mov [eax].h2inc2.k, 55;
testmacro1 0
testmacro1 2
;mov ecx,offset point1
;lea eax,[ecx].point.people1.firstname2 ;只能用結構名來索引
;lea eax,[ecx].people1.firstname2 ;錯誤的方法
;lea eax,[ecx].point1.people1.firstname2 ;錯誤的方法
;ret
mov ax,mask Hightbits
and ax,mask Midbits
jmp short ll7
;es::di 用兩個寄存器表示一個32位數,addr point1表示一個地址,[ecx]也表示一個地址
invoke testproc1 , 1, addr point1, addr teststruct1
invoke testproc1 , edx, [ecx], es::di
jmp LoadLibraryA
nop
ll7:
fild val1
ll6:
fmul st,st(0)
mov eax,0
CPUID ;用小寫的cpuid 就不行
mov eax,1
CPUID
mov eax,2
CPUID
mov eax,i2;
ret ;//根據過程的調用方式自動正確返回
Test1 endp
testproc1 proc near stdcall export uses ecx edx ebx esi edi ,var1:SDWORD ,var2:SDWORD, var6:SDWORD
local var3:ptr byte, var4:Ppoint
mov eax,var1
mov ecx,var3
mov [ecx], al
mov ebx,var2
mov var4, ebx
ret
testproc1 endp
;org 500000h ;是相對于本偏移在加一個偏移
;org (500000 )
testorg1 proc
ret
testorg1 endp
.STACK
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -