Assembly

Assembly
2004-07-31T14:01:39+02:00
2004-08-02T13:42:25+02:00
2022-10-21T14:30:44+02:00
keri02
Egy tetszőleges megadott interrupt sorszám alapján írja ki az interrupt vektor címét hexadecimális formában.
Ezt a feladatot kellene megoldani, de hozzá kezdeni sem tudok. Ha valaki tud segítsen írja meg ezt a programrészt vagy ajánljon valamilyen internetes oldalt ami ezzel foglalkozik.
Mutasd a teljes hozzászólást!

Elnézést mindenkitől, mert rossz kódot raktam fel az előbb. Íme az új tiszta ASM változat (TASM fordítóval készült).

.model small .code org 100h kezd: call getbyte call prncr MOV BL, AL call putbyte call prncr MOV AL, BL xor AH, AH xor BX, BX mov ES, BX shl AL, 2 mov BX, AX mov AX, word ptr ES:[BX] call putword MOV DL, ':' call prnchar mov AX, word ptr ES:[BX+2] call putword vege: mov AX, 4C00H int 21H prnchar: ;DL-ben a kiirando karaker PUSH AX mov AH, 2 int 21H POP AX RET getchar: ;AL-ben a beolvasott karaker mov AH, 1 int 21H RET getbyte: ;AL-ben a beolvasott byte call getbyte2 shl AL, 4 mov BL, AL call getbyte2 add Al, BL RET getbyte2: ;AL-ben a beolvasott fel byte call getchar cmp AL, '0' jb gbhiba ;Nem szam cmp AL, 'A' jae gbhexa cmp AL, '9' ja gbhiba sub AL, '0' ;Sima szam RET gbhexa: sub AL, 'A' cmp AL, 6 jae gbkishex add AL, 10 ;Hexa nagybetu RET gbkishex: sub AL, 'a'-'A' ;Hexa kisbetu add AL, 10 RET gbhiba: XOR AL, AL RET putword: ;AX-ben a kiirando hex szam push CX MOV CL, AH call putbyte MOV AL, CL call putbyte pop CX RET putbyte: ;AL-ben a kiirando hex szam push CX push AX mov CL, AL shr AL, 4 call putbyte2 mov AL, CL and AL, 0FH call putbyte2 pop AX pop CX RET putbyte2: ;AL-ben a kiirando fel hex szam and AL, 0FH add AL, '0' cmp AL, '9' ja pbhexa push AX push DX mov DL, AL call prnchar pop DX pop AX RET pbhexa: add AL, 'A'-'0'-10d push AX push DX mov DL, AL call prnchar pop DX pop AX RET prncr: PUSH AX PUSH DX MOV DL, 0Dh call prnchar MOV DL, 0Ah call prnchar POP DX POP AX RET END kezd

Lehet, hogy bugos, mert az AH/AL kiírások sorrendjét felcserélhettem.
Mutasd a teljes hozzászólást!



  • program inthex; uses dos; var intnum, code : integer; intptr : pointer; Procedure WriteHexWord(w: Word); const hexChars: array [0..$F] of Char = '0123456789ABCDEF'; begin Write(hexChars[Hi(w) shr 4], hexChars[Hi(w) and $F], hexChars[Lo(w) shr 4], hexChars[Lo(w) and $F]); end; begin intnum := $21; if paramcount > 0 then begin Val(ParamStr(1), intnum, code); if code <> 0 then WriteLn('Hiba az alabbi pozicional: ', code); end; GetIntVec(byte(intnum mod 256), intptr); writeln('', intnum mod 256, '. INT'); writehexword(seg(intptr)); write(' : '); writehexword(ofs(intptr)); writeln; end.
    Mutasd a teljes hozzászólást!

  • Elnézést mindenkitől, mert rossz kódot raktam fel az előbb. Íme az új tiszta ASM változat (TASM fordítóval készült).

    .model small .code org 100h kezd: call getbyte call prncr MOV BL, AL call putbyte call prncr MOV AL, BL xor AH, AH xor BX, BX mov ES, BX shl AL, 2 mov BX, AX mov AX, word ptr ES:[BX] call putword MOV DL, ':' call prnchar mov AX, word ptr ES:[BX+2] call putword vege: mov AX, 4C00H int 21H prnchar: ;DL-ben a kiirando karaker PUSH AX mov AH, 2 int 21H POP AX RET getchar: ;AL-ben a beolvasott karaker mov AH, 1 int 21H RET getbyte: ;AL-ben a beolvasott byte call getbyte2 shl AL, 4 mov BL, AL call getbyte2 add Al, BL RET getbyte2: ;AL-ben a beolvasott fel byte call getchar cmp AL, '0' jb gbhiba ;Nem szam cmp AL, 'A' jae gbhexa cmp AL, '9' ja gbhiba sub AL, '0' ;Sima szam RET gbhexa: sub AL, 'A' cmp AL, 6 jae gbkishex add AL, 10 ;Hexa nagybetu RET gbkishex: sub AL, 'a'-'A' ;Hexa kisbetu add AL, 10 RET gbhiba: XOR AL, AL RET putword: ;AX-ben a kiirando hex szam push CX MOV CL, AH call putbyte MOV AL, CL call putbyte pop CX RET putbyte: ;AL-ben a kiirando hex szam push CX push AX mov CL, AL shr AL, 4 call putbyte2 mov AL, CL and AL, 0FH call putbyte2 pop AX pop CX RET putbyte2: ;AL-ben a kiirando fel hex szam and AL, 0FH add AL, '0' cmp AL, '9' ja pbhexa push AX push DX mov DL, AL call prnchar pop DX pop AX RET pbhexa: add AL, 'A'-'0'-10d push AX push DX mov DL, AL call prnchar pop DX pop AX RET prncr: PUSH AX PUSH DX MOV DL, 0Dh call prnchar MOV DL, 0Ah call prnchar POP DX POP AX RET END kezd

    Lehet, hogy bugos, mert az AH/AL kiírások sorrendjét felcserélhettem.
    Mutasd a teljes hozzászólást!
  • 1. Az interrupt sorszám bekéréséhez nézze meg a BEOLV.ASM programot (órán odaadtam és megbeszéltük)
    2. Az interrupt vektorcím lekérése
    INT 21H 35H funkcióval (lásd TECHHELP)
    3. A vektorcím kiírásához nézze meg a KIIR.ASM programot (órán odaadtam és megbeszéltük)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd