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"