Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 24.09.2011
Сообщений: 7

Посчитать Y= (1*J) /(Z+S)*K-4

19.10.2011, 00:48. Показов 1377. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите исправить программу, считает неправильно и в чем собственно ошибка немогу понять(
За ответы зарание благодарен
вот формула по котрой должна считать программа
Y= (1*J) /(Z+S)*K-4
вот сам код


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
    .model tiny     ;Модель пам'яті, використовується для СОМ
    .data       ;Початок сегмента даних
    
msq db "Enter J = ",'$' 
mss db "Enter Z = ",'$'
msf db "Enter S = ",'$'
msx db "Enter K = ",'$'
msz db "Results =",'$'
mse db 0Dh,0Ah,'$'
            
    .code               ;Початок сегмента кода
    org     100h        ;Початкове значення лічильника 100h
            
start:
;Вводимо з клавіатури значення зміної X
    ;Повідомлення для вводу цифри з клавіатури
        mov     ah,09h            
        mov     dx,offset msx
        int     21h               
    ;Зчитуємо символ з клавіатури
        mov     ah,01h            
        int 21h               
    ;Перетворюємо ASCII код в цифру    
        sub al,'0'
        mov ah,0
    ;Запихаєм в стек
        push ax
    ;Нова стрічка
        mov ah, 09h
        mov dx, offset mse
        int 21h
 
;Вводимо з клавіатури значення зміної F     
    ;Повідомлення для вводу цифри з клавіатури
        mov     ah,09h            
        mov     dx,offset msf
        int     21h               
    ;Зчитуємо символ з клавіатури
        mov     ah,01h            
        int     21h               
    ;Перетворюємо ASCII код в цифру    
        sub al,'0'
        mov ah,0
    ;Запихаєм в стек
        push ax
    ;Нова стрічка
        mov ah, 09h
        mov dx, offset mse
        int 21h
 
;Вводимо з клавіатури значення зміної S
    ;Повідомлення для вводу цифри з клавіатури
        mov     ah,09h            
        mov     dx,offset mss
        int     21h               
    ;Зчитуємо символ з клавіатури
        mov     ah,01h            
        int     21h               
    ;Перетворюємо ASCII код в цифру    
        sub al,'0'
        mov ah,0
    ;Запихаєм в стек
        push ax
    ;Нова стрічка
        mov ah, 09h
        mov dx, offset mse
        int 21h
        
;Вводимо з клавіатури значення зміної Q
    ;Повідомлення для вводу цифри з клавіатури
        mov     ah,09h            
        mov     dx,offset msq
        int     21h               
    ;Зчитуємо символ з клавіатури
        mov     ah,01h            
        int     21h               
    ;Перетворюємо ASCII код в цифру    
        sub  al,'0'
        mov  ah,0
    ;Запихаєм в стек
        push ax
    ;Нова стрічка
        mov ah, 09h
        mov dx, offset mse
        int 21h
 
;ОБЧИСЛЕННЯ
POP ax 
pop bx
pop dx
add dx, bx
div dx
pop dx
mul dx
xor bx,bx
mov bl, 04h
sub ax, bx
push ax
 
 
;Виводимо Відповідь
        mov ah, 09h
        mov dx, offset msz
        int 21h
 
        pop ax      ;Виймаємо Z зі стеку
 
        call print  ;Виклик підпрограми
        
;Пауза перед завершенням програми
        mov ah, 09h     
        mov dx, offset mse  ;Почати новий рядок
        int 21h
        mov ah,01h          ;Пауза до натискання кнопки
        int 21h
        
 
        ret                 ;Заваршення СОМ-програми
    
;Підпрограма для виводу числа з регістра ax на екран
print       proc
        push    ax          ;Заштовхуємо до стеку робочі регістри
        push    bx
        push    cx
        push    dx
        xor     cx, cx      ;Очищаємо cx
        test    ax, ax      ;Перевірка ax
        jge     p1          ;Перехід на p1 якщо > або =
        mov     dl, '-'     ;Негативне число, виводимо мінус
        neg     ax          ;Зміна знаку числа в ax
        jmp     short p2        ;Перезід до мітки p2
p1:     mov     dl, ' '
p2:     push    ax          ;Заштовхуємо ax до стеку
        mov     ah, 02h     ;Код для виводу символу
        int     21h     ;Переревання Дос
        pop     ax          ;Виштовхуємо ax зі стеку
        mov     bx, 10      ;bx=10
p3:     cwd             ;Розширюємо ax
        div     bx          ;ділимо на 10
        add     dl, '0'     
        push    dx          ;Заштовхуємо dx в стек
        inc     cx          ;Інкрементуємо cx
        test    ax, ax      ;Перевірка ax
        jnz     p3          ;Перейти на p3 якщо не нуль
        mov     ah, 02h     ;Код для виводу символу
p4:     pop     dx          ;Виштовхуємо dx зі стеку
        int     21h     ;Виклик перериваня Дос
        loop    p4          ;переходити до мітки p4 поки cx!=0
        pop     dx          ;Виштовхуємо зі стеку роб. рег.
        pop     cx
        pop     bx
        pop     ax
        ret             ;Вихід з підпрограми
print       endp 
end start                   ;Кінець програми
Добавлено через 3 часа 24 минуты
все кажись делал правильно но работать правильно отказывается(, тоесть щитает но результат неправильный... ну отзовитесь хоть кто то(((
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.10.2011, 00:48
Ответы с готовыми решениями:

Посчитать в свитче посчитать пр формуле, ошибка #QNAN0 в результате
Доброго времени суток, помогите пожалуйста понять ошибку. Когда запускаю прогу, в значениях она выдает мне #QNAN0. До этого работало все...

Изменяя число i от 1 до n (без пробелов) получить число. Посчитать в нем количество каждых цифр. Посчитать общее число цифр
Дано число n меньше или равно 30 000. Изменяя число i от 1 до n будем записывать получившееся число подряд без пробелов, и получим некое...

В ячейке А3 посчитать сумму положительных элементов. В ячейке С3 посчитать произведение отрицательных элементов
Задание вроде не сложное. Ввести 10 чисел с клавиатуры. В ячейке А3 посчитать сумму положительных элементов. В ячейке С3 посчитать...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
22.10.2011, 02:15
Лучший ответ Сообщение было отмечено volvo как решение

Решение

считает неправильно и в чем собственно ошибка немогу понять
Собственно, раз программа должна компилироваться в COM-файл, то у нее может быть только один сегмент, данные располагаются тут же, в сегменте кода. Ну, и еще с делением была проблемка, см. комментарии. Вот как-то так:

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
.model tiny ; Модель пам'яті, використовується для СОМ
.code       ; Початок сегмента кода
org 100h        ; Початкове значення лічильника 100h
 
start:
    ; Вводимо з клавіатури значення зміної X
    ; Повідомлення для вводу цифри з клавіатури
    mov ah, 09h
    mov dx, offset msx
    int 21h
    ; Зчитуємо символ з клавіатури
    mov ah, 01h
    int 21h
    ; Перетворюємо ASCII код в цифру
    sub al, '0'
    mov ah, 0
    ; Запихаєм в стек
    push ax
    ; Нова стрічка
    mov ah, 09h
    mov dx, offset mse
    int 21h
    
    ; Вводимо з клавіатури значення зміної F
    ; Повідомлення для вводу цифри з клавіатури
    mov ah, 09h
    mov dx, offset msf
    int 21h
    ; Зчитуємо символ з клавіатури
    mov ah, 01h
    int 21h
    ; Перетворюємо ASCII код в цифру
    sub al, '0'
    mov ah, 0
    ; Запихаєм в стек
    push ax
    ; Нова стрічка
    mov ah, 09h
    mov dx, offset mse
    int 21h
 
    ; Вводимо з клавіатури значення зміної S
    ; Повідомлення для вводу цифри з клавіатури
    mov ah, 09h
    mov dx, offset mss
    int 21h
    ; Зчитуємо символ з клавіатури
    mov ah, 01h
    int 21h
    ; Перетворюємо ASCII код в цифру
    sub al, '0'
    mov ah, 0
    ; Запихаєм в стек
    push ax
    ; Нова стрічка
    mov ah, 09h
    mov dx, offset mse
    int 21h
 
    ; Вводимо з клавіатури значення зміної Q
    ; Повідомлення для вводу цифри з клавіатури
    mov ah, 09h
    mov dx, offset msq
    int 21h
    ; Зчитуємо символ з клавіатури
    mov ah, 01h
    int 21h
    ; Перетворюємо ASCII код в цифру
    sub al, '0'
    mov ah, 0
    ; Запихаєм в стек
    push ax
    ; Нова стрічка
    mov ah, 09h
    mov dx, offset mse
    int 21h
 
 
    ; ОБЧИСЛЕННЯ
    pop ax      ; AX <- J
    pop bx      ; BX <- Z
    pop dx      ; DX <- S
    add dx, bx  ; DX <- Z + S
    ; div dx    ; Деление слова на байт, AX / DL, а не AX / DX
    div dl
    pop dx
    mul dx
    xor bx,bx
    mov bl, 04h
    sub ax, bx
    push ax
    
    ;Виводимо Відповідь
    mov ah, 09h
    mov dx, offset msz
    int 21h
    
    pop ax          ; Виймаємо Z зі стеку
    call print          ; Виклик підпрограми
    ; Пауза перед завершенням програми
    mov ah, 09h
    mov dx, offset mse  ; Почати новий рядок
    int 21h
    mov ah, 01h     ; Пауза до натискання кнопки
    int 21h
    ret             ; Заваршення СОМ-програми
 
; Підпрограма для виводу числа з регістра ax на екран
print:
    push ax         ; Заштовхуємо до стеку робочі регістри
    push bx
    push cx
    push dx
    xor cx, cx      ; Очищаємо cx
    test ax, ax     ; Перевірка ax
    jge p1          ; Перехід на p1 якщо > або =
    mov dl, '-'     ; Негативне число, виводимо мінус
    neg ax          ; Зміна знаку числа в ax
    jmp short p2        ; Перезід до мітки p2
p1:
    mov dl, ' '
p2:
    push ax         ; Заштовхуємо ax до стеку
    mov ah, 02h     ; Код для виводу символу
    int 21h         ; Переревання Дос
    pop ax          ; Виштовхуємо ax зі стеку
    mov bx, 10      ; bx=10
p3:
    cwd             ; Розширюємо ax
    div bx          ; ділимо на 10
    add dl, '0'
    push dx         ; Заштовхуємо dx в стек
    inc cx          ; Інкрементуємо cx
    test ax, ax     ; Перевірка ax
    jnz p3          ; Перейти на p3 якщо не нуль
    mov ah, 02h     ; Код для виводу символу
p4:
    pop dx          ; Виштовхуємо dx зі стеку
    int 21h         ; Виклик перериваня Дос
    loop p4         ; переходити до мітки p4 поки cx!=0
    pop dx                     ; Виштовхуємо зі стеку роб. рег.
    pop cx
    pop bx
    pop ax
    ret             ; Вихід з підпрограми
 
msq db "Enter J = ", '$' 
mss db "Enter Z = ", '$'
msf db "Enter S = ", '$'
msx db "Enter K = ", '$'
msz db "Results =", '$'
mse db 0Dh, 0Ah, '$'
 
end start               ; Кінець програми
Компилировалось TASM 3.0:
tasm arh.asm
tlink /t arh.obj


Запуск:
F:\Asm30>arh
Enter K = 5
Enter S = 3
Enter Z = 1
Enter J = 8
Results = 6

F:\Asm30>
Вроде, все правильно (1*8)/(1+3)*5 - 4 = 6.
0
0 / 0 / 0
Регистрация: 24.09.2011
Сообщений: 7
22.10.2011, 22:11  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Собственно, раз программа должна компилироваться в COM-файл, то у нее может быть только один сегмент, данные располагаются тут же, в сегменте кода. Ну, и еще с делением была проблемка, см. комментарии. Вот как-то так:

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
.model tiny ; Модель пам'яті, використовується для СОМ
.code       ; Початок сегмента кода
org 100h        ; Початкове значення лічильника 100h
 
start:
    ; Вводимо з клавіатури значення зміної X
    ; Повідомлення для вводу цифри з клавіатури
    mov ah, 09h
    mov dx, offset msx
    int 21h
    ; Зчитуємо символ з клавіатури
    mov ah, 01h
    int 21h
    ; Перетворюємо ASCII код в цифру
    sub al, '0'
    mov ah, 0
    ; Запихаєм в стек
    push ax
    ; Нова стрічка
    mov ah, 09h
    mov dx, offset mse
    int 21h
    
    ; Вводимо з клавіатури значення зміної F
    ; Повідомлення для вводу цифри з клавіатури
    mov ah, 09h
    mov dx, offset msf
    int 21h
    ; Зчитуємо символ з клавіатури
    mov ah, 01h
    int 21h
    ; Перетворюємо ASCII код в цифру
    sub al, '0'
    mov ah, 0
    ; Запихаєм в стек
    push ax
    ; Нова стрічка
    mov ah, 09h
    mov dx, offset mse
    int 21h
 
    ; Вводимо з клавіатури значення зміної S
    ; Повідомлення для вводу цифри з клавіатури
    mov ah, 09h
    mov dx, offset mss
    int 21h
    ; Зчитуємо символ з клавіатури
    mov ah, 01h
    int 21h
    ; Перетворюємо ASCII код в цифру
    sub al, '0'
    mov ah, 0
    ; Запихаєм в стек
    push ax
    ; Нова стрічка
    mov ah, 09h
    mov dx, offset mse
    int 21h
 
    ; Вводимо з клавіатури значення зміної Q
    ; Повідомлення для вводу цифри з клавіатури
    mov ah, 09h
    mov dx, offset msq
    int 21h
    ; Зчитуємо символ з клавіатури
    mov ah, 01h
    int 21h
    ; Перетворюємо ASCII код в цифру
    sub al, '0'
    mov ah, 0
    ; Запихаєм в стек
    push ax
    ; Нова стрічка
    mov ah, 09h
    mov dx, offset mse
    int 21h
 
 
    ; ОБЧИСЛЕННЯ
    pop ax      ; AX <- J
    pop bx      ; BX <- Z
    pop dx      ; DX <- S
    add dx, bx  ; DX <- Z + S
    ; div dx    ; Деление слова на байт, AX / DL, а не AX / DX
    div dl
    pop dx
    mul dx
    xor bx,bx
    mov bl, 04h
    sub ax, bx
    push ax
    
    ;Виводимо Відповідь
    mov ah, 09h
    mov dx, offset msz
    int 21h
    
    pop ax          ; Виймаємо Z зі стеку
    call print          ; Виклик підпрограми
    ; Пауза перед завершенням програми
    mov ah, 09h
    mov dx, offset mse  ; Почати новий рядок
    int 21h
    mov ah, 01h     ; Пауза до натискання кнопки
    int 21h
    ret             ; Заваршення СОМ-програми
 
; Підпрограма для виводу числа з регістра ax на екран
print:
    push ax         ; Заштовхуємо до стеку робочі регістри
    push bx
    push cx
    push dx
    xor cx, cx      ; Очищаємо cx
    test ax, ax     ; Перевірка ax
    jge p1          ; Перехід на p1 якщо > або =
    mov dl, '-'     ; Негативне число, виводимо мінус
    neg ax          ; Зміна знаку числа в ax
    jmp short p2        ; Перезід до мітки p2
p1:
    mov dl, ' '
p2:
    push ax         ; Заштовхуємо ax до стеку
    mov ah, 02h     ; Код для виводу символу
    int 21h         ; Переревання Дос
    pop ax          ; Виштовхуємо ax зі стеку
    mov bx, 10      ; bx=10
p3:
    cwd             ; Розширюємо ax
    div bx          ; ділимо на 10
    add dl, '0'
    push dx         ; Заштовхуємо dx в стек
    inc cx          ; Інкрементуємо cx
    test ax, ax     ; Перевірка ax
    jnz p3          ; Перейти на p3 якщо не нуль
    mov ah, 02h     ; Код для виводу символу
p4:
    pop dx          ; Виштовхуємо dx зі стеку
    int 21h         ; Виклик перериваня Дос
    loop p4         ; переходити до мітки p4 поки cx!=0
    pop dx                     ; Виштовхуємо зі стеку роб. рег.
    pop cx
    pop bx
    pop ax
    ret             ; Вихід з підпрограми
 
msq db "Enter J = ", '$' 
mss db "Enter Z = ", '$'
msf db "Enter S = ", '$'
msx db "Enter K = ", '$'
msz db "Results =", '$'
mse db 0Dh, 0Ah, '$'
:yahoo:
end start               ; Кінець програми
Компилировалось TASM 3.0:
tasm arh.asm
tlink /t arh.obj


Запуск:
Вроде, все правильно (1*8)/(1+3)*5 - 4 = 6.
Большое спасибо:dance3: все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2011, 22:11
Помогаю со студенческими работами здесь

Посчитать сумму числового ряда+посчитать сумму ряда для 9 слагаемых
задача №1 у(n)=1-x+x^2-...+(-x)^n Посчитать сумму числового ряда для 9 слагаемых задача №2 Посчитать сумму числового ряда. ...

Как посчитать площадь некой части 3d поверхности импортированной с Google Earth в AutoCAD., Как посчитать площадь некой части 3d поверхности
Площадь всей импортированной 3d поверхности выводится в свойствах поверхности, а как посчитать площадь некой части этой 3d поверхности. ...

посчитать
посчитать

Посчитать
Посчитать

посчитать $i
суть в том, что есть цикл, в котором элементы имеют один ID, но все же это разные элементы. нужно пройтись по нему и заполнить &lt;option...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru