
- •Билет 2 (Проверка открытия exe файла)
- •Клава.Асм
- •Выводит хвост командной строки
- •Породитель процесса (par.Asm)
- •Порождаемый процесс
- •Билет 3 (сканер для лексем)
- •Билет 4 (построить грамматику с возведением в степень)
- •Билет 5 (преобразование для нисходящего разбора)
- •Билет 6 (грамматика для if then else)
- •Билет 7 (представление массива и выведение формулы)
- •Билет 8 (хеш - функция)
- •Билет 9(Построить таблицу идентификаторов)
- •Билет 10 (ка для сканера лексем)
- •Билет 11(грамматика для чисел)
- •Билет 13 (матрица предшествования для грамматики)
- •Билет 14(анализ грамматики для метода предшествования)
- •Билет 16 (Заголовок exe)
- •Билет 17(Структура диска ms-dos)
- •Билет 18 (Синтаксический анализ теория) не написано Билет 19 (Лексический анализ теория)
- •Требования к грамматике нисходящего метода
- •Семантические программы. Перевод инфиксной записи в польскую.
- •Тетрады
- •Хранение грамматики с использованием сети
- •Аппаратные прерывания
- •Представление многомерных массивов в памяти эвм
- •Свободные кластеры логического диска "а" (на всякий)
!! Ставьте у заголовков билетов стиль Заголовок 1. Вверху есть панелька на ней написано обычный, выделяем текст и меняем там на заголовок 1.
!! Еще смотрим комментарии, так как там иногда возникают вопросы
!! Есть билеты, лекции и шпоры за 5, 6 семестр скачать можно здесь (возможно на часть вопросов там можно найти ответы)
!! на всякий случай, вверху в правом углу есть кнопочка чат, общаться там намного удобнее
Нерешенные задачи:
Добавить теории(может быть, чтобы не дублировать сделать ссылки на типы анализов, методы разбора)
1.Про адрес 031221 и вектор 32-битный //непонятное задание аля XYNTA хохляцкая.
Тут никакой вариант даже косячный не приудмали?
2. Дискета: подсчитать размер кластера(походу ассемблер)
с кластером тоже никакой лабуды нет?
3. Синтаксический анализ(теория)
4. Формула для представления многомерного массива в одномерный (строкой вроде логичная, а в столбец ...) по ссылке вверху, есть лекции, там вроде это было, могу посмотреть..то что скинули типа отображение обратно в массив?дребедень
В нисходящем разборе переделала без итерации как в лекции, одно не знаю последнюю сточку нужно менять или нет, ее не было
E::=T|TB
B::=+T|-T|+TB|-TB
T::=F|FG
G::=*F|/F|*FG|/FG
F::=id | (E)
Билет 1 (Обработчик нажатия ALT+A)
Билет 2 (Проверка открытия EXE файла)
Клава.асм
Выводит хвост командной строки
Породитель процесса (PAR.ASM)
Порождаемый процесс
Билет 3 (сканер для лексем)
Билет 4 (построить грамматику с возведением в степень)
Билет 5 (преобразование для нисходящего разбора)*
Билет 6 (грамматика для if then else)*
Билет 7 (представление массива и выведение формулы)
Билет 8 (хеш - функция)
Билет 9(Построить таблицу идентификаторов)
Билет 10 (КА для сканера лексем)
Билет 11(грамматика для чисел)
Билет 12 (стек для выражения a+b*(c+d))
Билет 13 (матрица предшествования для грамматики)*
Билет 14(анализ грамматики для метода предшествования)**
Билет 15(a+b*c является ли сентенциальной формой)*
Билет 16 (Заголовок exe)
Билет 17(Структура диска MS-DOS)
Билет 18 (Синтаксический анализ теория) не написано
Билет 19 (Лексический анализ теория)
Требования к грамматике нисходящего метода
Семантические программы. Перевод инфиксной записи в польскую.
Обратная польская запись(как польская запись только в польской +АБ а тут АБ+,по умному “постфиксная”)
Тетрады
Триады
Хранение грамматики с использованием сети
Аппаратные прерывания
Представление многомерных массивов в памяти ЭВМ
Свободные кластеры логического диска "А" (на всякий)
Билет 1 (Обработчик нажатия ALT+A)
.model tiny
.code
org 100h
start:
;сохранение старого обработчика
mov ax, 3509h
int 21h
mov word ptr old_09h, bx
mov word ptr old_09h + 2, es
;установка нового обработчика
mov dx, offset new_09h
mov ax, 2509h
int 21h
;считать строку в буфер
mov ah, 0ah
mov dx, offset user_input
int 21h
;восстановление старого обработчика
mov dx, word ptr old_09h
mov bx, word ptr old_09h + 2
mov ds, bx
mov ax, 2509h
int 21h
ret
;новый обработчик
new_09h proc
pushf
call cs:[old_09h]
push ds
push di
push cx
push ax
;обработчик активирован?
mov al, is_active
cmp al, 1h
je new_09h_active
;проверить, нажат ли Alt
mov ah, 02h
int 16h
test al, 8
jz exit_new_09h
;проверить, нажата ли клавиша A
mov ah, 01h
int
jz exit_ne16hw_09h
cmp ah, 1eh
jne exit_new_09h
;активация обработчика
mov al, 1h
mov is_active, al
jmp exit_new_09h
;обработчик активирован
new_09h_active:
;проверить, что это нажатие
push 0040h
pop ds
mov di, word ptr ds:001ah
cmp di, word ptr ds:001ch
je exit_new_09h
;выполнить необходимое по заданию действие
mov ah, 01h
int 16h
jz exit_new_09h
cmp al, 'A'
jne check_B
mov al, 94h
jmp write_to_buffer
check_B:
;продолжение для остальных символов
;...
check_z:
cmp al, 'z'
jne exit_new_09h
mov al, 0efh
write_to_buffer:
mov [di], ax
exit_new_09h:
pop ax
pop cx
pop di
pop ds
iret
new_09h endp
is_active db 0
old_09h dd ?
user_input db 128
db 128 dup (0)
end start
Второй метод(одноразовый но можно переделать под цикл)
masm
.model small
.stack 256
.data
Msg_about db 'Распознать нажатие «горячей» комбинации клавиш', 0Ah, 0Dh
.code
start:
; Инициализация сегментного регистра ds
mov ax, @data
mov ds, ax
; Вывод сообщения на экран
mov ah, 9
mov dx, offset Msg_about
int 21h
; Чтение символа с ожиданием
mov ah, 0
int 16h
; Проверка нажатия ALT
cmp ah, 38h
jne exit
; Получение состояния клавиатуры
mov ah, 12h
int 16h
; Проверка нажатия A
test ah, 1e
jz exit
mov ah, 2 ; Вывод символа
mov dl, 7 ; Сигнал
int 21h
; Завершение программы, возврат управления ОС
exit:
mov ax, 4c00h
int 21h
end start
Билет 2 (Проверка открытия exe файла)
.model tiny
.code
org 100h
start:
;сохранение старого обработчика
mov ax, 3521h
int 21h
mov word ptr old_21h, bx
mov word ptr old_21h + 2, es
;установка нового обработчика
mov dx, offset new_21h
mov ax, 2521h
int 21h
;активация обработчика
mov ax, 0ff00h
int 21h
;открытие файла на запись
mov ax, 3d01h
mov dx, offset file_name
int 21h
;восстановление старого обработчика
mov dx, word ptr old_21h
mov bx, word ptr old_21h + 2
mov ds, bx
mov ax, 2521h
int 21h
ret
;новый обработчик
new_21h proc
;обработчик активирован?
push ax
mov al, is_active
cmp al, 1h
pop ax
je new_21h_active
;активация обработчика
cmp ax, 0ff00h
jne start_old_21h
push ax
mov al, 1h
mov is_active, al
pop ax
jmp start_old_21h
;обработчик активирован
new_21h_active:
cmp ah, 3dh
jne start_old_21h
test al, 01h
jz start_old_21h
;проверка имени файла
push es
push ax
push ds
pop es
mov al, 0
mov di, dx
find_zero:
scasb
jne find_zero
pop ax
push ds
push cs
pop ds
mov si, offset exe_suf
sub di, 5
push cx
mov cx, 4
repe cmpsb
pop cx
pop ds
pop es
jne start_old_21h
jmp exit_new_21h
start_old_21h:
jmp cs:[old_21h]
exit_new_21h:
iret
new_21h endp
is_active db 0
file_name db "123.exe", 0
exe_suf db ".exe"
old_21h dd ?
end start
Клава.Асм
MODEL small
STACK 256
.386
.data
m1 db 0ah,0dh,' ','$'
m2 db 0ah,0dh,'Nagmite lubuu klavishy, ESC - vyhod + - vremya ','$'
.code
main:
mov ax,@data
mov ds,ax
xor ax,ax
mov dx, offset m2
mov ah,09h
int 21h
main2:
mov ah,0h
int 16h
cmp ax,011bh
jz exit
cmp al,3Dh
jz task
jmp main2
task:
mov ah,02h
int 1Ah
movzx ax, ch
mov bh, 16
div bh
mov bl,al
mov bh,ah
add bl,30h
add bh,30h
mov ah,02h
mov dl,bl
int 21h
mov ah,02h
mov dl,bh
int 21h
mov dl,':'
mov ah,2
int 21h
mov ah,02h
int 1Ah
movzx ax, cl
mov bh, 16
div bh
mov bl,al
mov bh,ah
add bl,30h
add bh,30h
mov ah,02h
mov dl,bl
int 21h
mov ah,02h
mov dl,bh
int 21h
mov dl,':'
mov ah,2
int 21h
movzx ax, dh
mov bh, 16
div bh
mov bl,al
mov bh,ah
add bl,30h
add bh,30h
mov ah,02h
mov dl,bl
int 21h
mov ah,02h
mov dl,bh
int 21h
mov dx, offset m1
mov ah,09h
int 21h
jmp main
exit:
mov ax,4c00h
int 21h
end main
Выводит хвост командной строки
.model tiny
.code
org 80h
cmd_len db ?
cmd_start db ?
org 100h
start:
cld ;Сброс флага направления DF
; вывод на консоль
lea dx, cmd_start
mov ax, 0900h
int 21h
quit:
mov ax, 4c00h
int 21h
fname db 'com_str1.txt',0
buff db 100 dup ('$')
end start
Породитель процесса (par.Asm)
.model small
.data
chname db 'prg.com',0
parmblk dw 7 dup(0)
msg1 db '(par)parant proc started',10,13,'$'
msg2 db '(par)chield proc work norm and close',10,13,'$'
msg3 db '(par)chield proc closed error',10,13,'$'
msg4 db '(par)chield proc unactive',10,13,'$'
.code
start:
jmp rr
rr:
mov ax,@data
mov ds,ax
mov ah,09h
mov dx,offset msg1
int 21h
;clean memmory
mov bx,abcd
mov ax,es
sub bx,ax
mov ah,4ah
int 21h
;started chield process
push ds
pop es
mov ah,4bh
mov al,0
mov bx,offset parmblk
mov dx,offset chname
int 21h
jc errexec
;return code analized
mov ah,4dh
int 21h
cmp al,1
je errchld
;print message
mov ah,09h
mov dx,offset msg2
int 21h
quit:
mov ax,4c00h
int 21h
errchld:
mov ah,09h
mov dx,offset msg3
int 21h
jmp quit
errexec:
mov ah,09h
mov dx,offset msg4
int 21h
jmp quit
abcd segment
abcd ends
end start