Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
TpaH3ucTop
1 / 1 / 0
Регистрация: 07.04.2010
Сообщений: 13
#1

Работа с подпрограммами (массивы)

07.05.2010, 01:33. Просмотров 516. Ответов 0
Метки нет (Все метки)

Помогите разобраться. Ближняя подпрограмма нормально работает, а дальняя некорректно (а отдельным модулем вообще ничего делать не хочет). Может я что забыл дописать...

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
; Программа на Ассемблере
; Каждый элемент массива разделить на число элементов массива и
; полученное значение возвести в квадрат.
; Результаты записать в новый массив двойных слов.
 
    title zadanie23_2
    page 52,72                      ; Формат страницы листинга
    include c:\work\masm\macroio.inc    ; Подключение библиотеки
 
; Сегмент данных
Data    segment         
cr  equ 13  ; Символ возврата каретки
lf  equ 10  ; Символ перевода строки
 
n1n equ 8   ; Константа для числа элементов массива
n1  dw  n1n     ; Переменная числа элементов массива
mass1   dw  3235, -15698, -248, 15294, -1369, -643, -24, 328    ; Входной массив
mass2   dd  n1n dup(?)                          ; Промежуточная обработка
mass3   dd  n1n dup(?)                          ; Выходной массив
 
n2n equ 7
n2  dw  n2n
mass11  dw  546, -5986, 7368, -8887, 658, -23654, 506 ;
mass22  dd  n2n dup(?)
mass33  dd  n2n dup(?)
 
 
str1    db  'Входной массив', cr, lf, '$'
str11   db  'Входной массив', cr, lf, '$'
str2    db  'Выходной массив', cr, lf, '$'
str3    db  'Работа ближней подпрограммы ', cr, lf, '$'
str4    db  'Работа дальней подпрограммы ', cr, lf, '$'
viv db  240 dup(?)      ; Строка для вывода чисел
Data    ends
 
Prog    segment 'Code'
    Assume ds:Data, es:Data, cs:Prog, ss:sprog
 
Pnear   proc    near
    push    bp
    mov     bp, sp
    sub sp, 10
 
    mov     si, [BP+6]
    mov     di, [BP+4]
    mov     cx, [BP+8]
    mov ax, 0
    mov dx, 0
 
lp1:
    mov     ax, [SI]
    cwd
    idiv    word ptr [BP+8]
    imul    ax
    mov     word ptr [DI], ax
    mov     word ptr [DI+2], dx
    add si, 2
    add di, 4
 
loop    lp1
 
    mov     sp, bp
    pop bp
    ret
Pnear endp
 
Start:
    @DispCh cr, lf
           mov  ax, Data    ; установка сегментных
    mov ds, ax      ; регистров для
    mov es, ax      ; сегмента данных
 
; Работа ближней подпрограммы
    @DispStr    str3
; Вывод поясняющего сообщения и входного массива    
    @DispStr    str1
    mputi       2, n1, mass1, viv
    @DispStr    viv
 
; Вызов ближней подпрограммы
    push    n1
    lea ax, mass1
    push    ax
    mov ax, offset mass3
    push    ax
    call    near ptr Pnear
    add     sp, 6
 
; Вывод выходного массива
    @DispStr    str2
    mputi       4, n1, mass3, viv
    @DispStr    viv
    @DispCh     cr, lf
 
; Вывод поясняющего сообщения и входного массива    
    @DispStr    str1
    mputi       2, n2, mass11, viv
    @DispStr    viv
    @DispCh     cr, lf
 
; Вызов ближней подпрограммы для второго массива
    push    n2
    lea ax, mass11
    push    ax
    mov ax, offset mass33
    push    ax
    call    near ptr Pnear
    add sp, 6
; и выходной массив
 
    @DispStr    str2
    mputi       4, n2, mass33, viv
    @DispStr    viv
    @DispCh cr, lf
 
; Работа дальней подпрограммы
    @DispCh cr, lf
    @DispStr    str4
    @DispStr    str11
    mputi       2, n1, mass1, viv
    @DispStr    viv
 
    push    n1
    lea ax, mass1
    push    ds
    push    ax
    mov     ax, offset mass2
    push    ds
    push    ax
    call    far ptr Pfar
    add sp, 10
                                                                           
    @DispStr    str2
        mputi       4, n1, mass3, viv
    @DispStr    viv
 
; для второго массива
    @DispCh cr, lf
    @DispStr    str11
    mputi       2, n2, mass11, viv
    @DispStr    viv
 
    push    n2
    lea ax, mass11
    push    ds
    push    ax
    mov ax, offset mass22
    push    ds
    push    ax
    call    far ptr Pfar
    add sp, 10
 
    @DispCh cr, lf
    @DispStr    str2
           mputi        4, n2, mass33, viv
    @DispStr    viv
 
    @Exit
Prog    ends
 
Segfar  segment 'code' public
    assume  cs:segfar
 
Pfar    proc    far
 
    push    bp
    mov bp, sp
    sub sp, 10
    push    ds
 
    lds si, [BP+10]   
    mov di, [BP+6]
    mov cx, [BP+14]
    mov ax, 0
    mov dx, 0
lp11:
    mov ax, [SI]
    cwd
    idiv    word ptr [BP+8]
    imul    ax
    mov word ptr [DI], ax
    mov word ptr [DI+2], dx
    add si, 2
    add di, 4
 
loop lp11                  
 
    mov sp, bp
    pop bp
    ret
 
Pfar    endp
Segfar  ends
 
Sprog segment stack 'STACK'
    db      512 dup(?)
Sprog   ends
    End Start
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2010, 01:33
Ответы с готовыми решениями:

Транспонирование матрицы с подпрограммами: преобразовать программу в модульную
В программе должна быть основная функция из которой идёт вызов всех...

Работа с подпрограммами
Доброго времени суток. Очень нужна помощь с программой на ассемблере. Сама...

Массив с подпрограммами
Помогите с программой. Лабораторная №2. Найти наибольший и наименьший элемент...

двумерные массивы с подпрограммами
Здравствуйте!Найдите,ПОЖАЛУЙСТА, ошибку!!!Задание значит такое: Даны 2...

Задачи на многомерные массивы и разработка программ с подпрограммами
Добрый день! Помогите пожалуйста решить следующие задачи: 1. Дана...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2010, 01:33

Работа с подпрограммами
Используя подпрограммы, создать и вывести массив y с элементами yk=fi+1(k), де...

Работа с подпрограммами
Не могу понять почему работает неправильно, Помогите! #include<conio.h>...

Работа с подпрограммами
Пожалуйста помогите переделать Код под Графический интерфейс ... Зарание...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru