Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 10.12.2012
Сообщений: 18
1

Работа с подпрограммами

04.05.2013, 14:05. Просмотров 510. Ответов 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
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
199
200
201
202
203
204
205
206
207
208
209
    locals __
        .model small
        stack 100h
        dataseg
MESS1     db 'Enter the length to cut (N):',0dh,0ah,'$'
MESS2     db 'Enter first string:',0dh,0ah,'$'
MESS3     db 'Enter second string:',0dh,0ah,'$'
MESS4     db 'Enter third string:',0dh,0ah,'$'
MESS5     db 'Enter fourth string:',0dh,0ah,'$'
MESS6     db 'Enter fifth string:',0dh,0ah,'$'
MESS7     db 'New string:',0dh,0ah,'$'
InputStr  dw 20, ?, 20 dup(?)
BUFF      dw 20, ?, 20 dup(?)
NextStr   dw 0Dh, 0Ah, '', '$'
NEWSTR    dw 100, ?, 100 dup(?)
Nnum      dw ?
error     db "incorrect number$"
Nstr      db 6,7 Dup(?)
 
 
        codeseg
        startupcode
        
        mov AX, 03;
        int 10h;
        
        lea DX, MESS1;
        mov AH, 09h;
        int 21h;
        jmp prog;
    one:    
        lea DX, MESS2;
        mov AH, 09h;
        int 21h;
        jmp vvod;
    two:    
        lea DX, MESS3;
        mov AH, 09h;
        int 21h;
        jmp vvod;
    three:  
        lea DX, MESS4;
        mov AH, 09h;
        int 21h;
        jmp vvod;
    four:   
        lea DX, MESS5;
        mov AH, 09h;
        int 21h;
        jmp vvod;
    five:   
        lea DX, MESS6;
        mov AH, 09h;
        int 21h;
        jmp vvod;
    vvod:   
        lea DX, InputStr;
        mov AH, 0Ah;
        int 21h;
        
        lea DX, NextStr;
        mov AH, 09h;
        int 21h;
        jmp conc;
    prog:   
        call InputInt;
        mov Nnum, AX;
 
        mov BH, 1;
        mov CX, 5;
    cycle:
    choice:
        cmp BH, 1;
        je one;
        cmp BH, 2;
        je two;
        cmp BH, 3;
        je three;
        cmp BH, 4;
        je four;
        cmp BH, 5;
        je five;
    conc:
        call Cut;
        call Concat;
        add BH, 1;
        loop cycle;
        
        lea DX, MESS7;
        mov AH, 09h;
        int 21h;
        
        lea DX, NEWSTR;
        mov AH, 09h;
        int 21h;
        
        lea DX, NextStr;
        mov AH, 09h;
        int 21h;
        
        mov AH, 1;
        int 21h;
        mov AX, 4c00h;
        int 21h;
        jmp quit;
        
    quit:
 
        exitcode 0
 
    InputInt proc near
 
    xor di,di
    mov dx,offset Nstr ; 
    mov ah,0ah
    int 21h ;
    mov dl,0ah
    mov ah,02
    int 21h ;
 
    mov si,offset Nstr+2 ;
    cmp byte ptr [si],"-" ; 
    jnz ii1
    mov di,1  ; 
    inc si    ; 
ii1:
    xor ax,ax
    mov bx,10  ; 
ii2:
    mov cl,[si] ; 
    cmp cl,0dh  ; 
    jz endin
 
    cmp cl,'0'  ; 
    jl er
    cmp cl,'9'  ; 
    ja er
 
    sub cl,'0' ; 
    mul bx     ; 
    add ax,cx  ; 
    inc si     ; 
    jmp ii2     ;
 
er:   ;
    mov dx, offset error
    mov ah,09
    int 21h
    int 20h
 
endin:
    cmp di,1 ;
    jnz ii3
    neg ax   ;
ii3:
    ret
 
InputInt endp
        
Cut proc near
        mov AX, Nnum;
        cmp AX, InputStr+2;
        jbe norm;
        ja above;
    norm:
        mov AX, Nnum;
        lea si, InputStr;
        lea di, BUFF;
        mov DX, CX;
        mov CX, AX;
    chik:
        mov di, [si];
        add di, 2;
        add si, 2;
        loop chik;
        mov CX, DX;
        jmp off;
        
    above:
        sub AX, InputStr+2;
        lea di, InputStr;
        add di, AX;
        push CX;
        mov CX, AX;
    space:
        mov di, ' ';
        add di, 2;
        loop space
        pop CX;
        jmp norm;
    off:
Cut endp
    
Concat proc near
        mov AX, Nnum;
        lea di, NEWSTR+4;
        add di, AX;
        lea si, BUFF+4;
        push CX;
        mov CX, AX;
    perenos:
        mov di,[si];
        add si, 2;
        add di, 2;
        loop perenos
        pop CX;
Concat endp
        
        end

Ввожу число, затем преобразовываю, затем поидее ввожу первую строку, обрезаю ее или дополняю пробелами и прибавляю к выходной строке, это в идеале, но ничего не получается.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2013, 14:05
Ответы с готовыми решениями:

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

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

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

Работа с подпрограммами
Я не давно начал работать с delphi и пока не совсем понимаю, как добавить считывание x1-y3 и как...

2
73 / 74 / 4
Регистрация: 25.09.2012
Сообщений: 212
04.05.2013, 19:15 2
Trant, Не вижу интрукции ret в конце подпрограмм.
0
0 / 0 / 1
Регистрация: 10.12.2012
Сообщений: 18
05.05.2013, 10:28  [ТС] 3
Не могу разобраться почему при вводе строки начальный элемент меняется. Поидее же первый элемент максимальное число символов, второй реальное кол-во символов, а потом сами символы, а у меня после ввода строки длинной 6 символов длина максимальная становится 1556.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2013, 10:28

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

Работа с подпрограммами
Всем привет. Делал пример из книги и что то ничего не получается. По идее по нажатию кнопки должно...

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


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

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

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