Как выучить язык ассемблера?
Посоветуйте какие-нибудь ресурсы по изучению
Как мне найти возраст файла?
3 * 24 * 60 * 60 * 10000000
100-наносекундных интервала (в таких единицах измеряется FILETIME).invoke GetFileTime, hFile, addr ftCreate, NULL, NULL
invoke GetSystemTimeAsFileTime, addr ftNow
mov eax, ftNow.dwHighDateTime
sub eax, ftCreate.dwHighDateTime
cmp eax, (3 * 24 * 60 * 60 * 10000000 / 0x100000000)
jg <файл старше 3 дней>
/* иначе файл младше 3 дней */
mov eax, ftNow.dwHighDateTime
sub eax, ftCreate.dwHighDateTime
cmp eax, (3 * 24 * 60 * 60 * 10000000 / 0x100000000)
jg <файл старше 3 дней>
jl <файл младще 3 дней>
mov eax, ftNow.dwLowDateTime
sub eax, ftCreate.dwLowDateTime
cmp eax, (3 * 24 * 60 * 60 * 10000000 % 0x100000000)
jg <файл старше 3 дней>
/* иначе файл младше 3 дней */
пишет, что не может найти "efi.h", хотя он есть в папке inc из Makefile
inc
определённую в 7й строке, то ты её нигде не использовал, а сами по себе переменные с произвольными именами в Makefile ничего не значат.gcc -fshort-wchar -I -I/ -I/usr/include -O2 -Wall -fpic -DEFI_FUNCTION_WRAPPER -ffreestanding -nostdlib -c main.c -o main.o main.c:1:10: фатальная ошибка: efi.h: Нет такого файла или каталога
-I
ты не указал своего каталога inc
, как по-твоему компилятор должен понять, что efi.h
нужно там искать?-I$(EFIINC)
EFIINC
, откуда ты ожидаешь что она возьмётся?inc
на EFIINC
, lib
на EFILIB
, crtobj
на CRTOBJ
и т. д. что значит код
ubfx r0, r0, #1, #1
-- извлечь битовое поле шириной 1 бит (правая единица) начиная с бита №1 (левая единица) из регистра r0 (правый r0) и поместить результат в r0 (левый r0).bx lr
-- перейти по адресу в регистре lr, обычно это возврат из подпрограммы.какая между ними разница
ubfx r0, r0, #1, #1
ubfx r0, r0, #2, #1
что я делаю не так
Вот, что я попытался сделать:
push word 0 pop es mov bx, 0x11*2+0xF000 mov word [es:bx], int10-$$
Я пытался гуглить, всю ночь потратил, …
проблема в отсутствии информации
В микропроцессорах Intel 8086/80186 таблица векторов прерываний расположена в первом килобайте памяти начиная с адреса 0000:0000 и содержит 256 векторов прерываний в формате сегмент:смещение.
boot:
push word 0
pop es
mov bx, 0x11*4
mov word [es:bx + 2], cs
mov word [es:bx], int10
откуда прерывания знают адрес, куда им вернуть результат.
Прерывание в коде int 21h и прочие Это какое?
int
-- программное. В отличие от прерывания, инициируемого уровнем или фронтом сигнала подключённого к контроллеру прерываний.выполнение прерывания std::cin>>line; Может и сутки длиться.
std::cin >>line
в конце концов превращается в системный вызов read
.Вот как по пунктам для этой команды. (С условием что есть еще 1 поток жаждущий ЦП).
cat /proc/<PID>/stack
и увидеть следующую картину:[<0>] wait_woken+0x67/0x80
[<0>] n_tty_read+0x426/0x5a0
[<0>] tty_read+0x135/0x240
[<0>] new_sync_read+0x115/0x1a0
[<0>] vfs_read+0xf4/0x180
[<0>] ksys_read+0x5f/0xe0
[<0>] do_syscall_64+0x33/0x80
[<0>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
Как происходит доступ к эл. массива на уровне ядра?
Например массив Int* arr = new int[1024*1024*1024] он как храниться?
А физическая, для массива то же? Ведь, так будет доступ намного быстрее?
получается эмулятор каждый адрес вычислять что ли?
Для процессора x86 с word 32bit. Как будут выполняться fetch?
Хочу ответ в таком формате.
почему процессор обращается 2 раза к невыравненным данным?
Please specify the compatibility level in debian/compat or via Build-Depends: debhelper-compat (= X)
Искал в тексте упоминания debhelper-compat, но не нашел.
Build-Depends: debhelper-compat (= 13), texi2html, texinfo
Часто вижу в коде на C++ и C#, что для счётчиков … используют int, а не uint/unsigned int.
Почему праграмисты делают это?
"$str2$str1"
'/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt "FCCPS-CSQ - loggedinagents"'
подскажите, как это победить
#!/bin/bash
set -x
#Запуск скрипта в формате ./csqstats CSQ_name param
str1="$1 - $2"
str2="/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt"
$str2 "$str1"
почему нельзя занести этот бит в регистр без сдвига, зачем это придумано
UCSRA |= (1<<U2X);
UCSRA |= U2X;
. В ассемблерном коде avr оба эти варианта превратятся в инструкцию sbi UCSRA, 1
, устанавливающую бит в регистре по номеру.Почему программа каждый раз занимает различные области памяти?
/proc/sys/kernel/randomize_va_space
либо командой setarch -R
для одного конкретного процесса. Отладчик gdb по умолчанию отключает ASLR для отлаживаемых программ. На виндовс, icore 5 процессоре вот сейчас, какой тип памяти работает. И какой тип виртуальной памяти на Risc 5 архитектурах.
Вот запускается программа. Что происходит. Типа создается процесс, в MMU в таблице страниц генерируется номер страницы PID>>24 + 0x4000000h адрес примерно. И заноситься в таблицу (https://ru.bmstu.wiki/MMU_(Memory_Management_Unit) ) Создаются типа страницы для данных. Окей
PID>>24 + 0x4000000h
, это вообще что?как программа вообще может в такой системе вызвать функцию из внешней библиотеки
Что за таблица дескрипторов. Где она находиться.
Как связана с таблицей страниц?
Что в конечном итоге храниться TLB буфере????