|
|
|
| Autor |
Správa |
Anti Expert


Pohlavie:  Stav:  Založený: 16.02.2006 Príspevky: 156 Bydlisko: Kosice Karma: 
|
Zaslal: 29 Máj 2008, 21:05 Predmet: Assembler - Rezidentny program |
|
|
Snazim sa napisat rezidentny program, ktory obsadi INT 5 (PrtScr) ale nefunguje to.. mam v tom trosku zmazok.. mohol by sa na to niekto prosim pozriet?
| Kód: |
bits 16
org 0x0100
[SEGMENT .text]
; ---------------------
; | REZIDENTNA CAST |
; ---------------------
jmp START
NOVA_OBSLUHA:
push ax
push dx
push cx
mov ah, $2b
mov cx, 1999
mov dh, 1
mov dl, 1
int 21h ; zmenime cas
pop cx
pop dx
pop ax
jmp far [cs:int_x05_offset] ; a predame riadenie povodnej obsluhe
;END NOVA_OBSLUHA
; -----------------------
; | NEREZIDENTNA CAST |
; -----------------------
START:
call SETUP ; nastavime premenne a vektory
mov ah, 31h ; fcia 31h - stay resident
mov dx, START ; offset konca rezidentnej casti
shr dx, 4 ; delime 16 - rozdelime na paragrafy
inc dx ; pre istotu pripocitame jednotku
int 21h ; ukonci program a ostan rezidentny
;END START
SETUP:
cli
xor ax, ax
mov es, ax ; segment tabulky vektorov je 0
mov ax, [es:0x5*4] ;
mov word [int_x05_offset], ax ; offsetova adresa stareho perusenia
mov ax, [es:(0x5*4)+2] ;
mov word [int_x05_segment], ax ; segmentova adresa stareho prerusenia
mov ax, NOVA_OBSLUHA ; offsetova adresa novej obsluhy prerusenia
mov [es:int_x05_offset], ax ;
mov ax, cs ; segmentova adresa novej obsluhy prerusenia
mov [es:int_x05_segment], ax ;
sti
ret
;END SETUP
[SEGMENT .data]
int_x05_offset dw ''
int_x05_segment dw '' |
|
|
| Návrat hore |
|
 |
chrono VIP


Pohlavie:  Stav:  Založený: 25.12.2006 Príspevky: 5585
Karma: 
|
Zaslal: 29 Máj 2008, 22:25 Predmet: |
|
|
Nie je chyba v tomto?
| Kód: |
mov ax, NOVA_OBSLUHA ; offsetova adresa novej obsluhy prerusenia
mov [es:0x5*4], ax ;
mov ax, cs ; segmentova adresa novej obsluhy prerusenia
mov [es:(0x5*4)+2], ax ; |
|
|
| Návrat hore |
|
 |
Anti Expert


Pohlavie:  Stav:  Založený: 16.02.2006 Príspevky: 156 Bydlisko: Kosice Karma: 
|
Zaslal: 01 Jún 2008, 10:57 Predmet: |
|
|
| skusal som aj bez tych premennych, ale stale to nejde.. |
|
| Návrat hore |
|
 |
chrono VIP


Pohlavie:  Stav:  Založený: 25.12.2006 Príspevky: 5585
Karma: 
|
Zaslal: 01 Jún 2008, 15:41 Predmet: |
|
|
| Tá chyba, čo som ti písal ja spôsobovala to, že si neprepísal odkaz na tvoju obsluhu prerušenia (len si prepísal uložené hodnoty) a teda sa tá tvoja obsluha ani nevolala. |
|
| Návrat hore |
|
 |
Anti Expert


Pohlavie:  Stav:  Založený: 16.02.2006 Príspevky: 156 Bydlisko: Kosice Karma: 
|
Zaslal: 01 Jún 2008, 16:49 Predmet: |
|
|
este raz sa pozri na moj zdrojak v prvom prispevku asi si prehliadol es |
|
| Návrat hore |
|
 |
chrono VIP


Pohlavie:  Stav:  Založený: 25.12.2006 Príspevky: 5585
Karma: 
|
Zaslal: 01 Jún 2008, 17:05 Predmet: |
|
|
| Myslíš si, že es:int_x05_offset je správna adresa? (v pamäti prepisuješ úplne náhodné miesto) |
|
| Návrat hore |
|
 |
Anti Expert


Pohlavie:  Stav:  Založený: 16.02.2006 Príspevky: 156 Bydlisko: Kosice Karma: 
|
Zaslal: 02 Jún 2008, 16:56 Predmet: |
|
|
| preco nahodne? ved do premennej si predsa ulozim vypocitany offset 05h*4 a spolu s es=0 to ukazuje presne na offsetovu adresu INT 5 |
|
| Návrat hore |
|
 |
chrono VIP


Pohlavie:  Stav:  Založený: 25.12.2006 Príspevky: 5585
Karma: 
|
Zaslal: 02 Jún 2008, 22:42 Predmet: |
|
|
| es:int_x05_offset znamená, že sa použije segment ES a ako offset sa použije offset toho int_x05_offset (nepoužije sa obsah premennej, použije sa adresa). mov [es:0x5*4], ax robí to, čo sa robiť má. |
|
| Návrat hore |
|
 |
|
|  |
|
|
Nemôžete odosielať nové témy do tohto fóra Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre Nemôžete hlasovať v tomto fóre Nemôžete pripájať súbory do tohto fóra Môžete sťahovať súbory v tomto fóre
|
Powered by phpBB © 2005 phpBB Group, phpBB SEO, © Hojko 2004-2008
[ Vygenerované za: 0.1s ] :: [ 16 Queries ] :: [ 12,787 stránok za dnes ] :: [ Dnes DB: 216,750 ] :: [ Max DB: 3,232,735 Queries ]
|