staff007
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Всем привет, ребята помогите дописать программу Тактовый режим прерываний (int 1) процедуры обработки, которая определяет команду add r/m + непосредственный операнд. Эта процедура должна проверить, был ли перерыв (interrupt) до или после команды add второго варианта, если да, то на экране показать сообщение и всю информацию о команде: адрес, код, мнемоника, операнд. Например. На экране могли бы вывести такую информацию: Тактовый режим прерывания! 0000:0128 80C412 add ah, 12h; ah=00 Код: .model small .stack 100h .data msgADD db "ADD r/m+immediate operand$" kenter db 13, 10, "$" msgNO db "not ADD r/m+immediate operand", 13, 10, "$" .code start_program: MOV ax, @data MOV ds, ax MOV ax, 0 MOV es, ax PUSH es:[4] PUSH es:[6] MOV word ptr es:[4], offset HandleInt MOV es:[6], cs PUSHF PUSHF POP ax OR ax, 0100h PUSH ax POPF NOP MOV ax, bx MOV ax, cs MOV al, 22h INC ax POPF POP es:[6] POP es:[4] MOV ah, 4Ch MOV al, 0 INT 21h PROC HandleInt PUSH ax PUSH bx PUSH dx PUSH bp PUSH es PUSH ds MOV ax, @data MOV ds, ax MOV bp, sp ADD bp, 12 MOV bx, [bp] MOV es, [bp+2] MOV dl, [es:bx] ADD al, dl AND al, 0F0h CMP al, 0B0h JE mov2 MOV ah, 9 MOV dx, offset msgNO INT 21h JMP end_program Mov1: AND dl, 1 ADD dl, 30h JMP print Mov2: MOV cl, 3 SHR dl, cl JMP Mov1 print: PUSH dx MOV ah, 9 MOV dx, offset msgADD INT 21h ;MOV ah, 2 POP dx ;INT 21h MOV ah, 9 MOV dx, offset kenter INT 21h end_program: POP ds POP es POP bp POP dx POP bx POP ax IRET HandleInt ENDP END start_program |
|