子程序设计
子程序设计时
Push bp
Mov bp, sp
Sub sp, 2
再push其他需要保存的寄存器,这样可以不受保存要寄存器个数的影响,用bp+4定位到第一个参数,且释放局部变量空间时使用mov sp, bp即可。
宏调用中的参数如果有小于<符号,需要转义,写为!<



代码定式:
if(){
...
}
IF_BEGIN:
jcc IF_END
...
IF_END:
if(){
...
}
else{
...
}
IF_BEGIN:
jcc IF_END
...
jmp ELSE_END
IF_END:
...
ELSE_END:
if () {
...
}
else if () {
...
}
else if () {
...
}
else {
...
}
IF_BEGIN:
jcc ELSE_IF1_BEGIN
...
jmp ELSE_END
ELSE_IF1_BEGIN:
jcc ELSE_IF2_BEGIN
...
jmp ELSE_END
ELSE_IF2_BEGIN:
jcc ELSE_BEGIN
...
jmp ELSE_END
ELSE_BEGIN:
...
ELSE_END:
do{
...
}while()
DO_BEGIN:
...
jcc DO_BEGIN
DO_END:
while(){
...
}
WHILE_BEGIN:
jcc WHILE_END
...
jmp WHILE_BEGIN
WHILE_END:
for(FOR_INIT; FOR_CMP; FOR_STEP){
FOR_BODY
}
FOR_INIT:
...
jmp FOR_CMP
FOR_STEP:
...
FOR_CMP:
jcc FOR_END
FOR_BODY:
...
jmp FOR_STEP
FOR_END:
switch(i){
case 0:
...
break;
case 1:
...//无break;
case 2:
...
break;
case 4:
...
break;
default:
...
break;
}
CODE segment
CASE_0:
...
jmp SWITCH_END
CASE_1:
...
CASE_2:
...
jmp SWITCH_END
CASE_4:
...
jmp SWITCH_END
CASE_DEFALUT:
...
jmp SWITCH_END
SWITCH_END:
ret
CASE_TABLE dw offset CASE_0,
offset CASE_1,
offset CASE_2,
offset CASE_DEFALUT,
offset CASE_4
ends

浙公网安备 33010602011771号