汇编-JE等于则跳转和JNE不等于则跳转
实质:JE与JZ相同,JNE与JNZ相同,都是通过零标志位ZF跳转的
JE等于则跳转
je指令一般会与cmp指令搭配使用,因为cmp指令用于比较两个操作数的大小,je指令用于根据比较结果进行跳转
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc includelib Irvine32.lib ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov eax,10 cmp eax,10 ;相等 相减之后为零 ZF=1 je t1 ;等于则跳转;零标志位ZF=1则跳转(为零则跳转) mov ebx,02h jmp t2 t1: mov eax ,02h t2: INVOKE ExitProcess,0 main ENDP END main
je指令还可以用于实现程序的多重条件分支
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc includelib Irvine32.lib ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov al, 1 ;将1赋值给al cmp al, 0 ;比较al和0的大小 je label0 ;如果al等于0,跳转到label0处 cmp al, 1 ;比较al和1的大小 je label1 ;如果al等于1,跳转到label1处 cmp al, 2 ;比较al和2的大小 je label2 ;如果al等于2,跳转到label2处 jmp t2 ;如果没有任何相等条件,跳转到程序结束标记处 label0: mov ebx,0 jmp t2 label1: mov ebx,1 jmp t2 label2: mov ebx,2 t2: INVOKE ExitProcess,0 main ENDP END main
使用je指令的注意事项
1. je指令只能用于比较两个操作数是否相等,不能用于比较大小
2. je指令跳转的目标地址应该是标签
3.在使用je指令时,两个操作数的类型必须相同,否则会出现编译错误
JNE不等于则跳转
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc includelib Irvine32.lib ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov al, 0 ;将0赋值给al cmp al, 0 ;比较al和0的大小 jne label0 ;如果al不等于0,跳转到label0处 cmp al, 1 ;比较al和1的大小 jne label1 ;如果al不等于1,跳转到label1处 cmp al, 2 ;比较al和2的大小 jne label2 ;如果al不等于2,跳转到label2处 jmp t2 ;如果没有任何相等条件,跳转到程序结束标记处 label0: mov ebx,0 jmp t2 label1: mov ebx,1 jmp t2 label2: mov ebx,2 t2: INVOKE ExitProcess,0 main ENDP END main
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2022-12-13 win32-创建界面
2022-12-13 VS2019创建win32项目
2021-12-13 opencv-getStructuringElement结构元素(内核矩阵)
2021-12-13 opencv-inpainting图像修复