Архив рубрики: Без рубрики

Исходные коды (архитектура ARM, неделя 3, май 2024)

НазваниеРазмерИзменён
test.c1558 байт895 дн. 11 час. назад
test.ld274 байт895 дн. 11 час. назад
vectors.S1012 байт895 дн. 11 час. назад

Исходные коды (архитектура ARM, неделя 2, май 2024)

НазваниеРазмерИзменён
test.c1174 байт902 дн. 8 час. назад
test.ld274 байт902 дн. 8 час. назад
vectors.S1012 байт902 дн. 8 час. назад

Исходные коды (архитектура ARM, неделя 3, февраль 2024)

НазваниеРазмерИзменён
CMakeLists.txt2642 байт986 дн. 9 час. назад
cpu.h127 байт986 дн. 8 час. назад
cpu_a9.h487 байт986 дн. 8 час. назад
create-sd.sh593 байт986 дн. 8 час. назад
cstart.c985 байт986 дн. 8 час. назад
gic.c1261 байт986 дн. 8 час. назад
gic.h2634 байт986 дн. 8 час. назад
irq.c715 байт986 дн. 8 час. назад
irq.h304 байт986 дн. 8 час. назад
linkscript.ld893 байт986 дн. 8 час. назад
startup.s1681 байт986 дн. 8 час. назад
uart_pl011.c2776 байт986 дн. 8 час. назад
uart_pl011.h2167 байт986 дн. 8 час. назад

Исходные коды (архитектура ARM, неделя 2, февраль 2024)

НазваниеРазмерИзменён
CMakeLists.txt2632 байт993 дн. 9 час. назад
cpu.h127 байт993 дн. 9 час. назад
cpu_a9.h487 байт993 дн. 9 час. назад
create-sd.sh593 байт993 дн. 9 час. назад
cstart.c985 байт993 дн. 9 час. назад
gic.c1261 байт993 дн. 9 час. назад
gic.h2634 байт993 дн. 9 час. назад
irq.c715 байт993 дн. 9 час. назад
irq.h304 байт993 дн. 9 час. назад
linkscript.ld893 байт993 дн. 9 час. назад
startup.s1679 байт993 дн. 9 час. назад
uart_pl011.c2759 байт993 дн. 9 час. назад
uart_pl011.h2167 байт993 дн. 9 час. назад

Исходные коды (stepik, урок 1.3, архитектура x86, неделя 2, февраль 2024)

Урок 1.3, задача 3.

// Теперь более сложное задание. Вам требуется написать функцию pow, которая принимает на вход два беззнаковых числа x и p (в регистрах RDI и RSI соответственно) и возвращает значение x^p (x в степени p) в регистре RAX. Гарантируется, что x и p не могут быть равны 0 одновременно (по отдельности они все еще могут быть равны 0). Также гарантируется, что ответ помещается в 64 бита.

// ВАЖНО: не забудьте, что кроме инструкций условного перехода (jcc) есть и инструкция безусловного перехода jmp - она может вам пригодиться.

pow:
    // Put your code here
CMP $0,%RDI
JZ  null_number
CMP $0,%RSI
JZ  null_power


MOV %RDI,%RAX
MOV %RSI,%RBX
compute_power:
CMP $1,%RBX
JE  func_end
MUL %RDI
DEC %RBX
JMP compute_power


null_power:
MOV $1,%RAX
JMP func_end
null_number:
MOV $0,%RAX

func_end:
ret

 

 

Исходные коды (stepik, уроки 1.2 и 1.3, архитектура x86, неделя 5, январь 2024)

Урок 1.2, задача 4

// В регистрах RSI и RDX вам даны два числа, ваша задача поменять их местами, как и в одном из предыдущих заданий. Но добавляется условие, что все остальные регистры общего назначения должны остаться неизменными. Т. е. если вы используете какой-то регистр общего назначения кроме RSI и RDX, то вы должны сохранить и затем восстановить сохраненное значение регистра (ну или не пользоваться этими регистрами вовсе).

// Вам разрешено пользоваться следующими регистрами общего назначения: RAX, RBX, RCX, RDX, RBP, RDI, RSI, R8 - R15.

// В задании предполагается использование стека, но вы должны восстановить стек в исходное состояние.

// Put your code here
PUSH %RSI
PUSH %RDX
POP  %RSI
POP  %RDX

Урок 1.3, задача 1

// А теперь ваша задача написать функцию swap. Функция принимает на вход два указателя на 64-битные числа (в регистрах RDI и RSI) и должна обменять значения в памяти.

// ВАЖНО: функция принимает указатели на значения, которые нужно обменять, а не сами значения, т. е. не забудьте, что чтобы добраться до значений указатели нужно разыменовать. 

swap:
    // Put your code here
PUSH (%RDI)
PUSH (%RSI)
POP  (%RDI)
POP  (%RSI)
RET

Урок 1.3, задача 2

// Попробуйте по аналогии с примером в лекции написать функцию, возвращающую минимум из двух переданных ей аргументов. Аргументы (беззнаковые целые числа) передаются в регистрах RDI и RSI. Результат работы функции должен быть сохранен в регистре RAX.

min:
    // Put your code here
MOV %RDI,%RAX
CMP %RSI,%RAX
JB rax_below  
MOV %RSI,%RAX

rax_below:
RET

 

 

 

Исходные коды (архитектура ARM, неделя 5, январь 2024)

НазваниеРазмерИзменён
CMakeLists.txt2632 байт999 дн. 22 час. назад
cpu.h127 байт999 дн. 22 час. назад
cpu_a9.h487 байт999 дн. 22 час. назад
create-sd.sh593 байт999 дн. 22 час. назад
cstart.c985 байт999 дн. 22 час. назад
gic.c1261 байт999 дн. 22 час. назад
gic.h2634 байт999 дн. 22 час. назад
irq.c715 байт999 дн. 22 час. назад
linkscript.ld893 байт999 дн. 22 час. назад
startup.s1678 байт999 дн. 22 час. назад
uart_pl011.c2193 байт999 дн. 22 час. назад
uart_pl011.h1606 байт999 дн. 22 час. назад

Исходные коды (stepik, урок 1.2, архитектура x86, неделя 4, январь 2024)

Задача 2, урок 1.2

// Сложите два числа в регистрах RSI и RDX, результат должен быть в регистре RSI.

// Вам разрешено пользоваться следующими регистрами общего назначения: RAX, RBX, RCX, RDX, RBP, RDI, RSI, R8 - R15.

// В задании не предполагается использование стека, даже если вы знаете, что это такое.
// Put your code here
ADD %RDX,%RSI

Задача 3, урок 1.2

// В регистре RSI вам дано целое число - градусы по шкале Фаренгейта (Tf). 
// Напишите код, который получит в регистре RSI сответствующее значение по шкале Цельсия (Tc). 
// Формула для перевода из шкалы Фаренгейта в шкалу Цельсия:
// Tc=(5*(Tf-32))/9​

// ВАЖНО: в качестве операнда инструкций div и mul не может выступать просто число (a. k. a. immediate), т. е. вам придется загрузить делитель/множитель в регистр и использовать регистр.

// Так как мы не рассматривали операции с нецелыми числами, нужно отбросить нецелую часть результата и вернуть только целую. Кроме того гарантируется, что входное число и ответ будут беззнаковыми числами (более формально гарантируется, что
// 32<=Tf<=220

// Вам разрешено пользоваться следующими регистрами общего назначения: RAX, RBX, RCX, RDX, RBP, RDI, RSI, R8 - R15.

// В задании не предполагается использование стека, даже если вы знаете, что это такое.

// Put your code here
SUB $32,%RSI
MOV %RSI,%RAX
MOV $5,%RBX
MUL %RBX
MOV $9,%RBX
DIV %RBX
MOV %RAX,%RSI

 

Исходные коды (stepik, урок 1.2, архитектура x86, неделя 3, январь 2024)

// Напишите код, который обменивает значения в регистрах RSI и RDX. Т. е. если перед выполнением вашего кода в регистре RSI хранится число 1, а в регистре RDX хранится число 2, то после выполнения кода в регистре RSI должно храниться число 2, а в регистре RDX число 1.

// Вам разрешено пользоваться следующими регистрами общего назначения: RAX, RBX, RCX, RDX, RBP, RDI, RSI, R8 - R15.

// В задании не предполагается использование стека, даже если вы знаете, что это такое.

// Put your code here

MOV %RSI, %RAX
MOV %RDX, %RSI
MOV %RAX, %RDX

 

Исходные коды (архитектура ARM, неделя 3, январь 2024)

НазваниеРазмерИзменён
CMakeLists.txt2632 байт1013 дн. 22 час. назад
cpu.h127 байт1013 дн. 22 час. назад
cpu_a9.h487 байт1013 дн. 22 час. назад
create-sd.sh593 байт1013 дн. 22 час. назад
cstart.c977 байт1013 дн. 22 час. назад
gic.c1076 байт1013 дн. 22 час. назад
gic.h2493 байт1013 дн. 22 час. назад
linkscript.ld893 байт1013 дн. 22 час. назад
startup.s1678 байт1013 дн. 22 час. назад
uart_pl011.c2193 байт1013 дн. 22 час. назад
uart_pl011.h1606 байт1013 дн. 22 час. назад