Задачка по Асму (Tasm)
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Задачка по Асму (Tasm) - 2010-01-06 19:18:37.963333
|
|
|
n1ntendo
Сообщений: 21
Оценки: 0
Присоединился: 2010-01-06 19:10:27.293333
|
Доброго времени суток! помогите решить задачу: Напишите программу, которая запрашивает дату между 1980 и 2099 годами. Программа должна определять день недели, соответствуещий дате, и выводить результат на экран. Знаю при помощи каких функций реализовать, есть код который нужно довести до ума. Не бесплатно! Скину на ВМ как договормся ) стучите 808-968
|
|
|
RE: Задачка по Асму (Tasm) - 2010-01-07 17:07:53.630000
|
|
|
n1ntendo
Сообщений: 21
Оценки: 0
Присоединился: 2010-01-06 19:10:27.293333
|
Где вы, гуру ассемблера?? Вобщем идея такова: получаем дату с клавиатуры, устанавливаем ее как системную, узнаем какой это день недели при помощи функции 2fH прерывания INT 21h, потом возвращаем ранее сохраненную системную дату. Вот мой гавнокод, пока пытаюсь установить дату )) ниче не выходит :
.model small
.stack 100h
.data
dm db 3
dr db ?
d db 3 dup (?)
m db 3,?,3 dup (?)
g dw 5,?,5 dup (?)
den db ?
news db 0ah,0dh,'$'
mes_d db 'vvedite den -> $'
mes_m db 0ah,0dh,'vvedite mesyac -> $'
mes_g db 0ah,0dh,'vvedite god -> $'
.code
met: mov ax, dgroup
mov ds, ax
mov ax, 0003h
int 10h
mov dx, offset mes_d
mov ah, 09h
int 21h
mov ah,0ah
lea dx,dm
int 21h
mov ax,0
mov bx,0
mov cx,0
mov cl,dr
mov di,0
n: mov bl, byte ptr d[di] ; тут пытаюсь преобразовать строку
sub bl, 30h-48
mul d
add ax,bx
inc di
loop n
mov bx, 2
cwd
div bx
mov cx,0
mov dx,0
mov den,al ; как я понимаю преобразованная строка должна быть в АЛ ??? вот пока сдесь главный вопрос
;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;
mov dx, offset mes_m
mov ah,09h
int 21h
mov dx, offset m
mov ah,0ah
int 21h
mov dx, offset mes_g
mov ah,09h
int 21h
mov dx, offset g
mov ah, 0ah
int 21h
mov dl,den ;set date
mov dh, 07
mov cx, 1998
mov ah,2bh
int 21h
;mov ah,2ch ;get date
;int 21h
mov ah, 08h
int 21h
mov ax, 4c00h
int 21h
end met Жду помощи камрады! в долгу не останусь
|
|
|
RE: Задачка по Асму (Tasm) - 2010-01-10 15:07:22.883333
|
|
|
n1ntendo
Сообщений: 21
Оценки: 0
Присоединился: 2010-01-06 19:10:27.293333
|
никто помочь не может ? плачу 30 вмз за код
|
|
|
RE: Задачка по Асму (Tasm) - 2010-01-10 23:51:11.566666
|
|
|
tеstеr
Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
|
Алгоритм получения дня недели советую выбрать человеческий: http://en.wikipedia.org/wiki/Zeller's_congruence или вот тут два варианта алгоритма: http://pers.narod.ru/text/calendar.html Или можешь свой алгоритм реализовать, зная например, что 1 января 1980-го это вторник (не знаю точно), и дальше считай - високосный год или нет, суммируй разницу в днях до введённой даты. Вычисленную разницу дней (между введённой датой и 1 января 1980-го) дели на 7, остаток будет разницой в дне недели с 1 января 1980-го. Например, если осталок от деление = 2, то этот день недели = вторник + 2 = четверг. У меня времени кодить нет. Могу дать совет только - как побыстрее разработать программу (в свое время прочел в трудах Криса Касперский). Установить Visual Studio (лучше 7-ю или 2003-ю - тогда еще ассемблерные вставки можно было делать). Набросать код. int main() { char[5] str_day = "04"; char[5] str_month = "05"; char[5] str_year = "2000"; int day, month, year; byte Number; __asm{ // тут пишесь ассемблерный код, который преобразует символы строк str_day, str_month и str_year в числа. } __asm{ // тут пишесь ассемблерный код, который берёт числа day, month, year и получает из них Number - день недели. } return 0; } Преимущество этого подхода - встроенный отладчик, условные точки останова, подсветка синтаксиса, … Как отладишь прогу - переписывай все на ассемблер, т.е. char[5] str_day = "04"; превращай в db str_day dub(5) + процедура считывания входных данных. mov ah 01h int 21 h (короче дальше все просто)
|
|
|
|
|