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