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 |
|