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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2013, 12:37   #1
spider844360
 
Регистрация: 22.02.2010
Сообщений: 5
По умолчанию Программа на ассемблере

Помогите пожалуйста до завтра срочно нужно: после каждых 64-х опросов цифрового прибора среднее арифметическое полученных результатов должно выводиться в порт вывода.
spider844360 вне форума Ответить с цитированием
Старый 13.05.2013, 13:43   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

spider844360,
если срочно, тогда однозначно в раздел фриланс
Mikl___ вне форума Ответить с цитированием
Старый 23.05.2013, 21:37   #3
Dregatar
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 11
По умолчанию

Доброго времени суток, подскажите как написать программу :отображение содержимого директории (аналог DIR ). Возможность вывода структуры каталогов в виде древа.
Помогите пожалуйста, а то зашиваюсь....
Dregatar вне форума Ответить с цитированием
Старый 24.05.2013, 03:54   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Dregatar
вот несколько вариантов вызова DIR программным способом
1)
Код:
; masm dos com #
.286
.model tiny
.code
org 100h
start:	mov ah,4Ah	;allow mem alloc.
	mov bx,10h	;новый размер блока в параграфах
	int 21h		
	mov si,offset command_line
	int 2Eh	; execute a command using BASE LEVEL
	mov ah,4Ch	;выходим из программы
	int 21h
command_line db N,'DIR',0Dh
N = $ - command_line - 1
end  start
2)
Код:
; masm dos com #
.286
.model tiny
.code
org 100h
start:  mov si,offset string	
	mov cx,N
@@:	push cx
	lodsb
	mov ah,5      ;номер функции
	mov cl,al;передача параметра через регистр CL, содержимое CH=0 
	int 16h
	pop cx
	loop @b
	retn
string db 'DIR',0Dh
N = $ - string
end start
3)
Код:
; masm dos com #
.286
.model tiny
.code
org     100h
start:  mov ah,4Ah      ;модифицируем назначенную память
        mov bx,100h     ;новый размер блока в параграфах
        int 21h         
        or bx,-1        ;требуемое число параметров для выполнения
        mov ah,48h      ;вделить блок памяти
        int 21h         ;возвращает в bx размер наибольшего доступного блока 
;памяти в параграфах
        mov ah,48h      ;вделить блок памяти, в bx действительно доступная память
        int 21h         ;возвращает в ах сегментный адрес выделенного блока
        mov es,ax       ;es:=new PSP
        mov ss,ax       ;ss:=new PSP
        xchg dx,ax      ;dx:=new PSP
        mov ah,26h      ;создать новый префикс программного сегмента
        int 21h         
        mov dx,offset filename
        mov di,80h      ;указатель на командную строку
        mov cx,(N+1)/2  ;копируем по два байта за раз, N округлен в большую 
;сторону к числу кратному два, поэтому добавочный movsb не нужен
        mov si,offset command_line
        rep movsw       ;создаем командную строку для запуска command.com
        mov ax,3D00h    ;открыть command.com на чтение
        int 21h
        xchg bx,ax      ;дескриптор файла в bx
        xor cx,cx       ;cx=dx=0
        xor dx,dx
        mov ax,4202h    ;установить файловый указатель на конец файла
        int 21h
        push ax         ;сохраним в стеке длину файла command.com
        mov ax,4200h    ;установить файловый указатель на начало файла
        int 21h
        mov dx,es       ;пересчитываем чему должен быть равен dx из расчета,
        add dx,10h      ;что cs*10h+dx=es*10h+100h
        mov cx,cs
        sub dx,cx
        shl dx,4        ;в dx адрес буфера, куда будет скопирован command.com
        pop cx          ;в сх число байтов для чтения 
        mov ah,3Fh      ;читаем command.com в буфер
        int 21h
        mov ah,3Eh      ;закрыть файл command.com
        int 21h
        mov ax,es       ;ds:=new PSP
        mov ds,ax       ;при старте СОМ-файла cs=ds=es=ss=PSP ip=100h
        push es         ;новое значение cs:=new PSP
        push 100h       ;новое значение ip:=100h
        retf            ;запускаем command.com для создания файла myfile.txt
filename db 'c:\windows\system32\command.com',0;полный путь к command.com
command_line db N-1,'/c DIR',0Dh
N = $ - command_line
db 0; если N нечетное, то скопируется и добавочный нулевой символ 
end     start
4)
Код:
; masm dos com #
.286
.model tiny
.code
org 100h
start:  mov bx,100h     ;выделим блок памяти в 256 параграфов
        mov ah,4Ah               
        int 21h
        mov bx,offset parametrs ;указываем на блок параметров
        mov [bx+4],cs
        mov dx,offset filename
        mov ax,4B00h;загрузить и выполнить программу из командной строки
        int 21h
        retn        ;выход в DOS
command_line db N,'/c DIR',0Dh
N = $-command_line-1;длина командной строки
;командная строка типа pascal, начинается с байта длины строки, заканчивается
;ASCII-кодом клавиши Enter (0Dh). При передаче команды CMD.EXE нужно указать /С перед 
;строкой (требование вызова вторичного командного процессора). Программу cmd.exe
;из папки windows\system32\ проще разместить в том же каталоге, что и программа
filename db 'cmd.exe',0
parametrs dw 0,command_line,5 dup(0);блок параметров
end start

Последний раз редактировалось Mikl___; 24.05.2013 в 03:59.
Mikl___ вне форума Ответить с цитированием
Старый 24.05.2013, 09:38   #5
Dregatar
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 11
По умолчанию

Спасибо Mikl___ сейчас буду роздупляться))))
Dregatar вне форума Ответить с цитированием
Старый 24.05.2013, 10:29   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Спасибо Mikl___ сейчас буду роздупляться))))
Dregatar,
не хочу быть неправильно понятым, но "дупа" по-украински это "жoпa"
Mikl___ вне форума Ответить с цитированием
Старый 24.05.2013, 10:51   #7
Dregatar
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 11
По умолчанию

Извини если не правильно выразился))) я хотел сказать разберусь с кодом)
Dregatar вне форума Ответить с цитированием
Старый 24.05.2013, 11:02   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Dregatar,
а чего с ним разбираться? Программы рабочие, комментарии написаны, разбираться нужно было до того как сюда написал, с учебником и Гуглом
Mikl___ вне форума Ответить с цитированием
Старый 24.05.2013, 11:45   #9
Dregatar
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 11
По умолчанию

Да ты прав, правда есть один вопрос:
1) во втором примере " @@: " TASM говорит ошибка не знает что это такое, это же просто метка правильно?
2) А в 4 варианте, компилирует всё нормально но при запуске ничего ( пустая строчка при запуске программы)
*если вопросы глупые, извини, хочу разобраться*
Dregatar вне форума Ответить с цитированием
Старый 24.05.2013, 13:05   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Dregatar
обрати внимание на верхнюю строку
Код:
; masm dos com #
написано для masm, предназначено для DOS, соберется COM-файл, в масме @@ - локальная метка, их в тексте может быть несколько штук, loop @b - переход на ближайшую локальную метку назад, jmp @f - переход на ближайшую локальную метку вперед. Чтобы работало в тасме нужно или переименовать метки или добавить в начало исходного файла директиву QUIRKS
Комментарии для кого написаны? Для преподавателя?
Цитата:
Программу cmd.exe из папки windows\system32\ проще разместить в том же каталоге, что и программа

Последний раз редактировалось Mikl___; 24.05.2013 в 13:07.
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на Ассемблере Nikita566 Помощь студентам 1 16.01.2013 11:23
программа на ассемблере Александp Помощь студентам 0 17.06.2012 13:04
Программа на ассемблере polyakov1993 Помощь студентам 1 18.04.2012 09:03
Программа на ассемблере Madara88 Помощь студентам 0 31.03.2011 16:48
программа на Ассемблере Катя Петрова Помощь студентам 0 24.04.2010 18:50