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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
adsllinkact



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JFK2005
У меня базового английского нет.
Я не знал слов below - above, less - greater (последнее знал как великий).
Но при этом знал little - big, low - high, small - large.

Всего записей: 179 | Зарегистр. 20-11-2013 | Отправлено: 20:00 11-03-2024
MBK2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это вы зря.
В программировании (да еще и системном) без базового английского никак. Ну, максимум, на что можно рассчитывать - пресловутый "программист 1С", да и то...

Всего записей: 4577 | Зарегистр. 18-09-2018 | Отправлено: 09:10 12-03-2024
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Есть программа, вычисляющая сумму элементов массива и выводящая их по одному через пробел на экран посредством printf в цикле
Перед вызовом printf я сохраняю регистр rcx в переменную, а после вызова обратно восстанавливаю.
Это прекрасно работает.
Но если я пытаюсь rcx затолкать в стек, и затем восстанавливать (в коде это закоменнтированные строки), то все валится. Кто-то может объяснить, в чем дело? Я понимаю, что где-то в регистре флагов произошли изменения, но они по идее не должны были влиять на работу цикла
Компилятор MASM64
 

Код:
 
        .data  
intArray     qword 11,23,56,12,78,89,23,0,77,0
rcxSaved   qword 0
Sum           qword 0
fmtStr        db 'Sum: %d',0
msgStr      byte   "Your array elements: ", nl, 0
fmtStr1      byte   "%d ", 0
 
        .code
                public main
main proc
            lea     rcx, msgStr
            call    printf
 
        mov rdi, OFFSET intArray
        mov rcx, LENGTHOF intArray
        mov rbx, 0
L1:
        add  rbx, [rdi]
        mov rdx, [rdi]
        ;push    rcx
        mov rcxSaved, rcx
        lea     rcx, fmtStr1
            call    printf
        ;pop     rcx
        mov rcx, rcxSaved
        add rdi, TYPE intArray
        loop L1
            
        mov rcx, 10
        call    putchar    
 
        mov rdx, rbx
        lea rcx, fmtStr
        call printf
 
        ret ;Returns to caller
main         endp
            end


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

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 13:00 14-03-2024 | Исправлено: TeXpert, 13:05 14-03-2024
MBK2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У вас чтото со стеком не то. Возможно, printf не подчищает за собой.

Всего записей: 4577 | Зарегистр. 18-09-2018 | Отправлено: 13:06 14-03-2024
TeXpert



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

Цитата:
У вас чтото со стеком не то. Возможно, printf не подчищает за собой.
 
Не согласен. Писал же, в приведенном варианте прекрасно работает


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

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 13:23 14-03-2024
MBK2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
Ну вы ж не проверяли. Возможно он при работе вам потихонечку стек засирает, но цикл недостаточно длинный, дабы положение стало критическим.
А в случае с pop rcx сразу цикл ломается

Всего записей: 4577 | Зарегистр. 18-09-2018 | Отправлено: 13:48 14-03-2024
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MBK2, это крайне маловероятно — во-первых, printf таки не самопальная функция, во-вторых, многие хту функцию используют подобным образом


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

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 13:53 14-03-2024
MBK2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
Ну при данном методе анализа имени бабы Ванги, эта гипотеза является единственным рациональным обьяснением демонстрируемого анамнеза.
Правильный способ в данном случае - открыть отладчик и сразу увидеть причину, хотя, конечно понимаю вас, это неспортивно, вся интрига теряется.

Всего записей: 4577 | Зарегистр. 18-09-2018 | Отправлено: 13:57 14-03-2024
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хумор, конечно, это хорошо, однако я полагаю, что здесь попадаются и мастера, для которых данная ситуация вполне очевидна, в смысле причин, ее вызвавших

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

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 14:05 14-03-2024
MBK2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
Очевидно здесь только то, что в постановке задачи не хватает данных - неясна конкретная реализация функции printf и ее поведение со стеком. Я вполне допускаю, что она может не только иметь более одного параметра, но и брать их со стека, а так же требовать подчистки его за собой. Это вам не си, где все делается автоматически.
Ну и, разумеется, неясно ваше упорное нежелание лезть в отладчик, совершенно очевидное действие для любого мастера.

Всего записей: 4577 | Зарегистр. 18-09-2018 | Отправлено: 14:10 14-03-2024
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MBK2, странно, я достаточно ведь дал информацию — printf тут стандартная (а вы говорите о неясной реализации), от Microsoft, из msvcrt, и она стандартная, C-шная!
Чего там допускать, что она может иметь много аргументов — она это точно может
 
И мне неясно ваше упорное желание залезть в отладчик — что я там увижу? Порчу стека? И что? Я выясню при этом все подробности? Да нифига! Выясню лишь, что она портится, но насколько и как — нет. Тут точное описание нужно


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

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 14:26 14-03-2024
MBK2

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

Цитата:
от Microsoft, из msvcrt, и она стандартная, C-шная!

Там дофига нюансов может быть в зависимости от флагов компиляции/линковки.

Цитата:
что я там увижу? Порчу стека? И что?

Вставите после вызова add rsp,... и это и будет решением задачи, вместо того, чтобы гадать на кофейной гуще.  
Повторяю, это только одно из предположений (тоже кстати, не самое убедительное), а на самом деле там все что угодно может быть.
Раз уж вы не хотите совершать конструктивные действия, продолжим поднимать настроение минуткой хумора.
Представьте, хирург разрезал пациента, а дальше не знает что делать, пишет на медицинский форум. Там ему отвечают - мол, ты хоть фотку пришли, чего там? А он - не, подожду нормальных профессионалов, которые и так знают причину - кишки стандартные человеческие...  

Всего записей: 4577 | Зарегистр. 18-09-2018 | Отправлено: 14:52 14-03-2024 | Исправлено: MBK2, 14:53 14-03-2024
TeXpert



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

Цитата:
Там дофига нюансов может быть в зависимости от флагов компиляции/линковки
Про особые флаги я бы написал. Все они по умолчанию
 
А по хумору — не изоморфная у вас аналогия. Поясняю: автомобиль и самолет. Первый можно остановить и покопаться под капотом, со вторым подобный фокус не пройдет

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

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

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
Ну тогда обьясните, что мешает вам в данном конкретном случае загрузить вашу программу в x64dbg и покопаться под капотом сделать десяток шагов?

Всего записей: 4577 | Зарегистр. 18-09-2018 | Отправлено: 15:15 14-03-2024
Prober

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert, в момент вызова функции (команда call) стек должен быть выровнен на 16 байтов. Если без push/pop это соблюдалось, то при их добавлении выравнивание сломается. Подробности смотрите в гугле.

Всего записей: 681 | Зарегистр. 01-11-2006 | Отправлено: 17:51 14-03-2024
JFK2005



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

Код:
; Create a stack-frame, re-aligning the stack to 16-byte alignment before calls
    push rbp
 
    mov    rdi, fmt
    mov    rsi, message
    mov    rax, 0
 
    ; Call printf
    call printf wrt ..plt
     
    pop    rbp        ; Pop stack
 

Всего записей: 2060 | Зарегистр. 26-10-2005 | Отправлено: 19:57 17-03-2024
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JFK2005, в моем случае аргументов у printf не более 4-х и они передаются через rcx, rdx, r8 и r9
Также поигрался с парой инструкций sub 56/add 56, безрезультатно

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

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

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

Цитата:
...в момент вызова функции (команда call) стек должен быть выровнен на 16 байтов.
...

Плюс ещё должен быть запас из 0х20 байт для места где сохранить аргументы, которые в rcx, rdx, r8 и r9.
Абсолютный минимум для main в данном случае:
sub rsp, 28h
...
call printf
...
add rsp, 28h
ret
 
Если арументов у функции больше 4, запас, соответственно должен быть больше и тоже выровнен на 16 байт.
Masm не пригоден для программирования на 64 битах, так как самому приходится каждый раз это вычислять для каждой функции.

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

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

Цитата:
Masm не пригоден для программирования на 64 битах, так как самому приходится каждый раз это вычислять для каждой функции.
:O
приплыли, т.е допрограммировались...

Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 10:41 18-03-2024 | Исправлено: akaGM, 10:44 18-03-2024
TeXpert



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


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

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 12:59 18-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