Add files via upload

This commit is contained in:
artradeskz 2025-10-29 13:20:30 +03:00 committed by GitHub
parent c86d5ed12e
commit 7035bcc531
3 changed files with 2311 additions and 0 deletions

2106
jcc/asm24.py Normal file

File diff suppressed because it is too large Load diff

103
jcc/short_jumps.asm Normal file
View 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

View 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
вызов_системы