Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

Ответ
 
Опции темы
Старый 03.06.2018, 20:15   #1
Roulen
Новичок
 
Регистрация: 03.06.2018
Сообщений: 1
Репутация: 10
По умолчанию 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, 04:53   #2
Mikl___
Профессионал
 
Регистрация: 11.01.2010
Сообщений: 1,128
Репутация: 926
По умолчанию

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___ вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


08:38.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru