实现正负数区分#跳转指令
题目要求大意:
在数据段指定一组数据,对该组数据进行:正负分类,分别记下两类的绝对值之和与个数只和
参考代码:
include irvine32.inc .data arr dd 0,-1,1,-2,2,-3,3 count dd ($-arr)/4 sum1 dd 0 sum2 dd 0 cou1 dd 0 cou2 dd 0 I dd -1 ;1表示正记录,2表示负记录 .code main PROC lea esi,arr mov ecx,0 ;把每个数据取出 lop: mov ebx,[esi+4*ecx] add ecx,1 ;判断正负数 cmp ebx,0 jl L1 ;本来用neg编译错误 ;跳到负数情况 add sum1,ebx ;正数情况 add cou1,1 jmp next L1: add sum2,ebx add cou2,1 jmp next next: cmp ecx,count jb lop mov eax,sum2 imul I ;带符号乘法 mov sum2,eax ;11111111111111111111111111111111111111111111111111111111111111 mov eax,666666 call writeint push eax mov eax,sum2 ;11111111111111test call writeint ;11111111111111 pop eax push eax mov eax,cou2 ;11111111111111test call writeint ;11111111111111 pop eax push eax mov eax,sum1 ;11111111111111test call writeint ;11111111111111 pop eax push eax mov eax,cou1 ;11111111111111test call writeint ;11111111111111 pop eax mov eax,9999999 call writeint ;2222222222222222222222222222222222222222222222222222222222222222 exit main ENDP end main
跳转指令:
(该部分来自:https://www.cnblogs.com/del/archive/2010/04/16/1713886.html)
JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 JC ;进位则跳转 JNC ;不进位则跳转 JO ;溢出则跳转 JNO ;不溢出则跳转 JA ;无符号大于则跳转 JNA ;无符号不大于则跳转 JAE ;无符号大于等于则跳转 JNAE ;无符号不大于等于则跳转 JG ;有符号大于则跳转 JNG ;有符号不大于则跳转 JGE ;有符号大于等于则跳转 JNGE ;有符号不大于等于则跳转 JB ;无符号小于则跳转 JNB ;无符号不小于则跳转 JBE ;无符号小于等于则跳转 JNBE ;无符号不小于等于则跳转 JL ;有符号小于则跳转 JNL ;有符号不小于则跳转 JLE ;有符号小于等于则跳转 JNLE ;有符号不小于等于则跳转 JP ;奇偶位置位则跳转 JNP ;奇偶位清除则跳转 JPE ;奇偶位相等则跳转 JPO ;奇偶位不等则跳转
个人分享,欢迎指导,未经允许,请勿转载。谢谢!