Project

General

Profile

Ассемблер

Added by Natalia_multiclet over 11 years ago

Обсуждение, предложения, замечания


Replies (33)

RE: Ассемблер - Added by krufter_multiclet over 11 years ago

В текущем процессоре для 4-х клеток:

paragraph1:
    getl 5 - команда уйдёт в клетку 0
    getl 6 - команда уйдёт в клетку 1
    addl @2, #32 - команда уйдёт в клетку 2
    addl @2, #33 - команда уйдёт в клетку 3
    getl 123 - команда уйдёт в клетку 0
    getl 456 - команда уйдёт в клетку 1 и т.д.
complete

RE: Ассемблер - Added by trott over 11 years ago

могут ли команды
getl 5 - команда уйдёт в клетку 0
addl @2, #32 - команда уйдёт в клетку 2

выполнится по времени позже чем
getl 6 - команда уйдёт в клетку 1
addl @2, #33 - команда уйдёт в клетку 3

RE: Ассемблер - Added by krufter_multiclet over 11 years ago

Могут, только не в данном случае(в данном случае команды выполнятся одновременно).

Т.е. если первая команда параграфа будет длиться дольше чем вторая, то команда 4 выполнится быстрее чем третья, т.к. третья команда будет выполнена по готовности своего аргумента.

RE: Ассемблер - Added by trott over 11 years ago

Как вызвать ассемблерную процедуру из C? Как передать ей типы и значение параметров, порядок передачи параметров. Как получить результат выполнения ассемблерной процедуры?

RE: Ассемблер - Added by krufter_multiclet over 11 years ago

Можно написать некоторый код на ассемблере, а потом из Си вызвать этот код через функцию.
Для передачи параметров функции используется стек, подробности тут http://multiclet.com/community/projects/examples/wiki/%D0%9E%D0%B1%D0%B7%D0%BE%D1%80_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81%D0%BE_%D1%81%D1%82%D0%B5%D0%BA%D0%BE%D0%BC

В ассемблерной программе мы получаем значение переданное через стек функцией Си и адрес возврата. Выполняем какой-то алгоритм и если
функция на Си что-то должна возвращать, то записываем возвращаемое значение в стек и совершаем переход по адресу возврата:

    rdl #SP
    jmp @1

В следующей версии процессора можно будет и для индексных регистров сразу писать jmp #SP.
Если успею, то сегодня оформлю страничку http://multiclet.com/community/projects/examples/wiki/%D0%92%D1%8B%D0%B7%D0%BE%D0%B2_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_ASM_%D0%B8%D0%B7_%D0%A1%D0%B8.

В принципе вызов ассемблерной программы из Си достаточно просто после прочтения этой странички.

RE: Ассемблер - Added by sprin over 11 years ago

Про стек:

Предположим, есть некая функция: int64 Somefunc (int64 param1, int64 param2);
Можно ли передавать через стек данные в 8 байт? Как возвращать значение, если оно 8 байт?

RE: Ассемблер - Added by krufter_multiclet over 11 years ago

Через стек передавать можно, но текущий компилятор С89 не поддерживает тип int64.

RE: Ассемблер - Added by sprin about 11 years ago

1. mc-as.exe:

; Для #GPR выводит ошибку, хотя в "РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ. ПО" написано, что можно использовать
rdb #1 ; error: invalid register type for operation 'rdb'
rdl #1 ; error: invalid register type for operation 'rdl'
rdq #1 ; error: invalid register type for operation 'rdq'

2. В новом mc-as.exe команды типа "get(l, b)" для #IR останутся (хотя читать будут 8 байт) или в соответствии с "РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ. ПО" будет только "getq #IR" ?

3. Можете выложить новые версии mc-model.exe, mc-as.exe, mc-ld.exe?

(26-33/33)