0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 209
|
|||||||||||
1 | |||||||||||
При записи в регистр меняется содержимое соседнего (ASM, Intel 8051)21.08.2015, 17:03. Показов 1567. Ответов 10
Метки нет (Все метки)
Здравствуйте
Я написал программу - в этом куске
а при занесении 5 в MCOD становится одновременно = 5 в Регистрах MCOD и MSUB, затем при занесении 3 в MSUB становится одновременно = 3 в Регистрах MCOD и MSUB, т.е неправильно. Помогите пожалуйста, понять в чем тут дело? тут полный текст модуля Кликните здесь для просмотра всего текста
0
|
21.08.2015, 17:03 | |
Ответы с готовыми решениями:
10
Определение минимального элемента в массиве (Intel 8051, ASM, Keil uVision4) С BASIC на ASM, 8051 8051+asm, нужна подсказка Стэк asm 8051 AT89C52 8051. Сравнение скорости ASM и С в симуляторе |
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
23.08.2015, 08:39 | 2 |
Так словами то расскажи как твоя программа работает.
Вот она стартовала, доползла от метки Init до jmp CommandOverride, прыгнула на метку CommandOverride, поползла дальше, выполнила или нет подпрограмму call TransmitData и вернулась если выполнила, выполнила подпрограмму call ReceiveData и вернулась, доползла до вот до этой ret и по ней вернулась куда ? К --- ?
1
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 209
|
|
23.08.2015, 09:51 [ТС] | 3 |
так она пока никак и не работает, это просто модуль, который вызывается из Main (я его в других своих вопросах опубликовывал)
а пока она ничегоне делает, кроме как заносить в регистры эти константы, (там ведьесть комментарии по каждой команде). Потом Добавлено через 2 минуты смысл вопроса - в том, что она почему-то заносит константу сразу в 2 регистра, хотя в первый регистр заносится все нормально. А я ведь все одинаково написал, и поэтомуне пойму, где у меня ошибка. Добавлено через 4 минуты Ну,так она в Main возвращается. Яего простоне стал помещать, чтобы столку не сбивать. Меня же только эти 3 оператора интересовали, которые заносят в регистры, но почему то один - нормально, а те 2 - попарно, хотя, мне кажется, синтаксис везде одинаковый?
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
24.08.2015, 06:07 | 4 |
Нет. Если она из Main по call не вызывалась и пришла по jmp, то она по ret возвращается к ---. Смысла искать почему записывает в 2 регистра нет, если программа через зад написана. Она непредсказуемо исполнять будет черт знает что и писать при этом будет черт знает куда. И нету смысла выяснять почему именно сюда, а не туда и почему именно это, а не то.
Добавлено через 59 минут Я уже всю клавиатуру стер, объясняя, что ret с пустого стека скорей всего приведет к возврату на адрес 0. Т.е. через жопу возврат на Main, но будет. Да только на каждом обороте этого "через жопу" стек будет сдвигаться. А значит адрес возврата при вызове call ReceiveData будет писаться во все новые и новые адреса, заполняя собою память. MCON MCOD MSUB он тоже может заполнить, хотя это и не предсказуемо. Десять раз уже было сказано - если написано через жопу, то так и работает.
0
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 209
|
|
24.08.2015, 10:14 [ТС] | 5 |
c чего ты это взял ?
Добавлено через 1 минуту я выше писал об этом
0
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 209
|
|
24.08.2015, 11:18 [ТС] | 6 |
Он просто был один из группы, как выяснилось, состоящей из 4-х регистров. И данные заносится во все 4 почему-то.
Добавлено через 7 минут просто эти ячейки сгруппировались в группы по 4, 5, 2, 2 ячейки и запись в любую ячейку группы приводит к записи в остальные ячейки группы. А непонятно, какой признак их обьединяет? Определены они все одинаково.
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
25.08.2015, 17:50 | 7 |
С того, что просматривая по диагонали твой исходник вызова call на метку Init не увидел. Потому-что исходник не весь. Зато увидел такой комментарий
Есс-но после этого подумал, что это стартовая точка программы. Комментарий Start of code section и метка Init - что это может быть еще ?
Такие писания при прочтении на автомате игнорируются как безграмотные. Вызывается подпрограмма, а модуль - это не более чем кусок текста программы, компилируемый отдельно. Он может вообще не содержать кода или, наоборот, содержать кучу разных подпрограмм.
В результате всего этого я ошибся. Короче, как объясняешь, так тебя и понимают. Добавлено через 7 минут З.Ы. Если ты написал директиву .RSEG uni_CODE,code не надо комментировать ее ;Start of code section, Это все равно, что написать MAСЛО масляное ;МАСЛО МАСЛЯНОЕ Писать ADD AX,BX ; Прибавить BX к AX это и есть такое масло масляное. Комментировать надо три вещи - вехи в коде (например Секция_инициализации Главный_цикл Начал_передачу Обработка_прерывания_по приему) - входные_параметры/выходные_результаты (например Результат_рассчета_CRC_этой_подпрограммой_будет_в аккамуляторе) - неочевидные для других места (например Флаг_переноса_тут_нулевой_ибо_после_предыдущей_подпрограммы_это_всегда_так) Остальное другой программист прочитает и без твоих комментариев.
1
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 209
|
|
25.08.2015, 17:57 [ТС] | 8 |
НУ просто это учебный модуль, я его из MAIN сделал. Секция кода - это наверно, раздел где определяются сегменты памяти в PROM, ведь его область "сode"
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
25.08.2015, 17:59 | 9 |
Сообщение было отмечено design_m как решение
Решение
Проблема в том, что, судя по всему, программистов, которые бы работали с этими MCON MCOD MSUB здесь нет. Очень уж экзотический вариант камня. Так-что помочь тебе трудно.
1
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
25.08.2015, 22:18 | 10 |
На правах модератора:
0
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 209
|
||||||
26.08.2015, 11:45 [ТС] | 11 | |||||
покажи мне, в каком месте ты увидел, что я пишу
Добавлено через 5 минут уверяю тебя, она к -- вовсе не возвращается. И даже если бы и возвращалась к ---, это не имеет абсолютно никакого отношения к тому, что симулятор показывает изменение содиржимого сразу в 2х или 4 или 5 ячейках памяти. Этот кусок программы с записью в регистры абсолютно правильный, либо покажи мне, в чём заключается моя ошибка? Добавлено через 5 минут Как оказалось, написано вполне корректно и правильно работает. Добавлено через 1 минуту Уж корректнее меня обращаться невозможно. Добавлено через 2 минуты а давайте не путать попытки помочь с попытками возвыситься в собственных глазах за счет попытки унизить противника и указать ему на его ничтожество.
0
|
26.08.2015, 11:45 | |
26.08.2015, 11:45 | |
Помогаю со студенческими работами здесь
11
Формирователь меандра с частотой 36 кГц (8051, Proteus, ASM) При обновлении textbox меняется его содержимое Intel 8051 При повторном обращении к объекту меняется его содержимое Intel 8051. УСАПП Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |