Add files via upload
This commit is contained in:
parent
c86d5ed12e
commit
7035bcc531
2106
jcc/asm24.py
Normal file
2106
jcc/asm24.py
Normal file
File diff suppressed because it is too large
Load diff
103
jcc/short_jumps.asm
Normal file
103
jcc/short_jumps.asm
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
section .text
|
||||||
|
global _start
|
||||||
|
|
||||||
|
_start:
|
||||||
|
; Подготовка флагов через сравнение
|
||||||
|
mov rax, 5
|
||||||
|
mov rbx, 5
|
||||||
|
cmp rax, rbx ; устанавливает ZF = 1
|
||||||
|
|
||||||
|
; je / jz — короткий переход если равно / ноль
|
||||||
|
je .label_je
|
||||||
|
|
||||||
|
; Если не сработал — ошибка (но он сработает)
|
||||||
|
mov rdi, 1
|
||||||
|
mov rax, 60 ; sys_exit
|
||||||
|
syscall
|
||||||
|
|
||||||
|
.label_je:
|
||||||
|
mov rax, 10
|
||||||
|
mov rbx, 20
|
||||||
|
cmp rax, rbx ; ZF = 0, SF ≠ OF → jl сработает
|
||||||
|
|
||||||
|
; jl — короткий переход если меньше
|
||||||
|
jl .label_jl
|
||||||
|
mov rdi, 2
|
||||||
|
mov rax, 60
|
||||||
|
syscall
|
||||||
|
|
||||||
|
.label_jl:
|
||||||
|
; jg — короткий переход если больше
|
||||||
|
mov rax, 30
|
||||||
|
mov rbx, 20
|
||||||
|
cmp rax, rbx ; rax > rbx → jg должен сработать
|
||||||
|
jg .label_jg
|
||||||
|
mov rdi, 3
|
||||||
|
mov rax, 60
|
||||||
|
syscall
|
||||||
|
|
||||||
|
.label_jg:
|
||||||
|
; jle — меньше или равно
|
||||||
|
mov rax, 15
|
||||||
|
mov rbx, 15
|
||||||
|
cmp rax, rbx ; равно → jle сработает
|
||||||
|
jle .label_jle
|
||||||
|
mov rdi, 4
|
||||||
|
mov rax, 60
|
||||||
|
syscall
|
||||||
|
|
||||||
|
.label_jle:
|
||||||
|
; jge — больше или равно
|
||||||
|
mov rax, 100
|
||||||
|
mov rbx, 50
|
||||||
|
cmp rax, rbx ; больше → jge сработает
|
||||||
|
jge .label_jge
|
||||||
|
mov rdi, 5
|
||||||
|
mov rax, 60
|
||||||
|
syscall
|
||||||
|
|
||||||
|
.label_jge:
|
||||||
|
; jc — переход если перенос (CF=1)
|
||||||
|
; Установим CF через вычитание
|
||||||
|
mov rax, 5
|
||||||
|
mov rbx, 10
|
||||||
|
cmp rax, rbx ; 5 < 10 → CF = 1
|
||||||
|
jc .label_jc
|
||||||
|
mov rdi, 6
|
||||||
|
mov rax, 60
|
||||||
|
syscall
|
||||||
|
|
||||||
|
.label_jc:
|
||||||
|
; jnc — переход если нет переноса
|
||||||
|
mov rax, 10
|
||||||
|
mov rbx, 5
|
||||||
|
cmp rax, rbx ; CF = 0
|
||||||
|
jnc .label_jnc
|
||||||
|
mov rdi, 7
|
||||||
|
mov rax, 60
|
||||||
|
syscall
|
||||||
|
|
||||||
|
.label_jnc:
|
||||||
|
; jne — переход если не равно
|
||||||
|
mov rax, 1
|
||||||
|
mov rbx, 2
|
||||||
|
cmp rax, rbx ; не равно → ZF=0 → jne сработает
|
||||||
|
jne .label_jne
|
||||||
|
mov rdi, 8
|
||||||
|
mov rax, 60
|
||||||
|
syscall
|
||||||
|
|
||||||
|
.label_jne:
|
||||||
|
; Безусловный короткий переход
|
||||||
|
jmp .label_done
|
||||||
|
|
||||||
|
; Если сюда попали — ошибка
|
||||||
|
mov rdi, 9
|
||||||
|
mov rax, 60
|
||||||
|
syscall
|
||||||
|
|
||||||
|
.label_done:
|
||||||
|
; Успешный выход
|
||||||
|
mov rdi, 0
|
||||||
|
mov rax, 60 ; sys_exit
|
||||||
|
syscall
|
||||||
102
jcc/короткие_переходы.квс
Normal file
102
jcc/короткие_переходы.квс
Normal file
|
|
@ -0,0 +1,102 @@
|
||||||
|
.глобал _start
|
||||||
|
|
||||||
|
.текст
|
||||||
|
_start:
|
||||||
|
; Подготовка: раикс = 5, рбикс = 5 → сравнение → ZF=1
|
||||||
|
переместить_имм раикс, 5
|
||||||
|
переместить_имм рбикс, 5
|
||||||
|
сравнить раикс, рбикс
|
||||||
|
|
||||||
|
; короткий_переход_если_равно
|
||||||
|
короткий_переход_если_равно метка_je
|
||||||
|
|
||||||
|
; Ошибка (не должно сработать)
|
||||||
|
переместить_имм рдиай, 1
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
|
|
||||||
|
метка_je:
|
||||||
|
переместить_имм раикс, 10
|
||||||
|
переместить_имм рбикс, 20
|
||||||
|
сравнить раикс, рбикс
|
||||||
|
|
||||||
|
; короткий_переход_если_меньше
|
||||||
|
короткий_переход_если_меньше метка_jl
|
||||||
|
переместить_имм рдиай, 2
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
|
|
||||||
|
метка_jl:
|
||||||
|
; короткий_переход_если_больше
|
||||||
|
переместить_имм раикс, 30
|
||||||
|
переместить_имм рбикс, 20
|
||||||
|
сравнить раикс, рбикс
|
||||||
|
короткий_переход_если_больше метка_jg
|
||||||
|
переместить_имм рдиай, 3
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
|
|
||||||
|
метка_jg:
|
||||||
|
; короткий_переход_если_меньше_или_равно
|
||||||
|
переместить_имм раикс, 15
|
||||||
|
переместить_имм рбикс, 15
|
||||||
|
сравнить раикс, рбикс
|
||||||
|
короткий_переход_если_меньше_или_равно метка_jle
|
||||||
|
переместить_имм рдиай, 4
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
|
|
||||||
|
метка_jle:
|
||||||
|
; короткий_переход_если_больше_или_равно
|
||||||
|
переместить_имм раикс, 100
|
||||||
|
переместить_имм рбикс, 50
|
||||||
|
сравнить раикс, рбикс
|
||||||
|
короткий_переход_если_больше_или_равно метка_jge
|
||||||
|
переместить_имм рдиай, 5
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
|
|
||||||
|
метка_jge:
|
||||||
|
; короткий_переход_если_перенос
|
||||||
|
переместить_имм раикс, 5
|
||||||
|
переместить_имм рбикс, 10
|
||||||
|
сравнить раикс, рбикс
|
||||||
|
короткий_переход_если_перенос метка_jc
|
||||||
|
переместить_имм рдиай, 6
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
|
|
||||||
|
метка_jc:
|
||||||
|
; короткий_переход_если_нет_переноса
|
||||||
|
переместить_имм раикс, 10
|
||||||
|
переместить_имм рбикс, 5
|
||||||
|
сравнить раикс, рбикс
|
||||||
|
короткий_переход_если_нет_переноса метка_jnc
|
||||||
|
переместить_имм рдиай, 7
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
|
|
||||||
|
метка_jnc:
|
||||||
|
; короткий_переход_если_неравно
|
||||||
|
переместить_имм раикс, 1
|
||||||
|
переместить_имм рбикс, 2
|
||||||
|
сравнить раикс, рбикс
|
||||||
|
короткий_переход_если_неравно метка_jne
|
||||||
|
переместить_имм рдиай, 8
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
|
|
||||||
|
метка_jne:
|
||||||
|
; короткий_переход (безусловный)
|
||||||
|
короткий_переход метка_done
|
||||||
|
|
||||||
|
; Ошибка — сюда не должны попасть
|
||||||
|
переместить_имм рдиай, 9
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
|
|
||||||
|
метка_done:
|
||||||
|
; Успешный выход
|
||||||
|
переместить_имм рдиай, 0
|
||||||
|
переместить_имм раикс, 60
|
||||||
|
вызов_системы
|
||||||
Loading…
Reference in a new issue