实现正负数区分#跳转指令

题目要求大意:

  在数据段指定一组数据,对该组数据进行:正负分类,分别记下两类的绝对值之和与个数只和

参考代码:

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  ;奇偶位不等则跳转

原文地址:https://www.cnblogs.com/hello-OK/p/8724521.html

时间: 2024-11-06 17:23:53

实现正负数区分#跳转指令的相关文章

汇编语言--条件跳转指令

修改自: http://bdxnote.blog.163.com/blog/static/84442352015327011988/ 在此向原作者致敬, 网上大多数帖子都是拷贝自一个把跳转条件写错了的帖子, 害的我差点要怀疑人生了,-_-! . 本贴主要是把原作者的跳转条件改成C语言逻辑表达式的写法, 这样看着更舒服一些, 而且不会产生歧义 直接转移指令 指令格式 机器码 跳转条件 条件说明 符号  JO       OPR 70  OF==1  结果有溢出    JNO      OPR 71

TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十六进制的字符串转换成字节数组 * * @param hexString * @return */ public static byte[] hexStrToByteArrs(String hexString) { if (StringUtils.isEmpty(hexString)) { retur

Win32 汇编 - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转);三.根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 JC ;进位则跳转 JNC ;不进位则跳转 JO ;溢出则跳转 JNO ;不溢出则跳转 JA ;无符号大于则跳转 JNA

ARM中跳转指令BL/BLX偏移值计算规则

4字节对齐arm指令 ????规则:偏移=( 跳转地址-(指令地址+8) )/4 原因: 指令地址 + 8:因为ARM的流水线使得指令执行到当前指令处时,PC实际的值是A+8. 跳转指令 - 上一步得到地址:得到跳转指令与当前PC处的差值. ÷4:因为ARM的指令是4对齐的,即最低两位为00,于是将这个值右移两位. ? 执行时: 取出偏移,左移两位,加入PC,这时PC的值刚好为目标处的地址值,即目标地址指令进入取值,流水线前两级被清空. ? 实例测试: .text:0000126C 90 00

汇编中的跳转指令

能修改CS以及IP的指令都是转移指令.它分为段内转移,段间转移. 段内转移:只修改IP的值 段间转移:同时修改CS以及IP的值 段内转移根据转移的距离远近分为:短转移,近转移 短转移:转移范围为-128 – 127 近转移:转移范围为-32768 –32767 根据转移情况又分为: 无条件转移指令 条件转移指令 循环指令 过程 中断 <1> jmp short xxx(行号) 这个是短转移指令,实现段内的转移,在翻译成机器码的时候,码内并没有目标地址,有的只是转移位移,这样做的好处就是防止目标

ARM指令集——跳转指令

ARM 汇编指令条件执行 在ARM模式下,任何一条数据处理指令可以选择是否根据操作的结果来更新CPSR寄存器中的ALU状态标志位.在数据处理指令中使用S后缀来实现该功能. 不要在CMP,CMN,TST或者TEQ指令中使用S后缀.这些比较指令总是会更新标志位. 在Thumb模式下,所有数据处理指令都更新CPSR中的标志位.有一个例外就是:当一个或更多个高寄存器被用在MOV和ADD指令时,此时MOV和ADD不能更新状态标志. 几乎所有的ARM指令都可以根据CPSR中的ALU状态标志位来条件执行.参见

arm学习之汇编跳转指令总结

目前所知道的跳转指令有 b,bl,bep,bne.他们共同点是都是以b开头,首先从字面上分析:b:是Branch,表示分支.bl:是Branch Link表示带连接的分支.bep:Branch ,Equalbne:Branch ,Not Equal. B或BL指令引起处理器转移到"子程序名"处开始执行.两者的不同之处在于BL指令在转移到子程序执行之前将其下一条指令的地址拷贝到R14(LR,链接寄存器).由于BL指令保存了下条指令的地址因此使用指令"MOV PC,LR&qu

arm跳转指令对应的机器码

ARM: 常见跳转指令机器码: B:0xEA BL:0xEB 偏移地址计算过程: (目标地址 - 指令地址 - 8)/ 4 = 偏移 // 减8,指令流水造成. // 除4,因为指令定长,存储指令个数差,而不是地址差. 完整指令: 假设上一步得到的偏移为0x00000C 跳转指令为:B 则完整指令为:0C 00 00 EA THUMB: Thumb指令都是2字节.BL看起来像4字节指令,其实是一个误解,因为长跳转是由两条跳转指令组成的. 0~11位表示11位地址,具体含义如下: 第11位为0,偏

汇编:jmp系列跳转指令总结

助记方法: J:跳转C: 进位位置位N: 否S: 符号位置位o: 溢出位置位Z: 零标志位置位E: 等于P:奇偶位置位A: AboveB: BelowL: Less (Little的比较级)G: Greater (Great的比较级) (SF^OF)=1 --> SF=0, OF=1 --> a < b SF=1, OF=0 --> a < b (SF^OF)=0 --> SF=1, OF=1 --> a > b SF=0, OF=0--> a >