Переход на строку

Тема в разделе "WASM.BEGINNERS", создана пользователем aggro, 10 май 2010.

  1. aggro

    aggro New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2010
    Сообщения:
    8
    мне часто надо переходить на новую строку

    для этого постоянно надо писать
    mov ah,2h
    mov dl,13 ;carriage return
    int 21h

    mov ah,2h
    mov dl,10 ; New line
    int 21h

    что бы этого не писать сделаем это где-то отдельно и будем туда прыгать, допустим так

    newline:
    mov ah,2h
    mov dl,13 ;carriage return
    int 21h

    mov ah,2h
    mov dl,10 ; New line
    int 21h

    как сделать так, что бы после выполнения этого куска кода. оно возвращало в место вызова, обычный RET в конце не помогает
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    А вызов с помощью 'call' осуществляется?
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Если с помощью call, попробуйте retn вместо ret.
     
  4. kosha

    kosha New Member

    Публикаций:
    0
    Регистрация:
    11 май 2010
    Сообщения:
    3
    хм.. действительно с retn все работает.
    тогда получается что при вызове ближних процессов лучше использовать retn, а при вызове дальних ret. Верно ?
     
  5. kosha

    kosha New Member

    Публикаций:
    0
    Регистрация:
    11 май 2010
    Сообщения:
    3
    *процедур
     
  6. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    kosha
    Инструкции ret не существует, есть retn, retf для near и far вызовов соответственно. ret (можно считать это макросом) преобразуется к одной из этих инструкций в зависимости от того, как определена процедура, в которой она используется. Если процедура определена как NEAR, будет retn, если как FAR, будет retf. Кроме того, при использовании ret к retn или retf в конце добавляется число, равное количеству байт, которые необходимо вытащить из стека после возврата потока управления на позицию после call. Это число равно размеру всех параметров, переданных в процедуру, в байтах.
    Код (Text):
    1. example    proc near arg1:WORD, arg2:WORD, arg3:WORD
    2.  
    3.         ; ...
    4.         call    newline
    5.         ; ...
    6.         ret     ; будет заменено на retn 6, так как процедура example идет с типом near, и передается 3 аргумента по 2 байта каждый
    7.  
    8. newline:
    9.         ; ...
    10.         ret     ; тоже будет заменено на retn 6, причины те же
    11.                 ; однако тут должно быть просто retn, так как вызов near и аргументы через стек в newline не передаются
    12.  
    13. example    endp
    Надеюсь поймете...
     
  7. kosha

    kosha New Member

    Публикаций:
    0
    Регистрация:
    11 май 2010
    Сообщения:
    3
    спасибо ;)