Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Shura_deg
82 / 18 / 5
Регистрация: 01.02.2015
Сообщений: 658
1

Некорректный ввод (программа правмильная)

04.06.2015, 20:34. Просмотров 180. Ответов 1
Метки нет (Все метки)

Имеется задача работает правильно если не одно но!!! когда ввожу числа больше -9 почему то неправильно переводит. Числа записываются в dwArray. Ошибка именно только на стадии перевода чисел ведённых с клавиатуры в числа нормальные (десятичной системы счисления)
ПОМОГИТЕ ПОЖАЛУЙСТА ХОТЬ КАКИЕ У КОГО ЕСТЬ СООБРАЖЕНИЯ!!!!!!!!!!!!!!!!!!
ОШИБКА В РАЗДЕЛЕ ПРОГРАММЫ input array
УСЛОВИЕ:
Найти второе по величине чётное число в линейном массиве
ЧИСЛА ЗНАКОВЫЕ ВВОДЯТСЯ ЧЕРЕЗ ПРОБЕЛ
НАПРИМЕР
-2, 2, 0, 23
отВЕТ: 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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
data segment
req        db  10,13,'ENTER ARRAY:$'
error      db  10,13,"INPUT ERROR$"
pkey       db  10,13,"press any key...$"
msg1       db  10,13,"THE SECOND LARGEST EVEN NUMBER:$"  
msg2       db  10,13,"ALL EVEN IDENTICAL, RETYPE$"
inpbuf     db  50 
len        db  0 
DBbuF      db  50 dup (?)
dwArray    dw  100 dup (?)
dimension  dw  0   
FIND dw 0
ends
 
stack segment
    dw   128  dup(0)
ends
 
code segment
start:
; set segment registers:
    MOV AX, DATA
    MOV DS, AX
    MOV ES, AX 
;================================================================
;==========================input array===========================
;================================================================
InputRESTART:
    XOR CX, CX
    XOR BP, BP
    XOR AX, AX 
InputStart:    
    mov  ah, 09h
    lea  dx, req
    int  21h
    
    mov ah, 0Ah
    lea dx, inpbuf      
    int 21h
    
    CMP len, 0
    JE  er
    LEA SI, DBbuF
    LEA DI, dwArray
    
    MOV BX, 10              ;notation
    XOR DX, DX
nachalo:
    cmp byte ptr [si],"-" 
    jnz positive
    mov BH,1  
    inc si
positive: 
    PUSH DX  
    xor ax,ax
Inputcycle:     
    mov CL,[SI]
    CMP CL,0dh   ;ne konec li stroki         
    JZ  proverka
    CMP CL,20h
    JZ  proverka ; konec chisla (probel)
    
    SUB CL,'0'
    JL er
    CMP CL,9
    JA er
    MUL BX
    ADD AX, CX
    INC SI
    JMP Inputcycle
    
proverka:
    POP DX
    INC DL
    CMP BH,1
    JNZ neminys
    NEG AX
neminys:
    XOR BH, BH
    MOV [DI], AX
    ADD DI, 2
    INC SI
    CMP CL, 0dh
    JZ  endin    
    JMP nachalo    
er:
    MOV DX, offset error
    MOV AH, 09
    INT 21h
    ;======================
    ;=wait for any key....=
    ;======================      
    lea dx, pkey
    mov ah, 9
    int 21h
    ;=====================   
    ;=====================  
    mov ah, 1
    int 21h
    ;======================
    ;=====clear screen=====
    ;======================   
    MOV  AH, 00H
    MOV  AL, 03H  
    INT    10H  
    JMP InputRESTART 
           
endin:
    XOR DH, DH
    MOV dimension, DX   
;================================================================
;==========================main part=============================
;================================================================             
    CLD                  ;DF=0
    LEA SI, DwArray 
    MOV CX, DX
    XOR BX, BX     
cycle:
    LODSW
;proverka na chetnost    
    TEST  AX, 01h
    JNZ   EndLoop
;-------------------
    CMP   BL, 0
    JNE   @1
    MOV   DX, AX
    MOV   BL, 1  
    JMP   EndLoop
;-------------------
@1: 
    CMP   AX, DX
    JE    EndLoop
    CMP   BH, 1
    JE    @2
    CMP   AX, DX
    JLE   @3
    MOV   FIND, DX
    MOV   DX, AX
    MOV   BH, 1
    JMP   EndLoop
@3:
    MOV   FIND, AX 
    MOV   BH, 1
    JMP   EndLoop
;-------------------
@2:
    CMP   AX, DX
    JL    @4
    MOV   FIND, DX
    MOV   DX, AX
    JMP   EndLoop
@4:
    CMP   AX, FIND
    JL    EndLoop
    MOV   FIND, AX 
EndLoop:
    LOOP  cycle 
    CMP   BH, 0
    JE    tormoz   
    CMP   FIND, DX
    JE    tormoz  
;================================================================
;==========================display a message on the screen=======
;================================================================
    LEA DX, msg1
    MOV AH, 9
    INT 21h          
;================================================================
;==========================Result output=========================
;================================================================    
    MOV  AX, FIND
    TEST AX, AX
    JNS  oi1
    MOV  CX, AX
    MOV  AH, 02H
    MOV  DL, '-'
    INT  21H
    MOV  AX, CX
    NEG  AX
oi1:
    XOR CX, CX
    MOV BX, 10
oi2:
    XOR DX, DX
    DIV BX
    PUSH DX
    INC  CX
    TEST AX,AX
    JNZ  oi2
    MOV AH, 02H
oi3:
    POP DX
    CMP DL, 9
    JBE oi4
    ADD DL, 7
oi4:
    ADD DL, '0'
    INT 21H
    LOOP oi3       
    ;======================
    ;=wait for any key....=
    ;======================      
    lea dx, pkey
    mov ah, 9
    int 21h
    ;=====================   
    ;=====================  
    mov ah, 1
    int 21h 
    JMP InputRESTART
;================================================================
;==========================Tormoz================================
;================================================================         
tormoz:         
    lea dx, msg2
    mov ah, 9
    int 21h
    ;======================
    ;=wait for any key....=
    ;======================      
    lea dx, pkey
    mov ah, 9
    int 21h
    ;=====================   
    ;=====================  
    mov ah, 1
    int 21h  
    JMP InputRESTART   
Exit:    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends
 
end start ; set entry point and stop the assembler.
Добавлено через 23 минуты
иСПРАВИЛ ПЕРВЫЙ БАГ
ТЕПЕРЬ ЧИСЛА НЕ ПРЕОБРАЗУЮТСЯ БОЛЬШЕЕ -99
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
InputRESTART:
    XOR CX, CX
    XOR BP, BP
    XOR AX, AX 
InputStart:    
    mov  ah, 09h
    lea  dx, req
    int  21h
    
    mov ah, 0Ah
    lea dx, inpbuf      
    int 21h
    
    CMP len, 0
    JE  er
    LEA SI, DBbuF
    LEA DI, dwArray
    
    MOV BX, 10              ;notation
    XOR DX, DX
nachalo:
    cmp byte ptr [si],"-" 
    jnz positive
    mov BH,1  
    inc si
    PUSH BX
positive: 
    PUSH DX  
    xor ax,ax
    XOR BH,BH
Inputcycle:     
    mov CL,[SI]
    CMP CL,0dh   ;ne konec li stroki         
    JZ  proverka
    CMP CL,20h
    JZ  proverka ; konec chisla (probel)
    
    SUB CL,'0'
    JL er
    CMP CL,9
    JA er
    MUL BX
    ADD AX, CX
    INC SI
    JMP Inputcycle
    
proverka:
    POP DX
    POP BX
    INC DL
    CMP BH,1
    JNZ neminys
    NEG AX
neminys:
    XOR BH, BH
    MOV [DI], AX
    ADD DI, 2
    INC SI
    CMP CL, 0dh
    JZ  endin    
    JMP nachalo    
er:
    MOV DX, offset error
    MOV AH, 09
    INT 21h
    ;======================
    ;=wait for any key....=
    ;======================      
    lea dx, pkey
    mov ah, 9
    int 21h
    ;=====================   
    ;=====================  
    mov ah, 1
    int 21h
    ;======================
    ;=====clear screen=====
    ;======================   
    MOV  AH, 00H
    MOV  AL, 03H  
    INT    10H  
    JMP InputRESTART 
           
endin:
    XOR DH, DH
    MOV dimension, DX
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2015, 20:34
Ответы с готовыми решениями:

Ввод нескольких чисел через пробел, некорректный вывод
первое число выводится корректно, а второе нет( .model small .stack 100h...

Программа (TASM), которая разрешает ввод только 5 символов
Необходимо написать программу на ассемблере (TASM), которая разрешает ввод...

Некорректный результат умножения
Скажите пожалуйста, если ставлю переменную 130 , то эффективный адрес после...

некорректный результат программы с прцедурой
Вечер добрый. Уже решали эту задачу...но её оказывается надо с использованием...

Некорректный вывод числа на экран
В чем может быть проблемма, если после использывания процедуры OutInt proc ...

1
Constantin Cat
1946 / 1034 / 364
Регистрация: 28.02.2015
Сообщений: 2,317
Завершенные тесты: 1
04.06.2015, 22:37 2
строки 19, 24, 42
У Вас 8-мь есть РОНов, используете только AX, BX, CX, DX, SI при этом используете BX ещё и для запоминания знака минус. Как же DI, ВР.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2015, 22:37

Некорректный вывод в массив Assembler
Код, который в матрице 4на3 в 1 строке считает среднее арифметическое элементов...

Некорректный вывод массива чисел на TASM
Доброго времени суток. Не могу разобраться с программой. Работаю c TASM. Есть...

Некорректный вывод отрицательного результата вычисления (C+Assembler)
Доброй ночи. Само задание (-17*a+32-b)/(c-a*c/b) Работаем в dosbox(C+ASM)....


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

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

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