.386.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
array SWORD -3,-6,-1,-10,10,30,40,4
sentinel SWORD 0.code
main PROC
mov esi,OFFSET array
mov ecx,LENGTHOF array
L1:
test WORD PTR[esi],8000h ;测试符号位
pushfd ;标志位入栈
add esi,TYPE array ;移动到下一个位置
popfd
loopnz L1 ;当ZF=0时继续循环
jnz quit ;没有发现非负数
sub esi,TYPE array ;ESI指向数值
quit:
INVOKE ExitProcess,0
main ENDP
END main
6: loopz 条件循环指令使用,查找数组第一个负数
.386.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
array SWORD 3,6,1,10,-10,-30,-40,-4
sentinel SWORD 0.code
main PROC
mov esi,OFFSET array
mov ecx,LENGTHOF array
L1:
test WORD PTR[esi],8000h ;测试符号位
pushfd ;标志位入栈
add esi,TYPE array ;移动到下一个位置
popfd
loopz L1 ;当ZF=1时继续循环
jz quit ;没有发现非负数
sub esi,TYPE array ;ESI指向数值
quit:
INVOKE ExitProcess,0
main ENDP
END main
7: if语句编写汇编时的情况
.386.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
;if(al > bl)&(bl > cl); X =1.data
X DWORD ?.code
main PROC
INVOKE ExitProcess,0
main ENDP
proc_1 PROC
cmp al,bl
ja L1
jmp next
L1:
cmp bl,cl
ja L2
jmp next
L2:
mov X,1
next:
proc_1 ENDP
;如果将ja 换成 jbe,代码减少2条
proc_2 PROC
cmp al,bl
jbe next
cmp bl,cl
jbe next
mov X,1
next:
proc_2 ENDP
END main
8: if语句编写汇编时的情况
.386.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
X DWORD ?;if(al > bl)||(bl > cl);X =1.code
main PROC
cmp al,bl
ja L1
cmp bl,cl
jbe next
L1:
mov X,1
next:
INVOKE ExitProcess,0
main ENDP
END main
9: while语句编写汇编时的情况
.386.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
val1 DWORD 10
val2 DWORD 20;while(val1 < val2);{; val1 ++;; val2 --;;}.code
main PROC
mov eax,val1
beginwhile:
cmp eax,val2
jnl endwhile
inc eax
dec val2
jmp beginwhile
endwhile:
mov val1,eax
INVOKE ExitProcess,0
main ENDP
END main