Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2018, 19:15   #1
Roulen
Новичок
Джуниор
 
Регистрация: 03.06.2018
Сообщений: 1
По умолчанию TASM - возврат через стек, адрес, регистр

Необходимо в данной программе реализовать возврат значений из процедур через стек, адрес, регистр - совершить три разных возврата из трех разных процедур.
Асм вообще не дается, снизу размещу мои попытки и стартовый код...

Старт:
Код:
data segment 
string db 80 dup('$'),'$'
data ends
code segment
assume cs:code,ds:data
start:  mov ax,data
mov ds,ax
xor cx,cx
mov ah,01h

inpt:   int 21h
        cmp al,0dh
        je crlf
        inc cx
        push ax
        jmp inpt
        
crlf:   mov ah,02h
        mov dl,al
        mov dl,0ah
        
outpt:  pop dx
        int 21h
        loop outpt
        
QUIT:   mov ax, 4c00h
Int 21h
code ends
end START
Мои попытки:
Код:
data segment 
string db 80 dup('$'),'$'
data ends
code segment
assume cs:code,ds:data

; get string
input proc NEAR 
    go:
        int 21h
        cmp al,0dh
        je crlf
        inc cx
        push ax
        jmp go
    RET ; регистр ax
input endp
    
; print string
output proc NEAR 
   pop dx
   int 21h
   loop output
   RET
output endp

;crlf proc NEAR 
;   mov ah,02h
;   RET 
;crlf endp
    

start:  mov ax,data
        mov ds,ax
        xor cx,cx
        mov ah,01h
        call input
        ;call crlf
        ;call output
        
crlf:   mov ah,02h
        mov dl,al
        mov dl,0ah   
        
QUIT:   
call output
mov ax, 4c00h

Int 21h
code ends
end START
Roulen вне форума Ответить с цитированием
Старый 05.06.2018, 03:53   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Roulen,
возврат значения из процедуры через регистр
Код:
N1 proc
 . . . ; какие-то вычисления
mov ax,результат вычислений
retn ;  выход из процедуры
N1 endp
возврат значения из процедуры через ячейку в памяти
Код:
 N2 proc
 . . . ; какие-то вычисления
mov [ячейка в памяти],результат вычислений
retn ;  выход из процедуры
N2 endp
возврат значения из процедуры через стек
Код:
N3 proc
 . . . ; какие-то вычисления
mov bx,sp
mov ss:[bx+2],результат вычислений
retn ;  выход из процедуры
N3 endp
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TASM. Переменная в квадратных скобках - значение или адрес? Niro Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 10.11.2016 15:03
Assembler(TASM) - передача параметров процедуре через стек idontknowassembler Помощь студентам 0 07.06.2015 20:35
Адрес сегмента кода, начала данных из кучи и стек. (C++) kappa937 Помощь студентам 1 16.12.2013 23:43
если через стек передается адрес памяти. зачем нужны указатели * sexsex Общие вопросы C/C++ 6 25.02.2012 17:17
[TASM]Ассемблер. Стек. SoundMan Помощь студентам 4 29.11.2008 20:22