понедельник, 8 июня 2009 г.

работа со стеком

Записать в стек содержимое регистров AX, BX, CX, DX. Вызвать процедуру, которая бы ссунула содержимое регистра BX, взятый из стека, на количество разрядов, заданную содержимым CX также взятым из стека, и поместила результат в стек на место значения регистра DX. После выполнения процедуры вытянуть из стека содержимое регистров (DX-новое) и поместить их в соответствующие регистры.

  1. Записать в стек содержимое регистров AX, BX, CX, DX

    push AX
    push BX
    push CX
    push DX


  2. Вызвать процедуру которая бы ссунула содержимое регистра BX взятый из стека...

    my_proc proc
    ; заполним регистры соотв. значениями
    pop DX
    pop CX
    pop BX

    ; и вернём их назад, кроме DX
    push BX
    push CX

    ; тут будем сдвигать
    mov AX, BX
    ; в CX уже значение счётчика
    loop:
    shl AX, 1
    jnc loop

    ; и вместо DX теперь занёсем в стек AX
    push AX
    ret
    my_proc endp


  3. после вызова процедуры вернуть всё на место

    call my_proc

    pop DX
    pop CX
    pop BX
    pop AX


вуаля!

Комментариев нет:

Отправить комментарий