Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

помогите нубу

81K
05 мая 2012 года
in_utile
5 / / 05.05.2012
добрый день.
программка рисует пять окошек одно в другом.нужно зациклить процедуру с помощью стека.файл .сом создаётся в DEBUGе.
код
.....
mov ch,05
mov cl,10
.....
int 10
mov cx,0004
:0117 call 011e
loop 0117
int 20
:011e
....
add ch,01
add cl,01
.....
int 10
ret
спасибо
316
05 мая 2012 года
Alm3n
889 / / 29.05.2009
Зачем это делать "с помощью стека", когда есть циклы?
Also, что понимается под этим самым "с помощью стека"?
Это просьба о написании рекурсивной процедуры?
26K
05 мая 2012 года
mudBit
224 / / 30.05.2011
Да и вообще, подробности, подробности, господа.
81K
06 мая 2012 года
in_utile
5 / / 05.05.2012
пардон.подробности в том,что можно четыре call подряд поставить и всё работает,рисует 5 окон.но если эти вызовы зациклить,счётчик циклов использует регистр cx,используемый для координат окна(все РОН заполняются).по идее эти значения cx можно сохранять в стеке,когда нужно-вытащить.ещё call сохраняет в стеке адрес следующей команды.в этом запара.понимаю,что доставляет, но тем не менее
316
06 мая 2012 года
Alm3n
889 / / 29.05.2009
Pop cx/Pus cx. Вообще, есть необходимость в подпрограмме значения помещать в регистр? Если нет прироста в производительности, то стоит использовать локальные переменные на стеке.
81K
06 мая 2012 года
in_utile
5 / / 05.05.2012
в подпрограмме не получится.ret считывает верхушку стека и зашлёт не туда.где же втолкнуть и вытолкнуть переменные(значения координат,кол-во циклов),не забывая,что call тоже толкает в стек?не работает!много вариантов попробовал.это задачка из учебника,а ответа нет
316
06 мая 2012 года
Alm3n
889 / / 29.05.2009
Что не работает-то?

Код:
mov ecx, 5
loop1:
;push ecx тоже никто не мешает делать
call Proc1
;pop ecx но это как-то нехорошо
loop loop1

Proc1 proc
push xcoord
push ycoord
push otherArgs
call DrawWindow
ret 12  ;число - размер положенного в стек. если функция сама за собой не очистила стек
ret     ;если функция очищает за собой стек
Вообще, напиши на любом высокоуровневом языке простую программу, состоящую из одной функции, которая получает один или два аргумента, вызываемую в цикле, скомпилируй и открой в отладчике, посмотри, как это работает.
81K
06 мая 2012 года
in_utile
5 / / 05.05.2012
спасибо конечно.но слабать это нужно мнемокодами в отладчике(debug).до ассемблера мне ещё далеко
316
06 мая 2012 года
Alm3n
889 / / 29.05.2009
Какое отличие мнемонических команд от обычной программы на ассемблере? Может, не совсем понимаю, что такое первое?
Какой отладчик?
465
06 мая 2012 года
QWERYTY
595 / / 25.03.2012
Цитата: in_utile
до ассемблера мне ещё далеко


Что между машинным кодом и ассемблером ещё чтото появилось?

Из вашего примера следует что вы пишете на ассемблере. А что там за "мнемокоды" не подскажите?

465
06 мая 2012 года
QWERYTY
595 / / 25.03.2012
Я правильно понял, вы пишите в программке DEBUG которая входит в состав виндовс?

Интересный выбор "среды разработки".
316
06 мая 2012 года
Alm3n
889 / / 29.05.2009
Цитата: QWERYTY
Я правильно понял, вы пишите в программке DEBUG которая входит в состав виндовс?

Интересный выбор "среды разработки".


И пишет опкодами. :)

7
06 мая 2012 года
@pixo $oft
3.4K / / 20.09.2006
[Offtop]НЯП,просто у него задание такое.Удивительно,что в наше время этим ещё мучают кого-то[/Offtop]
81K
06 мая 2012 года
in_utile
5 / / 05.05.2012
в ассемблере директивы,метки и т.п.у меня отладчик-команды,данные,адреса.задача чисто обучающая-создать исполняемый .СОМ файл с подпрограммой,циклом и использованием стека в теле.
код
xor al,al
mov bh,10
mov ch,05
mov cl,10
mov dh,10
mov dl,3e
mov ah,06
int 10
mov cx,0004
0113 call 011a
loop 0113
int 20
011a add bh,10
add ch,01
add cl,01
sub dh,01
sub dl,01
int 10
ret
если не зацикливать вызов процедуры,а тупо четыре calla записать-пашет.счётчик циклов использует регистр сх,значит(по идее) сохраняю переменные в стеке.где же pushи и popы вставить?пробую,трассирую-высираю кирпичи
252
15 мая 2012 года
koderAlex
1.4K / / 07.09.2005
процедура должна выглядеть примерно так :
proc_superproc:
pushad
pushfd
........
popfd
popad
ret

вызов 4 раза в цикле :
mov ecx,4
call_cicle:
call proc_superproc
loop call_cicle
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог