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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章