Перенос stepik в подпапку
This commit is contained in:
29
stepik_base/is_digit/.vscode/launch.json
vendored
Normal file
29
stepik_base/is_digit/.vscode/launch.json
vendored
Normal 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
53
stepik_base/is_digit/.vscode/tasks.json
vendored
Normal 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
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
79
stepik_base/is_digit/is_digit.asm
Normal file
79
stepik_base/is_digit/is_digit.asm
Normal 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
|
||||
Reference in New Issue
Block a user