; Цикл 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. Сообщение должно содержать все данные структуры для самого старшего сотрудника.