title: Четвертая лекция
layout: math
toc: true

Пример кода с метками

.globl _start
.text
_start:
#	jmp	d0
#============
#	jmp	*eee
#============
#	 movq	$d0, %rbx
#	 pushq	%rbx
#	 retq
#============
#	mov eee, %rbx
#	jmp	*%rbx
#============
#	mov eee, %rbx
#	jmp	*(%rbx)
#============
#	pushq eee
#	retq
#============
#	mov		$xxx, %rbx
#	jmp		*32(%rbx)
#============
#	mov		$xxx, %rbx
#	call	*32(%rbx)

metka1: .byte	0, 1, 0xf	#данные в секции
		.align	4
metka2: .word	2, 2, 0x0, 0x25
		.align	8
metka3: .long	3, 3, 23
		.align	4
metka4:
		.quad	1, 2, 3, 4, 5
d0:
		 mov	$1, %eax
		 mov	$1, %edi
		 mov	$mess, %rsi
		 mov	$lmess, %edx
		 syscall
#
		 mov	$60, %eax
		 mov    $1, %edi
		 mov	$mess, %rsi
		 mov	$lmess, %edx

Младшие биты регистра флагов процессора и соответствующие им условные переходы

11 10 9 8 7 6 5 4 3 2 1 0
O D T T S Z x A x P 1 C

A→ above, больше

E→ equal, равно

B→ below, меньше

G→ greater, больше со знаком

N→ not, не

L→ less, меньше со знаком

J→ jmp

И их сочетания (JA, JNBE, JAE, JNB…)

#	cmp	%al, %bl
#	ja	if
#	jg	if
#	jns	if
	mov	$15, %cx
1:
	inc		%al
	dec		%bl
	dec		%cx
	jnz		lb
#	loop	lb - аналогично последним двум, но МЕДЛЕННЕЕ!!!
#
	cmp		%al, %bl
	ja		if
#
	movq	$mesl, %rsi
	movq	$l1, %rdx
	jmp	2f
1:
	movq	$mes2, %rsi
	movq	$l2, %rdx
2:
	movq	$1, %rax
	movq	$1, %rdi
	syscall
	movq	$60, %rax
	syscall
1:
.data
mes1:	.ascii :Условие не выполнено!\n:
li=.	-mes1
mes2:	.ascii "Условие выполнено!\n"