Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert

Цитата:
Маэстро слегка погорячился
если это мне, то маэстры все в парижах италиях...

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 13:05 18-03-2024
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Цитата:
если это мне...
Це было не вам)


----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 15:43 18-03-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
 
я и говорю: в правилах есть исключения и маэстры иногда русифицируются ака встречаются среди нас...

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 16:29 18-03-2024
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Штирлиц никогда ещё небыл так далеко от провала :)

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 10:27 19-03-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Максим Максимыч, а теперь по существу ;)
 
раньше рабоче-крестьянин (я) мог звать функи очень просто, как-то так:

Код:

        push    ax
        call    __cdecl_proc
        add     sp, 2
...
        push    ax
        push    bx
        call    __pascal_proc ; "ret 4" -- the last instruction

с настрокой/корректировкой указателя sp внутри них...
 
а теперь что? ;)

Всего записей: 24116 | Зарегистр. 06-12-2002 | Отправлено: 13:32 19-03-2024
MBK2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я просто оставлю это здесь

Всего записей: 4571 | Зарегистр. 18-09-2018 | Отправлено: 13:46 19-03-2024
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А теперь в начале sub rsp, xxx и в конце add rsp, xxx, и всё.

Код:
 
; ml64 test64.asm /link /ENTRY:main msvcrt.lib
EXTERNDEF printf:PROC
 
.const
intArray dd 11,23,56,12,78,89,23,0,77,0
fmtStr    db 10,"Sum: %d",10,0
msgStr    db "Your array elements: ",10,0
fmtStr1    db "%d ",0
 
.code
main PROC
;    push rbx
;    push rsi
    mov [rsp +   8], rbx
    mov [rsp + 10h], rsi
    sub rsp, 28h
 
    lea rcx, msgStr
    call printf
 
    xor ebx, ebx
    lea rsi, intArray
L1:
    lodsd
    add ebx, eax
    mov edx, eax
    lea rcx, fmtStr1
    call printf
    lea rcx, intArray + SIZEOF intArray
    cmp rsi, rcx
    jb L1
 
    mov edx, ebx
    lea rcx, fmtStr
    call printf
 
    add rsp, 28h
    mov rbx, [rsp +   8]
    mov rsi, [rsp + 10h]
;    pop rsi
;    pop rbx
    ret
main ENDP
END
 
 

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 13:47 19-03-2024
MBK2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens

Цитата:
mov [rsp +   8], rbx
    mov [rsp + 10h], rsi
    sub rsp, 28h

 
Как то очково. Лично я б наоборот сделал.

Всего записей: 4571 | Зарегистр. 18-09-2018 | Отправлено: 15:12 19-03-2024
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По адресам rsp+8, rsp+16, rsp+24, rsp+32 в вызываемой функции и есть то свободное место для сохранения регистровых аргументов. Если аргументы сохранять нет необходимости, это место можно исползовать для других нужд, в этом случае для хранения сохраняемых регистров rbx, rsi.  

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 15:23 19-03-2024
MBK2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
Сперва инициализируем локальные переменные, затем отводим под них место? "Л"-Логика.

Всего записей: 4571 | Зарегистр. 18-09-2018 | Отправлено: 15:36 19-03-2024
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это не локальные переменные, а то место на стеке, где находились бы arg0, arg1, arg2 и arg3, если они были бы стековыми а не регистровыми. Место, которое выделяет caller.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 16:04 19-03-2024
MBK2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
Откуда у вас такая уверенность, что находится на стеке перед вызовом main?

Всего записей: 4571 | Зарегистр. 18-09-2018 | Отправлено: 18:22 19-03-2024
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А откуда уверенность, что надо ехать на зелёный а стоять на красный?
При вызове подпрограмм существуют правила, Application Binary Interface называется.
И в программах пользователя, и в загрузчике программ, и в ядре они одинаковые.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 20:56 19-03-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru