Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2009, 13:10   #1
policedog
Новичок
Джуниор
 
Регистрация: 26.05.2009
Сообщений: 1
По умолчанию Ввод данных

Программа написана, работает правильно. Единственная проблема не могу дописать ввод даты с клавиатуры. В данный момент дата вводиться прямо в программе. Помогите пожалуйста. Ввод даты день-месяц-год. Составить программу, выясняющую, какой день недели соответствует
введенной с клавиатуры дате (день-месяц-год). Программа должна быть
способна считать и для дат до нашей эры. При этом нужно учесть, что
нулевого года не было. Расчет провести по григорианскому и юлианскому
календарю.
Код программы:

Цитата:
; Title 157179
; Вычисление дня недели


.model tiny
JUMPS ; генерирутся код, допускающий условные переходы на

; расстояние больше 256
.386 ; для использования расширенных регистров
.code
org 100h
start:
; mov ax, 3
; int 10h
; проверка допустимости введенных значений
; не производится - полагаем, что данные введены


; правильно

; вычисления с помощью сопроцессора
finit
; установка правила округления
fstcw mem16
and mem16, 1111001111111111b
or mem16, 1111011111111111b
fldcw mem16



; используются формулы, описанные в http://krutov.org/algorithms/julianday
; то есть, через вычисленние юлианского дня
mov eax, month

cmp eax, 2

ja @@_M
dec year
add eax, 12
mov month, eax
@@_M:
fild year
fidiv jd_c2
frndint
fistp A

mov ax, Grigor
or ax, ax
jz @@_uli


fild A
fild jd_c3
fdiv
frndint
fisub A
fld1
fadd
fld1
fadd
frndint
fistp B
@@_uli:

fild year


fiadd jd_c4
fld jd_c1
fmul
frndint
fild month
fld1
fadd
fmul jd_c5
frndint
fadd
fadd day
fiadd B
fadd jd_c6
fst JD


; юлианский день рассчитан
; вычисление дня недели
fadd jd_c7
frndint
fistp JD

mov eax, JD
mov ebx, 7
xor edx, edx
div ebx
; в EDX - остаток = день недели


mov ah, 9
or edx, edx
jz @@_sunday
cmp edx, 1
je @@_monday
cmp edx, 2
je @@_Tuesday
cmp edx, 3
je @@_wednesday
cmp edx, 4
je @@_thursday


cmp edx, 5
je @@_friday
jmp @@_saturday

@@_sunday:
lea dx, sunday
jmp @@_out
@@_monday:
lea dx, monday
jmp @@_out
@@_Tuesday:
lea dx, Tuesday


jmp @@_out
@@_wednesday:
lea dx, wednesday
jmp @@_out
@@_thursday:
lea dx, thursday
jmp @@_out
@@_friday:
lea dx, friday
jmp @@_out
@@_saturday:


lea dx, saturday
jmp @@_out

@@_out:
int 21h
@@_Exit:
lea dx, msg_press
mov ah, 9
int 21h
xor ax, ax
int 16h
int 20h

; задание даты
; проверял по http://www.calculatorcat.com/free_ca..._of_week.phtml

year dd 200 ; отрицательный = до нашей эры
month dd 01
day dq 1.0
Grigor dw 1 ; 0 = по юлианскому, не ноль = по григорианскому

; постоянные, используемые в формуле
jd_c1 dq 365.25


jd_c2 dw 100
jd_c3 dw 4
jd_c4 dd 4716
jd_c5 dq 30.6001
jd_c6 dq -1524.5
; для вычисления дня недели
jd_c7 dq 1.5

; для ясности - промежуточные переменные

A dd ?

B dd 0
; Юлианский день
JD dd ?

; для установки правила округления (нужно до ближайшего меньшего целого)
; командой frndint
mem16 dw 0

sunday db 'воскресенье$'


monday db 'понедельник$'
Tuesday db 'вторник$'
wednesday db 'среда$'
thursday db 'четверг$'
friday db 'пятница$'
saturday db 'суббота$'




msg_press db 13,10,'Нажмите любую клавишу ...$'
end start
policedog вне форума Ответить с цитированием
Старый 30.05.2009, 21:53   #2
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Чтобы снять нажатие клавишы нужно использовать прерывание. Для нескольких нажатий - несколько прерываний.
BaronTreep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод данных Deni55 Microsoft Office Excel 7 01.06.2009 16:46
ВВод данных в БД Марьяна БД в Delphi 5 25.02.2009 23:17
ввод данных opel.omega Общие вопросы Delphi 12 18.11.2008 14:15
Ввод данных Илья Кибель Помощь студентам 1 28.05.2008 11:12
ввод данных с клавиатуры juden Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.05.2008 18:05