Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
SkyDimm
0 / 0 / 0
Регистрация: 17.04.2009
Сообщений: 1
1

Траблы с делением. Посоветуйте что - нибудь.

20.04.2009, 17:28. Просмотров 1131. Ответов 1
Метки нет (Все метки)

Сразу прошу прощения за индийский код, но я пока пытаюсь разобраться в этом языке. Вот задали лабораторную работу. Все вычисления производятся правильно, но при делении( -318/-3) получается -1432154... и в edx 000000001.Помогите пожалуйста.
Вот код :

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
name lw
.386
.model flat, stdcall
option casemap: none
 
include C:\Masm32\include\windows.inc
include C:\Masm32\include\kernel32.inc
include C:\Masm32\include\user32.inc
 
includelib C:\Masm32\lib\kernel32.lib
includelib C:\Masm32\lib\user32.lib
 
bSize equ 128
.data
 
 msgCaption db 'Результаты вычислений: ', 0
; msgFormula db '3*(9-80)-5*(1+20))/(2-5)', 0
 msgText db bSize dup (?)
 Buf db bSize dup (?)
 CRLF db 0Dh, 0Ah
 StdOut dd ?
 StdIn dd ?
 cWrite dd ?
 cRead dd ?
 Fmt db '%d  %c  %d  =  %d                                                     ', 0
 
.code
Begin:
invoke AllocConsole
invoke SetConsoleTitle, addr msgCaption
 
 
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov StdOut, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov StdIn, eax
 
invoke SetConsoleTextAttribute, StdOut, 02h
invoke SetConsoleCursorPosition, StdOut, 0Ah
 
invoke WriteConsole, StdOut, addr msgCaption, \
sizeof msgCaption, addr cWrite, NULL
invoke WriteConsole, StdOut, addr CRLF, sizeof CRLF, \
addr cWrite, NULL
 
mov esi, 9
mov edi, 80
mov ebp,esi
sub ebp,edi
 
;mov ebp, esi
;add ebp, edi
 
invoke wsprintf, addr msgText, addr Fmt, esi,'-', edi, ebp
 
 
invoke WriteConsole, StdOut, addr msgText, \
sizeof msgCaption, addr cWrite, NULL
invoke WriteConsole, StdOut, addr CRLF, sizeof CRLF, \
addr cWrite, NULL
;/////////////////////////////////////////////////////////////////////////////////////////
 
 
mov esi, 3
mov edi,esi
imul edi,ebp
mov ebx,edi
 
invoke wsprintf, addr msgText, addr Fmt, esi,'*', ebp, ebx
 
 
 
invoke WriteConsole, StdOut, addr msgText, \
sizeof msgCaption, addr cWrite, NULL
invoke WriteConsole, StdOut, addr CRLF, sizeof CRLF, \
addr cWrite, NULL
 
;/////////////////////////////////////////////////////////////////////////////////////////
 
 
 
mov esi, 1
mov edi, 20
mov ebp,esi
add ebp,edi
 
 
invoke wsprintf, addr msgText, addr Fmt, esi,'+', edi, ebp
 
 
invoke WriteConsole, StdOut, addr msgText, \
sizeof msgCaption, addr cWrite, NULL
invoke WriteConsole, StdOut, addr CRLF, sizeof CRLF, \
addr cWrite, NULL
;/////////////////////////////////////////////////////////////////////////////////////////
 
 
mov esi, 5
mov edi, ebp
imul ebp,esi
 
 
invoke wsprintf, addr msgText, addr Fmt, esi,'*', edi, ebp
 
 
 
invoke WriteConsole, StdOut, addr msgText, \
sizeof msgCaption, addr cWrite, NULL
invoke WriteConsole, StdOut, addr CRLF, sizeof CRLF, \
addr cWrite, NULL
 
;/////////////////////////////////////////////////////////////////////////////////////////
 
 
mov esi, ebx
mov edi, ebp
mov ebp,esi
sub ebp,edi
mov ebx, ebp
 
invoke wsprintf, addr msgText, addr Fmt, esi,'-', edi, ebp
 
 
invoke WriteConsole, StdOut, addr msgText, \
sizeof msgCaption, addr cWrite, NULL
invoke WriteConsole, StdOut, addr CRLF, sizeof CRLF, \
addr cWrite, NULL
 
;/////////////////////////////////////////////////////////////////////////////////////////
 
 
 
mov esi, 2
mov edi, 5
mov ebp,esi
sub ebp,edi
 
invoke wsprintf, addr msgText, addr Fmt, esi,'-', edi, ebp
 
 
invoke WriteConsole, StdOut, addr msgText, \
sizeof msgCaption, addr cWrite, NULL
invoke WriteConsole, StdOut, addr CRLF, sizeof CRLF, \
addr cWrite, NULL
 
;/////////////////////////////////////////////////////////////////////////////////////////
 
 
 
xor eax,eax
xor edx,edx
 
mov eax, ebx;-318
mov ecx, ebp;-3
;mov edx, 0FFFFh ; кладем 0FFFFh
idiv ecx
 
mov ebp,eax
 
invoke wsprintf, addr msgText, addr Fmt, ebx,'/', ecx, ebp
 
 
invoke WriteConsole, StdOut, addr msgText, \
sizeof msgCaption, addr cWrite, NULL
invoke WriteConsole, StdOut, addr CRLF, sizeof CRLF, \
addr cWrite, NULL
 
 
 
 
invoke ReadConsole, StdIn, addr Buf, bSize, addr cRead, NULL
 
invoke FreeConsole
invoke MessageBox, NULL, addr msgText, addr msgCaption, 40h
invoke ExitProcess, NULL
end Begin
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2009, 17:28
Ответы с готовыми решениями:

Посоветуйте литературу для начинающего. И вообще что-нибудь толковое посоветуйте )))
думал поступать в шаг, но 2.5 года и 500 баксов в семестр это много. особенно 2.5года. а...

Посоветуйте что нибудь
Нужен ноут для постоянного таскания с собой. Диагональ до 13.3" важно долгое время автономной...

Посоветуйте что-нибудь
Дали мне два сайта раскручивать, пока что регистрирую их вручную в белых каталогах. Результатов...

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

Посоветуйте что нибудь
Привет всем Вопрос не мой меня попросил мой друг Помогите пожалуйста . Я напишу вам что он мне...

1
CodeGrinder
0 / 0 / 0
Регистрация: 21.08.2008
Сообщений: 17
09.06.2009, 10:15 2
Понимаю что слишком поздно, но с такой проблемой часто сталкиваются новички.

Перед делением здесь нужно провести знаковую коррекцию содержимого регистра
edx. Правильный код будет выглядеть так:

Assembler
1
2
3
4
5
6
7
8
;xor eax,eax
;xor edx,edx
 
mov eax, ebx;-318
mov ecx, ebp;-3
cdq   ; !!!
;mov edx, 0FFFFh ; кладем 0FFFFh
idiv ecx
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2009, 10:15

Посоветуйте что-нибудь по логированию
В общем, нужна хороша библиотека логирования. И какие методы логирования посоветуете? Не в каждый...

Посоветуйте что-нибудь по оптимизации
Собственно вот сайт : http://smile.uaze.net/ Какие советы по оптимизации?

Java io. Посоветуйте что-нибудь обширное
Обычно встречал информацию по java.io в формате "давайте считаем отсюда, запишем сюда". Хотелось...


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

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

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