Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
5 / 5 / 1
Регистрация: 23.02.2013
Сообщений: 71
1

Деление

20.10.2013, 17:42. Просмотров 737. Ответов 2
Метки нет (Все метки)

Деление знаковых чисел, в результате почему-то 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
.model small
 .data
input1 db 0dh,0ah,'Enter first number  : $'
input2 db 0dh,0ah,'Enter second number : $'
output db 0dh,0ah,'Result = $'
output2 db 0dh,0ah,'Error'
 
buf label byte  ; прием строки с клавиатуры
max db 20  ; максимальная длина строки
len db 0  ; реальная длина введенной строки
string db 20 dup (?) ; собственно сама строка
 
 .code
 .startup
 
Get_First:
 lea dx, input1 
 call GetNum  
 jc Get_First 
 mov bx, ax  
 
Get_Second:
 lea dx, input2
 call GetNum
cmp ax,0
 jc Get_Second
 cwd
idiv bx  ; dx:ax/bx
 
 
 lea dx, output 
 call PrintNum 
 
 mov ah, 0  
 int 16h
 
 mov ax,4c00h
 int 21h
 
PrintNum proc
 push ax
 mov ah, 9
 int 21h  ; вывод строки (из DX)
 pop ax
 
 test ax, ax  ;проверим на знак
 jns form_str ;для положительного на вывод
 push ax  ;для отрицательного выводим - и меняем знак
 mov al,'-'  ;знак -
 int 29h
 pop ax
 neg ax  ;меняем знак числа на +, теперь оно положительное
 
form_str:
 mov bx, 10  
 xor cx, cx  
div_loop:   
 xor dx, dx  
 div bx 
 push dx  
 inc cx  
 test ax, ax  
 jnz div_loop ; 
 
pr_loop:   
 pop ax  
 add al, '0'  
 int 29h  
 loop pr_loop  
 
 ret
PrintNum endp
;
GetNum proc   ; преобразование сроки в число
 push bx
 mov ah, 9
 int 21h  ; приглашение ввести строку
 lea dx, buf
 mov ah, 0ah
 int 21h  ; вводим строку
 
 xor di, di  ; здесь будем накапливать число
 mov cl, 0  ; флаг знака
 mov ch, 0  ; количество цифр
 xor bx, bx  ; очередной знак (для сложения со словом)
 lea si, string ; числовая строка
get_num_loop:
 lodsb   
 
 cmp al, 0dh
 je num_end_found
 cmp al, ' '
 je num_end_found
 cmp al, 9
 je num_end_found
 
 cmp al, '-'
 jne cmp_num
 test ch, ch  
 jnz set_c  
 test cl, cl 
 jnz set_c  
 mov cl, 1  
 jmp get_num_loop 
cmp_num:
 cmp al, '0'  
 jb set_c   
 cmp al, '9'
 ja set_c
 
 inc ch  
 and al, 0fh 
 mov bl, al  
 mov ax, 10 
 imul di  
 test dx, dx  
 jnz set_c
 add ax, bx  
 jc set_c  
 js set_c  
 mov di, ax  
 jmp get_num_loop 
 
num_end_found:  
 test ch, ch  
 jz set_c  
 test cl, cl  
 jz get_num_ret
 neg di 
get_num_ret:
 mov ax, di  
 pop bx
 clc   
 ret
set_c:
 pop bx
 stc   
GetNum endp 
 
 end
Заранее благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2013, 17:42
Ответы с готовыми решениями:

Деление знаковых чисел с выводом ошибки "Деление на ноль"
Собственно поставили передо мной задачу - написать прогу деления двух чисел, причем что бы...

Деление
data SEGMENT a DW 20 b DW 6 c DW ? data ENDS code SEGMENT assume cs:code,ds:data...

Деление -7 / -32
emu8086 По заданию надо разделить -7 на -32. С положительными числами ( 7/32 )все правильно...

Деление
Требуется посчитать данную формулу: A = x-x1/x на микроконтроллере pic. Пока никак не могу...

2
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
20.10.2013, 17:51 2
Sevi4_by, в программе делится число, введённое вторым на первое. Попробуйте ввести сначала большее число.
1
5 / 5 / 1
Регистрация: 23.02.2013
Сообщений: 71
20.10.2013, 18:29  [ТС] 3
Еще не могли бы добавить функцию, при которой удаляется вся строка при нажатии клавиши esc
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2013, 18:29

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

Деление
как поделить 36 на 125?Только чтобы сохранилось число 0,288 или 288 сохранялось. Можно пример...

Умножение и деление
Сейчас покажу пример программы, по которому мне нужно сделать работающий код в emu8086, только с...

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

Деление сдвигом
нужно разделить 64 на 8 делаю так Mov Ax,64 MOV CX,3 SHR AX,CX Но, преподаватель говорит,...


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

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

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