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