1. 程式人生 > >實現正負數區分#跳轉指令

實現正負數區分#跳轉指令

arr 進位 main write .com 位置 部分 logs pan

題目要求大意:

  在數據段指定一組數據,對該組數據進行:正負分類,分別記下兩類的絕對值之和與個數只和

參考代碼:

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 ;奇偶位不等則跳轉

實現正負數區分#跳轉指令