![]() |
|
|
![]()
|
|
| Trail |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.11.2009 Репутация: нет Всего: нет |
Ребята помогите решить вот такую задачку из несколько строчек(Но там где мне надо её решате не совсем assembler а просто программа в ней заложены основы assemblera.:
Нужно сделать цикл с командой call вот в таком виде :
Это сообщение отредактировал(а) Trail - 30.4.2010, 16:53 |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
Для чего (какого компилятора или отладчика) пишем?
Для TurboDebuger? И вообще не понятнго что должно делать программа... -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| Trail |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.11.2009 Репутация: нет Всего: нет |
Я мало че знаю об этой программе но это эмулятор для аппаратного программирования.Система команд на ассемблере МП КП580 .Суть лабораторной выяснить на осцилографе как действует команда call с адрессом 0300h.Программа должна осуществлять каманду call следовательно запись в стек и переход на указанный адресс и что-бы было все в цикле.Да только не знаю если должен быть переход на адресс 0300h а пишу я на адрессе 0005h то между ними огромное количество строк и цикл замкнуть не получается т.к. он переходит на этот адресс и дальше начинает переползать. А переход с call должен обезательно осуществлятся на адресс 0300h вот такое хитрое задание(
Это сообщение отредактировал(а) Trail - 30.4.2010, 19:21 |
|||
|
||||
| ФедосеевПавел |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 7.2.2009 Репутация: нет Всего: 10 |
Можно использовать директиву ассемблера org или подобную директиву
|
|||
|
||||
| Trail |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.11.2009 Репутация: нет Всего: нет |
Павел спасибо за совет.Очень подошел.Вот только команда ret почему-то не возвращает на строку jmp next
Вот листинг. Кстати если заменить ret на безусловный переход тоже почему-то не действует может у этих двух команд (org и jmp большое расстояние?Но компилятор не ругается.)
Вот скрин отладчика Это сообщение отредактировал(а) Trail - 30.4.2010, 21:05 |
|||
|
||||
| ФедосеевПавел |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 7.2.2009 Репутация: нет Всего: 10 |
Вообще-то, ret должна возвращать на jmp next. Может, перед call инициализировать указатель стека SP (кажется, ldi sp, xxxx).
|
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 5 Всего: 16 |
Чему бы не ровнялся SP, код приведенный выше должен работать.
Может быть регистр SS указывает не на сегмент стека, а например на область данных ПЗУ BIOS в вершней памяти и соответственно значение не может быть сохранено в этой области... -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| ФедосеевПавел |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 7.2.2009 Репутация: нет Всего: 10 |
iff, это совсем другой процессор - в нём ещё нет деления на сегменты. Они появятся в следующем поколении...
Trail, я не сразу сообразил как посмотреть изображение отладчика (Opera не открывала сразу)... По адресу 0300h там нет команды ret. Она почему-то не загрузилась... В этом-то видимо и есть ошибка - там в отладчик загружена совсем другая программа, отличная от описанной в твоём посте от 30.4.2010, 20:42. Это сообщение отредактировал(а) ФедосеевПавел - 1.5.2010, 19:35 |
|||
|
||||
| Trail |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.11.2009 Репутация: нет Всего: нет |
Стр. Адрес Код Мнемоники ---- ------- ---- --------- 0001 0000 :next 0002 0000 CD 00 03 call 0300h 0003 0003 C3 00 00 jmp next 0004 0006 org 0300h ;указатель адресса 0005 0300 16 00 mvi d,0 0006 0302 C9 ret 0007 0303 В листинге по адресу 0302h стоит шест.символ С9 Как я понял он в память заносит это значение.А когда я смотрю память там нету по адресу 0302h ничего.Зато С9 есть в памяти по адресу последнему в коде. Вот скрин: ![]() Это сообщение отредактировал(а) Trail - 4.5.2010, 11:59 |
|||
|
||||
| ФедосеевПавел |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 7.2.2009 Репутация: нет Всего: 10 |
Если это ещё актуально, то приходит ну ум пара вариантов решения.
1. Возможно, ты не полностью разобрался с загрузкой в эмулятор или с параметрами выходного файла компилятора. Т.к. листинг выглядит ожидаемо. 2. Если загрузить в эмулятор нужным образом не представляется возможным - "насильно" загрузить нужные байты по адресу 300h или, разбив программу на две части, в два этапа. 3. Возможно, саму программу следует записать так, чтобы это был непрерывный блок, и ret находился по адресу 300
Пожалуй, ничего не смогу больше добавить. |
|||
|
||||
| Trail |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 22.11.2009 Репутация: нет Всего: нет |
Всем большое спасибо.Разобрался.Оказывается надо стек прописать потому-что память очень маленькая и стек в ней теряется.А вообще прокатило без адресса 0300h.Буду мучаться со следующей лабой там прерывание надо проанализировать)))
Это сообщение отредактировал(а) Trail - 6.5.2010, 18:54 |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |