Здравствуйте !
Вопрос касается С-подобных процедур: нужен ли код пролога и эпилога в них или транслятор сгенерирует их автоматически при указании модификатора языка proc с ? Код - рабочий, но если удалить код пролога и эпилога из вызываемого модуля, то не работает. TASM4, WinXP
Спасибо !
;вызываемый модуль
model small
extrn string_1:byte,string_2:byte
public _sub
.code
_sub proc с
arg offset_str2:word,offset_str1:word ;offset_str2 [bp+4], offset_str2 [bp+6]
local x:byte,y:byte ;x [bp-1], y [bp-2]
; push bp
; mov bp,sp
mov dx,offset_str1
mov ah,09h
int 21h
mov dx,offset_str2
mov ah,09h
int 21h
sub sp,02h
mov x,01h
mov y,02h
mov al,x
add al,y
add al,30h
mov ah,0Eh
int 10h
; mov sp,bp
; pop bp
ret
_sub endp
end
;Вызывающий модуль
.model small
extrn _sub:far
public string_1,string_2
.stack
.data
string_1 db 'Local variable $'
string_2 db '1+2=$'
.code
main proc far
start: mov ax,@data
mov ds,ax
push offset string_1
push offset string_2
call _sub
add sp,04h
exit: mov ax,4C00h
int 21h
main endp
end start
Вопрос касается С-подобных процедур: нужен ли код пролога и эпилога в них или транслятор сгенерирует их автоматически при указании модификатора языка proc с ? Код - рабочий, но если удалить код пролога и эпилога из вызываемого модуля, то не работает. TASM4, WinXP
Спасибо !
;вызываемый модуль
model small
extrn string_1:byte,string_2:byte
public _sub
.code
_sub proc с
arg offset_str2:word,offset_str1:word ;offset_str2 [bp+4], offset_str2 [bp+6]
local x:byte,y:byte ;x [bp-1], y [bp-2]
; push bp
; mov bp,sp
mov dx,offset_str1
mov ah,09h
int 21h
mov dx,offset_str2
mov ah,09h
int 21h
sub sp,02h
mov x,01h
mov y,02h
mov al,x
add al,y
add al,30h
mov ah,0Eh
int 10h
; mov sp,bp
; pop bp
ret
_sub endp
end
;Вызывающий модуль
.model small
extrn _sub:far
public string_1,string_2
.stack
.data
string_1 db 'Local variable $'
string_2 db '1+2=$'
.code
main proc far
start: mov ax,@data
mov ds,ax
push offset string_1
push offset string_2
call _sub
add sp,04h
exit: mov ax,4C00h
int 21h
main endp
end start