汇编-.while循环语句

 

语句结构:

 

.while/.endw循环首先判断条件测试表达式, 如果结果是“真”, 则执行循环体内的指令,结束后再回到.while处判断表达式, 如此往复, 一直到表达式结果为“假”为止。

.while/.endw 指令有可能一遍也不会执行到循环体内的指令,因为如果第一次判断表达式时就遇到结果为“假”的情况,那么就直接退出循环。

 
.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data       
 
.code   
main PROC   
    
    mov eax,0h
    .while eax!=100000h
    add eax,1
        
    .endw

    ;EAX = 00100000h
 
    INVOKE ExitProcess,0  
main ENDP   
END main  

 

.break强制退出循环 

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data       
 
.code   
main PROC   
    
    mov eax,0h
    .while eax!=100000h
    add eax,1

    .break        ;强制退出循环
        
    .endw

    ;EAX = 00000001h
 
    INVOKE ExitProcess,0  
main ENDP   
END main

 

如果.break伪指令后面跟一个.if测试伪指令的话, 那么当退出条件为“真”时才执行.break伪指令

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data       
 
.code   
main PROC   
    
    mov eax,0h
    .while eax!=100000h
    add eax,1

    .break  .if eax==1000h       ;eax==1000h时推出循环
        
    .endw

    ;EAX = 00001000h
 
    INVOKE ExitProcess,0  
main ENDP   
END main

 

.continue本次循环时忽略后面的代码

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data       
 
.code   
main PROC   
    
    mov ebx,5h
    mov eax,0h

    .while eax!=100000h
    add eax,1

    .continue
    add ebx,2
        
    .endw

    ;EAX = 00100000h
    ;EBX = 00000005h  说明add ebx,2指令没有被执行

 
    INVOKE ExitProcess,0  
main ENDP   
END main

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-12-04 12:05  天子骄龙  阅读(66)  评论(0)    收藏  举报