Помогите плз...
Помогите плззз
№1
Дан txt файл с информацией в виде целых чисел.
Найти и записать в этот же файл среднее арифметическое этих чисел, а затем вывести на экран и числа и среднее арифметическое.
№2
Дан txt файл с информацией в виде чисел и букв.
Вывести на экран сначала всю информацию файла, а потом тоже самое токо задом наперед.
Заранее огромное спасибо.
Очень прошу помочь...
Использовать прерывания DOS?
assembler?
Использовать прерывания DOS?
Да Ассемблер.Прерывания использовать необязательно.Прошу сделать простенько, чтобы смог объяснить.
Спасибо что взялся.
P.S. Как можно открыть файл без прерываний?
А что именно не получается?
P.S. Как можно открыть файл без прерываний?
Не получается сделать.Я пару раз пробовал, но безуспешно((
Времени нету да и не силен я в Ассеме.
Значит с прерываниями(вот видишь как не силен)
Помоги плизззз
Очень надо.Прям позарез.
Файловые функции(все через int 21h):
1.Функция DOS Fn 3cH - создать файл через описатель
2. DOS Fn 3dH: открыть описатель файла
3. DOS Fn 3eH: Закрыть описатель файла
4. DOS Fn 3fH: читать файл через описатель
5. DOS Fn 40H: писать в файл через описатель
6. DOS Fn 41H: Удалить файл
7. DOS Fn 42H: установить указатель файла -- LSEEK
Этого, в принципе, должно хватить.
Сам файл создавать не будем, ну его :) Будем считать, что он уже есть.
;----------открытие---------------------
datasegment segment para public 'data'
NameFile db 'c:\myfile.txt',0
Handle dw 0
datasegment ends
codesegment segment para public 'code'
assume cs:codesegment, ds:datasegment, ss:stacksegment
start:
mov ax,datasegment
mov ds,ax
mov ah,3dh
mov dx,offset NameFile
mov al,2;r/w
int 21h
jc ErrorOpening
;not error
mov Handle,ax;received handle
;......
ErrorOpening:
;......
;-------- exit ----
mov ax,4c00h
int 21h
;------------------
codesegment ends
end start
;----------------------------
Стоп. теперь нужно уточнение. Приведи пример файла с данными или хотя бы скажи: 1. Для 1-го:какая длина каждого числа,
сколько чисел на строке, чем разделены числа; 2.Во втором задании нужно просто прочитать и вывести на
экран файл по байтам от начала к концу и от конца к началу?
Понимаешь, у меня тоже...времени не густо... Давай я помогу, но советами.
Файловые функции(все через int 21h):
1.Функция DOS Fn 3cH - создать файл через описатель
2. DOS Fn 3dH: открыть описатель файла
3. DOS Fn 3eH: Закрыть описатель файла
4. DOS Fn 3fH: читать файл через описатель
5. DOS Fn 40H: писать в файл через описатель
6. DOS Fn 41H: Удалить файл
7. DOS Fn 42H: установить указатель файла -- LSEEK
Этого, в принципе, должно хватить.
Сам файл создавать не будем, ну его :) Будем считать, что он уже есть.
;----------открытие---------------------
datasegment segment para public 'data'
NameFile db 'c:\myfile.txt',0
Handle dw 0
datasegment ends
codesegment segment para public 'code'
assume cs:codesegment, ds:datasegment, ss:stacksegment
start:
mov ax,datasegment
mov ds,ax
mov ah,3dh
mov dx,offset NameFile
mov al,2;r/w
int 21h
jc ErrorOpening
;not error
mov Handle,ax;received handle
;......
ErrorOpening:
;......
;-------- exit ----
mov ax,4c00h
int 21h
;------------------
codesegment ends
end start
;----------------------------
Стоп. теперь нужно уточнение. Приведи пример файла с данными или хотя бы скажи: 1. Для 1-го:какая длина каждого числа,
сколько чисел на строке, чем разделены числа; 2.Во втором задании нужно просто прочитать и вывести на
экран файл по байтам от начала к концу и от конца к началу?
длина чисел небольшая от 1 - 10. Между числами пробелы.
Да сначала выводится содержание файла, а потом тоже самое токо задом наперед.
;---------- 2 ---------------------
stacksegment segment para stack 'stack'
dw 10h dup(?)
stacksegment ends
datasegment segment para public 'data'
NameFile db 'c:\myfile.txt',0
Handle dw 0
buffer db 0
datasegment ends
codesegment segment para public 'code'
assume cs:codesegment, ds:datasegment, ss:stacksegment
start:
mov ax,datasegment
mov ds,ax
mov ah,3dh
mov dx,offset NameFile
mov al,2;r/w
int 21h
jc ErrorOpening
;not error
mov Handle,ax;received handle
my_loop:
mov ah,3fh
mov bx,Handle
mov dx,offset buffer
mov cx,1
int 21h
jc ErrorReading
cmp ax,cx
jl EndOfFile
;readed 1 byte from file successfully
mov ah,06h
mov dl,buffer
int 21h
jmp my_loop
EndOfFile:
my_loop_2:
mov ah,42h
mov bx,Handle
mov cx,0FFFFh;
mov dx,0FFFEh; moving on -1
mov al,1
int 21h
jc SeekError
mov ah,3fh
mov bx,Handle
mov dx,offset buffer
mov cx,1
int 21h
jc ErrorReading
cmp ax,cx
jl EndOfFile_2
;readed 1 byte from file successfully
mov ah,06h
mov dl,buffer
int 21h
jmp my_loop_2
EndOfFile_2:
SeekError:
;......
ErrorReading:
;......
ErrorOpening:
;......
mov ah,3eh
mov bx,Handle
int 21h
;-------- exit ----
mov ax,4c00h
int 21h
;------------------
codesegment ends
end start
;---------------------------
P.S. в первом номере числа однозначные (0..9) и на одной строке?
Номер 2 готов.
;---------- 2 ---------------------
stacksegment segment para stack 'stack'
dw 10h dup(?)
stacksegment ends
datasegment segment para public 'data'
NameFile db 'c:\myfile.txt',0
Handle dw 0
buffer db 0
datasegment ends
codesegment segment para public 'code'
assume cs:codesegment, ds:datasegment, ss:stacksegment
start:
mov ax,datasegment
mov ds,ax
mov ah,3dh
mov dx,offset NameFile
mov al,2;r/w
int 21h
jc ErrorOpening
;not error
mov Handle,ax;received handle
my_loop:
mov ah,3fh
mov bx,Handle
mov dx,offset buffer
mov cx,1
int 21h
jc ErrorReading
cmp ax,cx
jl EndOfFile
;readed 1 byte from file successfully
mov ah,06h
mov dl,buffer
int 21h
jmp my_loop
EndOfFile:
my_loop_2:
mov ah,42h
mov bx,Handle
mov cx,0FFFFh;
mov dx,0FFFEh; moving on -1
mov al,1
int 21h
jc SeekError
mov ah,3fh
mov bx,Handle
mov dx,offset buffer
mov cx,1
int 21h
jc ErrorReading
cmp ax,cx
jl EndOfFile_2
;readed 1 byte from file successfully
mov ah,06h
mov dl,buffer
int 21h
jmp my_loop_2
EndOfFile_2:
SeekError:
;......
ErrorReading:
;......
ErrorOpening:
;......
mov ah,3eh
mov bx,Handle
int 21h
;-------- exit ----
mov ax,4c00h
int 21h
;------------------
codesegment ends
end start
;---------------------------
P.S. в первом номере числа однозначные (0..9) и на одной строке?
Спасибо огромнейшее.
Да числа 1 2 3 4 5 6 7 8 9 10
Скажи пожалуйста какой фуекцией ты выводишь сообщение на экран.
Вывожу на экран посимвольно функцией 06h от 21-го прерывания
mov ah,06h
mov dl,buffer
int 21h
Работа над 1-й идет...
stacksegment segment para stack 'stack'
dw 10h dup(?)
stacksegment ends
datasegment segment para public 'data'
NameFile db 'c:\myfile.txt',0
Handle dw 0
buffer db 0
summator dw 0
message db 13,10,'Srednee arifmeticheskoe: '
counter db 0
db 24h; end of string for 09h(int 21h)
datasegment ends
codesegment segment para public 'code'
assume cs:codesegment, ds:datasegment, ss:stacksegment
start:
mov ax,datasegment
mov ds,ax
mov ah,3dh
mov dx,offset NameFile
mov al,2;r/w
int 21h
jc ErrorOpening
;not error
mov Handle,ax;received handle
my_loop:
mov ah,3fh
mov bx,Handle
mov dx,offset buffer
mov cx,1
int 21h
jc ErrorReading
cmp ax,cx
jl EndOfFile
;readed 1 byte from file successfully
mov al,buffer
cmp al,39h ;>9?
ja BadSymbol
cmp al,30h ;<0?
jb BadSymbol
;symbol of the digit
and al,0Fh
;good digit 0..9
xor ah,ah;clear ah
add summator,ax
inc counter
BadSymbol:
mov ah,06h
mov dl,buffer
int 21h
jmp my_loop
EndOfFile:
;...
SeekError:
;......
ErrorReading:
;......
ErrorOpening:
;......
mov ax,summator
mov bl,counter
div bl
add al,30h
mov counter,al
mov dx,offset message
mov ah,09h
int 21h
mov ah,40h
mov bx,Handle
mov dx,offset message
mov cx,28;length of the message
int 21h;write to file
mov ah,3eh
mov bx,Handle
int 21h
;-------- exit ----
mov ax,4c00h
int 21h
;------------------
codesegment ends
end start
;----------------------------
;Числа должны быть 0..9
;среднее арифметическое округленное
Очень выручил.
Спасибо еще раз.
Ты очень помог.
Вижу вы разбираетесь в ассемблере
Помогите пожалуйста советом. С помощью каких средств проще всего научиться программировать на ассемблере? Я когда то программировал на zx spectrum
Хороший комп такой был, у меня досих пор ностальгия. :(
Хотел бы программировать на pc, уже немного разбирался с самой структрурой адресации, она отличается от спектрумовской тем что имеет сегменты.
Буду рад советам. Заранее спасибо.
1.Литература:
1.1. Юров,"Assembler. 2-e издание"(бумажный)
1.2. Зубков "Ассемблер для DOS, Windows и Unix"(электронный)
1.3. Абель "Ассемблер и программирование для IBM PC"(электронный)
1.4. Метров 5 прочих доков из Интернета
2.Ассемблеры:
2.1. TASM (когда нужно exe под DOS)
2.2. NASM (когда нужен чистый bin)
2.3. MASM32 (этот под Windows, правда сильно в нем не писал)
3.Дизассемблеры и дебаггеры
3.1. IDA (консольный)
3.2. TurboDebugger (DOS)
3.3. RockDebugger (Windows)
Или под средствами имеется ввиду что-то другое?
Скажите где в этой проге сумма делится на количество чисел.
Мне надо чтобы токо складывалось, но не делилось.Покажите плз что убрать нада.А ещ я очень хотел бы попросить дать какое нить простенько меню чтобы в него легко моно было засунуть 2 проги.Оочень нада.
Препод псих. Сначала проги потом меню, а потом еще чо то там сказала будет. Ппц. Выручайте плиззз.
;----------1---------------------
stacksegment segment para stack 'stack'
dw 10h dup(?)
stacksegment ends
datasegment segment para public 'data'
NameFile db 'c:\myfile.txt',0
Handle dw 0
buffer db 0
summator dw 0
message db 13,10,'Srednee arifmeticheskoe: '
counter db 0
db 24h; end of string for 09h(int 21h)
datasegment ends
codesegment segment para public 'code'
assume cs:codesegment, ds:datasegment, ss:stacksegment
start:
mov ax,datasegment
mov ds,ax
mov ah,3dh
mov dx,offset NameFile
mov al,2;r/w
int 21h
jc ErrorOpening
;not error
mov Handle,ax;received handle
my_loop:
mov ah,3fh
mov bx,Handle
mov dx,offset buffer
mov cx,1
int 21h
jc ErrorReading
cmp ax,cx
jl EndOfFile
;readed 1 byte from file successfully
mov al,buffer
cmp al,39h ;>9?
ja BadSymbol
cmp al,30h ;<0?
jb BadSymbol
;symbol of the digit
and al,0Fh
;good digit 0..9
xor ah,ah;clear ah
add summator,ax
inc counter
BadSymbol:
mov ah,06h
mov dl,buffer
int 21h
jmp my_loop
EndOfFile:
;...
SeekError:
;......
ErrorReading:
;......
ErrorOpening:
;......
mov ax,summator
mov bl,counter
div bl
add al,30h
mov counter,al
mov dx,offset message
mov ah,09h
int 21h
mov ah,40h
mov bx,Handle
mov dx,offset message
mov cx,28;length of the message
int 21h;write to file
mov ah,3eh
mov bx,Handle
int 21h
;-------- exit ----
mov ax,4c00h
int 21h
;------------------
codesegment ends
end start
;----------------------------
mov ax,summator ;перенос суммы в ax
mov bl,counter ;перенос в bl количества эементов
DIV BL ;!!!деление!!!!
меню выбора скоро будет
stacksegment segment para stack 'stack'
dw 10h dup(?)
stacksegment ends
datasegment segment para public 'data'
NameFile db 'c:\myfile.txt',0
Handle dw 0
buffer db 0
summator dw 0
message db 13,10,'Srednee arifmeticheskoe: '
counter db 0
db 24h; end of string for 09h(int 21h)
firstmsg db '1 - program 1',13,10,'2 - program 2',13,10,24h
datasegment ends
codesegment segment para public 'code'
assume cs:codesegment, ds:datasegment, ss:stacksegment
start:
mov ax,datasegment
mov ds,ax
mov dx,offset firstmsg
mov ah,09h
int 21h
wait_key:
mov ah,06h
mov dl,0ffh
int 21h
jz wait_key
cmp al,31h
je prg_1
prg_2:
call progr2
jmp exit
prg_1:
call progr1
exit:
;-------- exit ----
mov ax,4c00h
int 21h
;------------------
progr1 proc
mov ah,3dh
mov dx,offset NameFile
mov al,2;r/w
int 21h
jc p1_ErrorOpening
;not error
mov Handle,ax;received handle
p1_my_loop:
mov ah,3fh
mov bx,Handle
mov dx,offset buffer
mov cx,1
int 21h
jc p1_ErrorReading
cmp ax,cx
jl p1_EndOfFile
;readed 1 byte from file successfully
mov al,buffer
cmp al,39h ;>9?
ja p1_BadSymbol
cmp al,30h ;<0?
jb p1_BadSymbol
;symbol of the digit
and al,0Fh
;good digit 0..9
xor ah,ah;clear ah
add summator,ax
inc counter
p1_BadSymbol:
mov ah,06h
mov dl,buffer
int 21h
jmp p1_my_loop
p1_EndOfFile:
;...
p1_SeekError:
;......
p1_ErrorReading:
;......
p1_ErrorOpening:
;......
mov ax,summator
mov bl,counter
div bl
add al,30h
mov counter,al
mov dx,offset message
mov ah,09h
int 21h
mov ah,40h
mov bx,Handle
mov dx,offset message
mov cx,28;length of the message
int 21h;write to file
mov ah,3eh
mov bx,Handle
int 21h
ret
progr1 endp
progr2 proc
mov ah,3dh
mov dx,offset NameFile
mov al,2;r/w
int 21h
jc p2_ErrorOpening
;not error
mov Handle,ax;received handle
p2_my_loop:
mov ah,3fh
mov bx,Handle
mov dx,offset buffer
mov cx,1
int 21h
jc p2_ErrorReading
cmp ax,cx
jl p2_EndOfFile
;readed 1 byte from file successfully
mov ah,06h
mov dl,buffer
int 21h
jmp p2_my_loop
p2_EndOfFile:
p2_my_loop_2:
mov ah,42h
mov bx,Handle
mov cx,0FFFFh;
mov dx,0FFFEh; moving on -2
mov al,1
int 21h
jc p2_SeekError
mov ah,3fh
mov bx,Handle
mov dx,offset buffer
mov cx,1
int 21h
jc p2_ErrorReading
cmp ax,cx
jl p2_EndOfFile_2
;readed 1 byte from file successfully
mov ah,06h
mov dl,buffer
int 21h
jmp p2_my_loop_2
p2_EndOfFile_2:
p2_SeekError:
;......
p2_ErrorReading:
;......
p2_ErrorOpening:
;......
mov ah,3eh
mov bx,Handle
int 21h
ret
progr2 endp
codesegment ends
end start
В той проге я все вроде правильно поменял и деление убрал, а у меня вместо ответа какие то символы дибильные*(((
а у меня вместо ответа какие то символы дибильные*(((
Это ничего, значит просто 30h не прибавил.
Для чисел 0..9 коды ASCII: 30h..39h
Это ничего, значит просто 30h не прибавил.
Для чисел 0..9 коды ASCII: 30h..39h
Все есть. Я взял исходник который считает среднее арифметическое и просто убрал оттуда деление а у меня ответ непонятный((
Подскажите плз ( мне дали меню с 2 мя прогами я там одну заменяю. мне надо поставить туда прогу на графику, а при запуске ее просто выходит в волков и все((() памагите.
Тоесть меню и первая прога пашет гуд а вот на графику вылетает и все.
Помогите плиззз.
Исходничек в студию!:D
Смори выше)))
Исходничек выше и начинается
--------------------1------------------
вот так воть и меню тоже тама