Assembly Language Patterns
計算陣列長度
list Byte 10,20,30,40 //list 是array的起始位址 ListSize = ($ - list) //ListSize是一個Constant //$代表Current Location counter list DWORD 1000,2000,3000 ListSize = ($-list)/4 //DWORD大小是4Byte,所以除以四
雙層迴圈
mov ecx,5 //外圈次數
L1:
mov count,ecx
mov ecx, 7 //內圈次數
L2:
//do something here
loop L2
mov ecx,count
loop L1
if statement
if (op1==op2){ statement1; }else {statement2; }
cmp op1,op2 // op1==op2
je _true // jump if equal 相等的話就跳TRUE label
jmp _false // 否則就無條件跳到FALSE label
_true:
//statement1
jmp next //跳過False部份
_false:
//statement2
next:
While loop
while( var1>var2 ){//statement
}
mov eax,var1
_while:
cmp eax,var2
jle endwhile //jmp if less and equl
//原本是var1>var2,條件成立就進while
//這裡改成var1<=var2,條件成立就離開while
//statement
jmp _while
_endwhile:
for loop
for(int i=0;i<9;i++){ statement; }mov ecx,0 //把ecx當作計數器i
_for:
cmp ecx,9
jge _endfor //jump if greater & equal
//statement;
inc ecx //ecx++
jmp _for
_endfor:
留言
張貼留言