2010-7-30 堆
堆
SS&ESP: Stack Segement, the stack pointer register
PUSH/POP:堆的操作
pushfd:push Flags on stack(16bit機器上用pushf)
popfd: copy into the Flags(16bit機器上用popf)
示例:
.data
saveFlags DWORD ?
.code
pushfd ;push Flags on stack
pop saveFlags ;copy into a variable
push saveFlags ;push save flag values
popfd ;copy into the flag
pushad:push all registers on the stack,順序:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI(16bit機器上用pusha)
popad: copy into all registers on the stack(16bit機器上用popa)
全局Label:名稱後面加上兩個":"。若爲局域Label,則只有一個。
局域Label不能被外界使用jmp,僅僅被函數內部使用;而全局Label則可以
在一個函數中計算累加值,可通過SumOf(EAX=EAX+EBX+ECX);也可通過EA,X和ESI,利用ECX循環來計算值
ArraySum計算一個數組的累加值(使用ESI指向指針起始地點,ECX指向LENGTHOF,置EAX=0,先push ESI和ECX,之後再pop兩個)
用戶自定義函數:
Sub2 PROC USES ESI ecx
L2:
call DumpRegs
call WaitMsg
ret
Sub2 ENDP
LinkLib.asm
TITLE Link Library (LinkLib.asm)
COMMENT !
Description:
This program is used to descripte Link Library
Author:
dl
Cretion Date:
2010-7-29 8:47:24
Revisions:
date:
Modified by:
!
INCLUDE Irvine32.inc
CR = 0Dh
LF = 0Ah
.data
myMsg BYTE "Please input 10 chars", CR, LF,0 ;0dh,0ah表示換行
arrayD DWORD 1,2,3,4,5,6,7,8,9,0ah,0bh
emptyTail DWORD 129 DUP(0) ;空字符串
startTime DWORD ?
inputBuff BYTE 129 DUP(0)
.code
main PROC
call ClrScr
call DumpRegs ;顯示ESI,EAX,EBX,ECX,...等信息
mov edx,OFFSET myMsg
call WriteString ;打印字符串(需要結合EDX)
;輸入10個字符並打印(需要使用指針OFFSET)
mov EDX, OFFSET inputBuff
mov ECX, 10
call ReadString
call WriteString ;打印字符串(需要結合EDX)
call GetMseconds
mov startTime, EAX ;記錄此時時間(數據存儲到EAX)
;停頓1000 ms
mov eax,1000
call delay ;停頓(需要結合EAX)
;顯示arrayD數據
mov ESI,OFFSET arrayD ;string
mov ECX, LENGTHOF arrayD ;number of unit
mov EBX, TYPE arrayD ;doubleword format:一個佔用的字節
call DumpMem ;顯示內存數據(需要結合ESI,ECX,EBX)
call GetMseconds ;記錄此時時間(數據存儲到EAX)
sub EAX,startTime ;計算中間耗時
call Randomize ;初始化Random32和RandomRange
call Random32 ;獲取隨機數(數據存儲到EAX)
call RandomRange ;獲取最大範圍[0,n)(數據存儲到EAX) mov eax 5000, call RandomRange 則範圍爲[0,5000)
call WaitMsg ;Press any key to continue...
exit
main ENDP
END main
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.