Перенос stepik в подпапку

This commit is contained in:
Пытков Роман
2025-09-23 17:48:53 +03:00
parent 6a90ff02c8
commit 184eeb8525
22 changed files with 282 additions and 35 deletions

View File

@@ -0,0 +1,29 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch x64",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/build/is_digit",
"cwd": "${workspaceFolder}/build",
"preLaunchTask": "asm64",
},
{
"name": "(gdb) Launch x64",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/is_digit",
"cwd": "${workspaceFolder}/build",
"preLaunchTask": "asm64"
},
{
"name": "(gdb+gcc) Launch x64",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/is_digit",
"cwd": "${workspaceFolder}/build",
"preLaunchTask": "asm64+gcc"
}
]
}

53
stepik_base/is_digit/.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,53 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "asm64",
"type": "shell",
"command": [
"builddir=${workspaceFolder}/build;",
"mkdir -p $builddir;",
"rawfilename=$builddir/is_digit;",
"nasm -gdwarf -f elf64 -o $rawfilename.o ${workspaceFolder}/is_digit.asm;",
"ld -g -o $rawfilename $rawfilename.o;"
],
"problemMatcher": {
"pattern": {
"regexp": "error"
}
},
"presentation": {
"focus": true,
"panel": "dedicated",
"reveal": "silent",
"clear": true
},
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "asm64+gcc",
"type": "shell",
"command": [
"builddir=${workspaceFolder}/build;",
"mkdir -p $builddir;",
"rawfilename=$builddir/is_digit;",
"nasm -gdwarf -f elf64 -o $rawfilename.o ${workspaceFolder}/is_digit.asm;",
"gcc -o $rawfilename $rawfilename.o;"
],
"problemMatcher": {
"pattern": {
"regexp": "error"
}
},
"presentation": {
"focus": true,
"panel": "dedicated",
"reveal": "silent",
"clear": true
},
}
]
}

View File

@@ -0,0 +1,79 @@
global _start
section .data
g_buff times 10 db 0
g_buffLen dq 0
g_digit db "Digit"
g_digitLen dq $-g_digit
g_notDigit db "Not a digit"
g_notDigitLen dq $-g_notDigit
section .text
default rel
_start:
call read_text
movzx rax, byte [g_buff] ; первый символ
cmp rax, '0'
jl .notDigit
cmp rax, '9'
jg .notDigit
.digit:
lea rsi, [g_digit]
mov rdx, [g_digitLen]
jmp .write
.notDigit:
lea rsi, [g_notDigit]
mov rdx, [g_notDigitLen]
.write:
call write_text
mov rax, 60
mov rdi, 0
syscall
; Функция читает текст в буффер
; Регистры не изменяет
read_text:
push rax
push rdi
push rsi
push rdx
mov rax, 0 ; sys_read
mov rdi, 0 ; stdin
lea rsi, [rel g_buff] ; адрес буфера
mov rdx, 256 ; количество байт
syscall
mov [g_buffLen], rax
pop rdx
pop rsi
pop rdi
pop rax
ret
; Функция выводит buff
; In:
; - RSI - начало буфера
; - RDX - размер буфера
; Регистры не изменяет
write_text:
push rax
push rdi
push rsi
push rdx
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
syscall
mov [g_buffLen], rax
pop rdx
pop rsi
pop rdi
pop rax
ret