Доброго времени суток. Я ассемблер изучаю ток месяца 1,5 а активнонедельки 2 и вот встала следующая проблема: Ввод в тему: (ia-16)одна из процедур формирует исходные 20 -ти битные данные в cx,dx. При выходе из процедуры необходимо заполнить эти регистры старыми значениями и поэтому вых данные процедуры нужно куда то девать. И собственно вопрос: как мне эти данные выкинуть в память(в голову приходит мысль о прямой адресации) по типу mov es:X,bx mov es:Y,dx Где X,Y ранее объявленные переменные X db LENBUFS DUP(0) если что то не так то поправте. Заранее благодарю
Э. Точно в память? Чем push неустраивает? push cx push dx call yourfunc ... do something pop dx pop cx Если через память: X dw ? Y dw ? ... mov es:[X], cx mov es:[Y], dx Пожалуйста.
Спасибо большое! push не подходит тк при выходе из процедуры мне надо из стёка востановить "старые" данные в регистрах которые я pop'ом отправил. тоесть до сих пор окончание процедуры выглядело: myfunc PUSH CX PUSH DX ......;изменение СX и DX @L2: MOV AX,DX POP CX POP DX RET благодарю! ты помог мне! Всем спасибо!
l_inc Не надо придираться к словам. Имелось ввиду - выделение отдельной переменной и запись в нее. RLC Не понял в чем проблема, обственно. Тебе надо результат работы функции вернуть в cx, dx или надо что бы функция не меняла значений cx, dx? Если последнее, то твой вариант с push/pop и так не будет их менять. Если надо что бы менял, за пределами функцию делаешь push/pop (как я показал) и убираешь push/pop из тела функции.
Joes Вообще-то надо. У меня были знакомые, которые всерьез считали, что стэк - это что-то особенное, хранящееся исключительно внутри ЦП. Так что во избежание недоразумений стоит конкретнее выражать свою мысль. Особенно при ответе на вопрос новичку. Вообще-то RLC нужно было сохранить значения регистров, передав при этом значения, сформированные функцией внутри cx и dx, во внешнюю функцию. Так что стэк здесь с трудом подходит.
"нужно было сохранить значения регистров, передав при этом значения, сформированные функцией внутри cx и dx, во внешнюю функцию. Так что стэк здесь с трудом подходит." Да абсолютно верно!
Блин. не работает. вот что тасм пишет на MOV ES:[XBUF],DX Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International Assembling file: mlab1.asm **Error** chetchik.asm(93) Operand types do not match Error messages: 1 Warning messages: None Passes: 1 Remaining memory: 399k используется 386 проц и ia-16 пробовал и MOV ES:XBUF,DX и MOV XBUF,DX и MOV [XBUF],DX всё одно и тоже и выдаёт одну и ту же ошибку. Всё всё разобрался просто XBUF db BUFLEN DUP(0) а не XBUF dw BUFLEN DUP(0) так что спасибо!!!
l_inc С такой точки зрения - согласен. Комментарий насчет памяти был конкретно про переменные. Гм, тогда я не понял постановки задачи: push cx push dx call myFunction call externalFunction pop dx pop cx Результат из myFunction будет в cx, dx и он же передастся в следующую функцию (externalFunction) Вобщем, ладно, главное что автор разобрался.