1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
|||||||||||
1 | |||||||||||
Неправильный вывод из программы03.11.2016, 06:32. Показов 1522. Ответов 16
Метки нет (Все метки)
Всем доброго утра. Столкнулся с проблемой которую никак не могу понять.
Имеется код программы
Хотя программа
Излазил обе программы в отладчике, но так и не смог разобраться. Что то упускаю, но что не могу понять. Подскажите пожалуйста в чем проблема и как ее исправить. Заранее всем спасибо.
1
|
03.11.2016, 06:32 | |
Ответы с готовыми решениями:
16
Неправильный результат выполнения программы Неправильный вывод строки на ассемблере DOS неправильный вывод строки Неправильный код программы на TASM |
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
|
03.11.2016, 08:16 | 2 |
Плохо излаэил! Но понять немудрено.
Потому, что в первом примере, надо было, перед циклом, очистить регистр cx от мусора (мусор, твоё число 258). Во втором примере, в регистр cx, значение передаётся напрямую и затирает мусор, числом 3.
1
|
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
|
03.11.2016, 08:23 [ТС] | 3 |
XiloManX, большое спасибо помогло. Просто почему то в отладчике этого мусора не видно.
1
|
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
|
|
03.11.2016, 08:54 | 4 |
Не знаю точно, но наверно, отладчик перед отладкой, очищает регистры, поэтому и не видно. Просто имей ввиду, что: регистры, буферы м массивы, надо очищать заранее, перед использованием (если требуется), потому что там, почти всегда содержится мусор, который может вызывать проблемы.
1
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
|
03.11.2016, 11:27 | 5 |
Вы где только можно используете xor r,r - mov r,x, но только не вначале с регистром СХ.
1
|
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
|
03.11.2016, 12:03 [ТС] | 6 |
Constantin Cat, как исправить я уже понял и исправил. Неясным для меня остается одно, почему в отладчике не видно мусора. В подпрограмму передается AX=3, проходит один цикл для вывода как и положено и т.д. , т.е. регистры общего назначения в обоих программах (при выполнении подпрограммы) абсолютно идентичны, но результат при выполнении прерывания на вывод символа разный.
1
|
Эксперт Hardware
|
|
03.11.2016, 14:19 | 7 |
Сообщение было отмечено Manowar как решение
Решение
мановар, начальное значение регистров привязано к типу исполняемого файла.
Просмотреть их можно в отладчике 'AVPUtil' (TD здесь мухлюет): Код
; Файл типа COM --------- AX 0000 CX 00FF DS:SI 2075:0100 CS:IP 2075:0100 BP 0000 ODITSZAPC BX 0000 DX 2075 ES:DI 2075:FFFE SS:SP 2075:FFFE FL 7202 001000000 ; Файл типа EXE --------- AX 0000 CX 00FF DS:SI 2075:0200 CS:IP 2065:0200 BP 0000 ODITSZAPC BX 0000 DX 2075 ES:DI 2075:0200 SS:SP 2C0D:0200 FL 7202 001000000 В обоих случаях счётчик(СХ) выставляется в FFh, а содержимое регистра(АХ) привязывается к параметрам ком.строки. Если указан неверный параметр, то AХ=FFFFh, иначе - нуль. Все эти действия выполняет функция(4Bh) DOS - загрузить и выполнить программу. Почитай про неё..
4
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
|
03.11.2016, 14:51 | 8 |
мановар, в начале программы поставьте pusha, и после выводите РОНы на экран(8 шт всего),Вы убедитесь, что R71MT, таки прав.
1
|
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
|
|
03.11.2016, 15:08 [ТС] | 9 |
Constantin Cat, а я и не спорю. Этот отладчик все четко и ясно показал, еще малец поэксперементирую.
Добавлено через 9 минут R71MT, спасибо огромное, не знал об этом отладчике. Использовал еще пару, но результат был как у TD, а ведь спинным мозгом чувствовал, что где то здесь собака порылась. Еще раз спасибо.
2
|
Эксперт Hardware
|
|
16.06.2018, 04:39 | 10 |
Сообщение было отмечено Mikl___ как решение
Решение
Санёк. эт авера инструмент - он оттянет любого, тд даже рядом не стоял
Добавлено через 11 минут крис пипец эксперемнтировал, а мы ленимся
2
|
Manowar
|
16.06.2018, 11:21
[ТС]
#11
|
0
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
17.06.2018, 19:13 | 13 |
AVPUtil тоже мухлюет, судя по всему
Ибо BP при старте не равен 0. Старший байт = 9, младший разный в разных DOS'ах. Подробнее: Значения регистров при запуске программы (DOS COM) Вкратце:
Добавлено через 1 минуту В .COM-программах на вершине стека лежит 0 (поэтому срабатывает выход по ret , но только в .COM).Однако из этого всего документировано, насколько я знаю, только AX, DS=ES=PSP (а в .COM ещё и =CS=SS) и 0 в стеке.
0
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
18.06.2018, 08:19 | 17 |
R71MT, нет, расскажи
0
|
18.06.2018, 08:19 | |
18.06.2018, 08:19 | |
Помогаю со студенческими работами здесь
17
Неправильный вывод программы Неправильный парсинг строки и неправильный её вывод Неправильный вывод Неправильный вывод Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |