0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 2
1

Программа не работает, найдите ошибку, пожалуйста

24.12.2013, 20:38. Показов 656. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго вечера всем читающим. Пишу программу на ассемблере (masm) по универскому заданию. Сразу скажу, в этом деле я новичок, поэтому код достаточно корявый. Задание: "С клавиатуры вводится целое 16-битное беззнаковое число А.
Определить, является ли год А високосным и вывести ответ на экран. Високосными считаются года кратные 4, НО из всех годов, кратных 100, високосные только те, что кратны 400 (т.е. 1700, 1800, 1900 - не високосные, 1600, 2000 - високосные)
Мой код:
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
include io.asm 
stack segment stack
    dw 128 dup (?)
stack ends
data segment
    assume ss:stack, ds:data, cs:code
vis db 'javljaetsja visokosnym$'
nvis db 'ne javljaetsja visokosnym$'
data ends
code segment 'code'
    assume ss:stack, ds:data, cs:code
start:
        mov ax,data
        mov ds,ax
        mov ax,100
        inint bx
    mov cx,bx
        div bx
        cmp dx,0
        jz L1
        jnz L2
 
L1:    mov ax,400
        div cx
        cmp dx,0
        jz L3
        jnz L4
 
L2:    mov ax,4
        div cx
        cmp dx,0
        jz L3
        jnz L4
 
L3:    mov dx,offset vis
        outstr
        jmp L5
 
L4:    mov dx,offset nvis
        outstr
        
L5:
        
finish
code ends
end start
Кажется, что все правильно, но программа ВСЕГДА выводит, что год не високосный.. Подскажите, в чем ошибка.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2013, 20:38
Ответы с готовыми решениями:

Не работает, найдите пожалуйста ошибку
// lr2.cpp: главный файл проекта. #include "stdafx.h" #include <iostream> #include <stdio.h>...

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

Найдите пожалуйста ошибку, а то она не работает
#include<stdio.h> #include<math.h> void main(){ float i,y; int x; printf("\n vvedite znachenie...

Не работает скрипт. найдите ошибку, пожалуйста
доброго времени суток. Написал лабу на JS, но не работает. помогите найти ошибку,...

3
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
24.12.2013, 21:22 2
Дык, вот оно. Уж за китайский извините.
0
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 2
24.12.2013, 21:31  [ТС] 3
Спасибо! Поможет для дальнейшего изучения Проблема в том, что я должна написать программу, используя только пройденный материал.. Т.е., примерно так, как и сделала выше.
0
551 / 33 / 6
Регистрация: 11.12.2013
Сообщений: 92
24.12.2013, 22:40 4
Цитата Сообщение от socionik Посмотреть сообщение
Проблема в том, что я должна написать программу, используя только пройденный материал.. Т.е., примерно так, как и сделала выше.
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
include io.asm
 
stck    segment stack
        dw      128 dup (?)
stck    ends
 
data    segment
        assume ss:stck, ds:data, cs:code
vis     db      'javljaetsja visokosnym$'
nvis    db      'ne javljaetsja visokosnym$'
data    ends
 
code    segment 'code'
        assume ss:stck, ds:data, cs:code
start:
        mov     ax, data        ; Инициализируем сегмент данных
        mov     ds, ax
 
        inint   ax              ; ax <- число, введённое с клавиатуры
        mov     cx, ax          ; Сохраняем число в cx
 
;----- Проверяем, делится ли год на 4 без остатка
 
        mov     bx, 4           ; Поделим dx:ax (год) на bx (4)
        xor     dx, dx          ; Содержимое dx нас не интересует
        div     bx              ; Выполняем деление
        test    dx, dx          ; Остаток равен нулю?
        jnz     no              ; Если нет, год не является високосным
 
;----- Проверяем, делится ли год на 100 без остатка
 
        mov     bx, 100
        mov     ax, cx
        div     bx
        test    dx, dx          ; Остаток равен нулю?
        jnz     yes             ; Если нет, год високосный и проверку
                                ; с делением на 400 можно пропустить
 
;----- Год делится на 100, поэтому проверяем, делится ли на 400
 
        mov     bx, 400
        mov     ax, cx
        div     bx
        test    dx, dx          ; Остаток равен нулю?
        jnz     no              ; Если нет, год не является високосным
 
yes:                            ; Это високосный год
        mov     dx,offset vis   ; Адресуем строку с этим сообщением
        jmp     short exit      ; Пропускаем противоположное утверждение
 
no:
        mov     dx,offset nvis  ; Это не високосный год
 
exit:
        outstr                  ; Выводим сообщение на экран
        finish                  ; Завершаем работу программы
code    ends
 
        end     start
P.S. Когда используете сторонние include-файлы, прикрепляйте их в архиве к сообщению. Не все же в МГУ учатся
0
24.12.2013, 22:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2013, 22:40
Помогаю со студенческими работами здесь

Не работает ajax найдите пожалуйста ошибку
Продолжаю разбираться с ajax, но пока что не очень получается. Недавно уже обращался на ваш форум с...

Программа неправильно работает. Найдите ошибку
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; int main() { int grade; int aCount=0, bCount=0, ...

найдите пожалуйста ошибку!
d_ seg segment ;заголовок сегмента данных st db ' добрый день', 10...

найдите пожалуйста ошибку!
Построить таблицу значений функции y=cos2 x(косинус в квадрате) +2sin x –ex(х это степень) +3/x,...

Пожалуйста, найдите ошибку
while True: import random a= random.choice() b= random.choice() c=...

Найдите ошибку, пожалуйста
Задача: Дано ряд символов. Заменить в нем круглые скобки на квадратные. Строку считывает,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru