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