Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
 Аватар для KlinKa
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 4

Способы передачи параметров в процедуры

09.10.2011, 13:54. Показов 7409. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Уже который день пытаюсь разобраться с ранее неизвестным мне языком программирования ассемблером. Что-то, вроде, даже начинаю понимать,но вот до логического заключения программу довести так и не получается. Помогите пожалуйста :)
Задание такое:
___
Составить три программы (с разными способами передачи параметров в процедуру), содержащую
процедуру, выполняющую нижеприведённые действия. Исследовать её работу в отладчике.
1)Вычисляет значение функции |X|, X - целое (в качестве параметра передавать число X).
2)Делит целое число X на n-ю степень числа 2 (в качестве параметра передавать числа X и n).
3)Умножает целое число X на n-ю степень числа 2 (в качестве параметра передавать числа X
и n).
_______________
Вот мои нерабочие варианты:

1) передача параметра через регистр.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
assume CS:CodeSg, DS:DataSg, SS:StackSg
CodeSg segment 'CODE'
begin:  mov AX, DataSg
        mov DS, AX  
        ;
mov     AX, X ; параметр X в регистр AX
call    Z     ; вызов процедуры Z
mov AX, X
xor BX, BX
cmp AX, BX
jg l1
neg AX
l1: mov Y, AX
;----------------------------------------------
Z proc
ret           ; возврат из процедуры
Z endp
        ;
        mov AX, 4C00h
        int 21h
        ;
CodeSg ends
;------------------------------------
DataSg segment 'DATA'
        ;
;----------------------------------------
X dw 0
Y dw ?
 
        ;
DataSg ends
;------------------------------------
StackSg segment stack 'STACK'
        db 256 dup(0)
StackSg ends
;------------------------------------
end begin
2) передача параметра через стэк.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
assume CS:CodeSg, DS:DataSg, SS:StackSg
CodeSg segment 'CODE'
begin:  mov AX, DataSg
        mov DS, AX  
        ;
push    X ; параметр X в стек
call    Y ; вызов процедуры Y
;-----------------------------------------------------
Y proc
pop     BX ; временно извлекаем адрес возврата
pop     AX ; извлекаем из стека параметр
 
mov cx, n; показатель
dec cx
mov ax, 2; основание
mov bx, ax
l1:
mul bx
loop l1
mov dx, ax; копия результата в dx
mov ax, x
idiv dx
push    BX ; возвращаем в стек адрес возврата
ret        ; возврат из процедуры
Y endp
;-----------------------------------------------------
X dw 0
n dw 5
        ;
        mov AX, 4C00h
        int 21h
        ;
CodeSg ends
;------------------------------------
DataSg segment 'DATA'
;-----------------------------------------------------
X dw 10
n dw 5
        ;
DataSg ends
;------------------------------------
StackSg segment stack 'STACK'
        db 256 dup(0)
StackSg ends
;------------------------------------
end begin
3) передача параметра через общую область памяти.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
assume CS:CodeSg, DS:DataSg, SS:StackSg
CodeSg segment 'CODE'
begin:  mov AX, DataSg
        mov DS, AX  
        ;
call    Y
;---------------------------------------------------------------
Y proc
    mov     AX, ds:0000h ; извлекаем параметр по адресу ds:0000h
mov cx, n; показатель
dec cx
mov ax, 2; основание
mov bx, ax
l1:
mul bx
loop l1
 
mov dx, ax; копия результата в dx
mov ax, x
imul dx; умножение х на результат
    ret
Y endp
;---------------------------------------------------------------
        ;
        mov AX, 4C00h
        int 21h
        ;
CodeSg ends
;------------------------------------
DataSg segment 'DATA'
        ;
;----------------------------------------
X dw 10
n dw 5
 
        ;
DataSg ends
;------------------------------------
StackSg segment stack 'STACK'
        db 256 dup(0)
StackSg ends
;------------------------------------
end begin
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.10.2011, 13:54
Ответы с готовыми решениями:

Способы передачи параметров в функцию
#include<iostream> using namespace std; void swap1(int x, int y) { int z; z=x; x=y; y=z; ...

Способы передачи параметров в функции. Реализация динамических двумерных массивов
в программе написать функции для сортировки массива. Подсчитать количество перестановок элементов массива при выполнении сортировки;

Способы передачи данных
Здесь мне сказали что способ передачи параметров string message, string filename и всё остальное в void.cpp функции не правильный, прошу...

2
 Аватар для 6a6kin
232 / 102 / 5
Регистрация: 18.04.2010
Сообщений: 294
09.10.2011, 16:13
Почему функции расположены внутри основной функции(метки), а не за её пределами? Прочтите ещё раз раздел про функции.

2)Делит целое число X на n-ю степень числа 2 (в качестве параметра передавать числа X и n).
3)Умножает целое число X на n-ю степень числа 2 (в качестве параметра передавать числа X
и n)
Для того, чтобы умножить какое-либо число на степень двойки, нужно использовать логические сдвиги. Это и проще, и быстрее.
1
 Аватар для KlinKa
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 4
16.10.2011, 09:04  [ТС]
спасибо!всё получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2011, 09:04
Помогаю со студенческими работами здесь

Способы передачи данных из контроллера в представление
чтобы передать в представление большой массив данных можно использовать ViewBAG или ViewDATA. Это решение подходит для приложений большой...

Все способы передачи статического массива в функцию
Здравствуйте уважаемые форумчане. Предлагаю выложить сюда все способы передачи СТАТИЧЕСКИХ массивов в функцию, желательно с объяснениями...

Способы передачи изображения с одного компьютера на другой
Здравствуйте! Есть техническая задача: нужно передать изображение с монитора одного компьютера(ноутбук середины 2000х, ethernet...

Способы передачи данных из Excel в Visual Basic
передача данных из Visual Basic в Excel СУЩЕСТВУЕТ! А как осуществить обратный процесс? Задача. Есть прайс листы в формате excel....

Способы обеспечения надёжного хранения и передачи информации
Помогите пожалуйста с двумя вопросами Способы обеспечения надёжного хранения информации. Способы обеспечения надёжной передачи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru