русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Пример программы для практики


Дата добавления: 2013-12-23; просмотров: 708; Нарушение авторских прав


LPOVERLAPPED lpOverlapped); (5)

LPDWORD lpNumberOfBytesRead, (4)

DWORD nNumberOfBytesToRead, (3)

LPVOID lpBuffer, (2)

BOOL ReadFile(HANDLE hFile, (1)

Чтение данных из файла

Чтение данных из файла можно произвести с помощью функции ReadFile():

 

Для того, чтобы функция выполнилась успешно, файл из которого будет производиться чтение должен быть открыт с флагом GENERIC_READ.

– hFile – хэндл того файла, из которого будет производиться чтение.

– lpBuffer – указывает на буфер, в который будет производиться чтение данных.

– nNumberOfBytesToRead определяет число байтов, которые необходимо прочесть из файла.

– в буфер lpNumberOfBytesRead будет записано число реально прочитанных байтов.

– аргумент lpOverlapped используется только для асинхронного ввода-вывода. При синхронном вводе необходимо этому параметру передать значение NULL.

 


; Считать данные из файла data.txt в массив структур. (struk4.asm)

.386

.model flat, stdcall

extrn ExitProcess:PROC

worker struc ;информация о сотруднике

nam db 30 dup (" ") ;фамилия, имя, отчество

position db 30 dup (" ") ;должность

age db 2 dup (" ") ;возраст

standing db 2 dup (" ") ;стаж

salary db 4 dup (" ") ;оклад в гривнах

birthdate db 8 dup (" ") ;дата рождения

worker ends ; 76 байт в строке в файле

.data

mas_sotr worker 10 dup (<>)

N db 10

filename db 'data.txt',0

fname dd 0

handle dd ?

bufreal dd ?

mem dd ?

bufread dd ?

Ttl db 'Massiv',0h

mes1 db 'Massiv: ',0ah,0dh

.code

start:

mov ecx,N

mov ebx,type worker

mov mem,ebx

lea edi,mas_sotr

; CreateFileA

mov eax,offset filename

mov fname,eax

push 00000000h ;



push 00000080h ;

push 00000003h

push 00000000h

push 00000001h

push 0C000000h

push fname

call CreateFileA

cmp eax,0

jz exit

mov handle,eax

; ReadFile

xor eax,eax

mov ecx,10

mov esi,0

mov edi,0

cld

label_1:

push 0

push bufreal

push mem

push bufread

push handle

call ReadFile

mov eax,bufreal

cmp eax,mem

jne exit

mov ebx,offset mas_sotr

mov esi,(type worker)*edi ; edi - индекс элемента в массиве

add edi,ebx

push ecx

mov ecx,mem

lea edi, bufread

rep movsb

pop ecx

inc edi

loop label_1

 

exit:

push 0h

call ExitProcess

end start

Не обещаю, что работает!


; Программа формирует массив структур. В массиве 3 элемента. Массив вводится вручную.

; На экран выводится возраст всех сотрудников

masm

model small

.stack 100h

 

worker struc ;информация о сотруднике

nam db 15 dup (' ') ;имя

lastnam db 15 dup (' ') ; фамилия

age db 2 dup (' ') ;возраст

worker ends

 

.data

buf1 db 15 dup (20h)

pole dw ?

pole1 db 2 dup (?) ; поле для вывода возраста

db 0ah,0dh,'$'

N=3 ; размерность массива

mas_sotr worker N dup (<>)

 

mes1 db 'Vvedite 3 elementa strukturi: ','$'

mnam db 10,13,'Vvedite imya: ', '$'

mlastnam db 10,13,'Vvedite familiyou: ','$'

 

mage db 10,13,'Vvedite vozrast: ','$'

mes db 10,13,'Vozrast=',10,13,'$'

 

.code

assume ds:@data,es:@data

start:

mov ax,@data

mov ds,ax

xor ax,ax

push ds

pop es

Vvod:

mov dx,offset mes1 ; mes1 = 'Vvedite 3 elementa strukturi: ','$'

mov ah,09h ;Функция Dos вывода сообщения на

int 21h

mov cx,N

mov si,0

mov bx, offset mas_sotr

mov ax, type worker

mov dl,0

mul dl

add ax,bx

cld

; Цикл cykl2 – цикл формирования массива структур в памяти.

cykl2:

push cx

mov di,ax

mov pole,ax

 

mov dx,offset mnam

mov ah,09h ;Функция Dos вывода сообщения на

int 21h

lea dx,buf1

mov ah,0ah ; Функция 0ah записывает в буфер buf1, находящийся по адресу в dx

; введённую строку

int 21h

push si

lea si,buf1

add si,1

mov cl,byte ptr [si]

add si,1

rep movsb

pop si

 

mov dx,offset mlastnam

mov ah,09h ;Функция Dos вывода сообщения на

int 21h

lea dx,buf1

mov ah,0ah

int 21h

push si

lea si,buf1

add si,1

mov cl,byte ptr [si]

mov di,pole

add di,15

add si,1

rep movsb

pop si

 

mov dx,offset mage

mov ah,09h ;Функция Dos вывода сообщения на

int 21h

lea dx,buf1

mov ah,0ah

int 21h

push si

lea si,buf1

add si,1

mov cl,byte ptr [si]

mov di,pole

add di,30

add si,1

rep movsb

pop si

 

jmp label_1

m1:

loop cykl2

; ----------------------------------------Метка label_1: продолжение цикла cykl2, так как он получается

; очень большим, то часть цикла вынесли за его пределы.

label_1:

pop cx

cmp cx,1

je vivod

inc si

mov ax, type worker

mov dx,si

mul dl

add ax,bx

jmp m1

; -------------------------------------------В конец массива структур записываем конец вывода '$'.

Vivod:

mov byte ptr [di],'$'

mov dx,offset mes

mov ah,9h

int 21h

; ------------------------------------------В поле pole1 записывается возраст каждого сотрудника из

; массива структур в памяти. Далее содержимое поля pole1 выводится на экран.

 

lea si,mas_sotr

mov bx, type worker

mov ax,0

lea di,pole1

mov cx,3

cykl_vivod:

lea dx,[si].age ;lea dx,[si+1E]

mov si,dx

movsw

mov dx,offset pole1

mov ah,09h

int 21h

lea di,pole1

loop cykl_vivod

 

mov AX,4C00h

int 21h

 

end start

 

Самостоятельно на практике:

1) Переделать программу под WIN32.

2) Создать массив структур mas_sotr2 worker 7 dup (<>). Инициализировать массив структур в программе. На экран выдать сообщение в окне MessageBoxA. Сообщение должно содержать все данные структуры для самого старшего сотрудника.

 




<== предыдущая лекция | следующая лекция ==>
Лекция №10. Работа с файлами. Управление файловой системой. Консольный ввод в ассемблере. | Конца файла


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.008 сек.