Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Ret

Автор: suriv 31.10.2005 3:45


Begin:
mov ah,10h
int 16h
cmp al,'y'
jz Sym
NON:
mov ah,9
mov dx,......
int 21h
int 20h
Sym:
-//-//-//
-//-/--/
jmp NON


а если вместо jmp будет ret ? это будет одно и тоже ?
если нет тогда что ? а видел прогу где в конце метки было RET что это означает.. (обычно его пишут в конце процедуры чтоб возвратиться на адрес откуда пришли

Begin:
mov ah,10h
int 16h
cmp al,'y'
jz Sym
mov ah,9
mov dx,......
int 21h
int 20h
Sym:
-//-//-//
-//-/--/
ret
ret

Автор: volvo 31.10.2005 4:00

To: suriv, сам же и ответил на свой вопрос:

Цитата
обычно его пишут в конце процедуры чтоб возвратиться на адрес откуда пришли

только не на адрес, "откуда пришли", а туда, откуда процедура/функция была вызвана (с помощью CALL), но никак не внутри процедуры...

Автор: Shadow 31.10.2005 7:28

retвозврат ближний\дальний из процедуры
работа команды зависит от типа процедуры
команда последовательно последовательно востанавливает из стека
ip cs для процедур дальнего типа или ближнего просто ip
----------
так вот в стек ты сам можешь положить что нибудь smile.gif поэкперементируй
и посмотри в отладчике
----------
формат COM
программа зациклится

code segment
assume cs:code,ds:code,ss:code
org 100h
start:
mov ax,100h
push ax
ret
code ends
end start

Автор: suriv 31.10.2005 12:19

т.е RET это что-то типа: прогрмма достает из стека адрес и переходит на него..

а если в стеке ничего нету то в конце проги можно вместо INT20h поставить RET и программа тоже завершиться.. (говорят лучше так делать (ну с помощью RET))

Автор: Shadow 31.10.2005 15:47

ну дык поэксперементируй и смотри в отладчике
можно использовать маш-ный код
0c3h - близкий
0cbh - дальний
т.е. прямо в код вставить

db 0c3h
; или
db 0cbh