assembler86 2

assembler86 2



264


10. Przykłady programów

znaków, wówczas kolejny znak jest ignorowany, przerwanie zerowane i jest generowany krótki sygnał dźwiękowy. Bufor klawiatury jest zorganizowany w sposób cykliczny. Dwa wskaźniki obejmują nie przeczytane jeszcze przez program znaki. Wskaźnik BUFFERHEAD zwiększa się o 2, każdorazowo po zapamiętaniu kolejnego znaku (po obsłużeniu przerwania 09H). Wskaźnik BUFFER TAIŁ zwiększa się z kolei o 2, po odczytaniu przez program kolejnego znaku w buforze. Jeżeli oba wskaźniki mają laką samą wartość, to bufor jest pusty. Oba wskaźniki zmieniają swój stan podobnie jak licznik modulo 16. Według opisanej reguły (jeżeli aktywny = 1) procedura duszek wpisuje znaki do bufora klawiatury pobierając je z tablicy.

Czytelnik może wprowadzić w programie szereg zmian, a w szczególności

-    Wypełnić tablicę właściwymi kodami zgodnie z tym, jakie ma być działanie programu. W zamieszczonym listingu program odszukuje w kartotekach właściwy program demonstracyjny i po wyświetleniu ładnego obrazka wyłącza się. (Czytelnicy mający dostęp do komputera z pakietem EGA zorientują się zapewne szybko, co ukryte jest pod firmową nazwą "cheryl"...).

-    Usunąć linię 263 (mov aktywny,0), co spowoduje, że program będzie realizowany cyklicznie.

-    Włączyć do procedury duszek kontroli bieżącego czasu i uaktywnianie programu o ściśle określonej godzinie (np. koledze pracusiowi włącza się o godz. 00.00 coś bardzo dziwnego).

-    Dorobić fragment programu umożliwiający wypełnianie tablicy wprost z klawiatury.

"duch"


1

9

a*

3

4

5

6

7

8

9    = 0060

10    = 0061

11    = 0040

12    = 0021

13    = 001A

14    = 001C

15    = 003E

16    = 001E

17    = 004A

18    = 004E


Pagc    1-1

page 60,130 title "duch"

%out Program "duch"


deklaracje adresów i kodów w BIOS ROM dla IBM XT116,17 ]

KB IN

equ 60H

; keyboard scan codę port

KBCTL

cqu 6111

; control bits for KB sense data

DOSDS

equ 4011

; DOS data segment

CALL DOS

equ 21H

BUFFERHEAD

equ 1AH

BUFFERJTAIL

cqu ICH

END OF BUFFER

equ 3EH

KBBUFI^ER

equ 1EH

SCANCODEJ

equ 4AH

; kod znaku "-" na prawym polu klawiatury

SCAN CODE 2

equ 4EH

; kod znaku " + " na prawym polu klawiatury


19

20 21

22


23

24


25

26    0000 ????


definicja struktury dla adresów logicznych (wektorów przerwań)


wektor struć

rejestrip dw ?


; stan rejestru IP


10.2. Symulacja klawiatury



powered by

Mi s4ol


27    0002 ????

28    0004

29

30

rcjestrcs dw ? wektor cnds

; stan rejestru CS

31

; segment programu - program typu

.COM

32

33

34

; (wraz z deklaracją PSP)

35 0000

program segment

36

37

assume cs:program.ds:program,es:program,ss:program

38 0000 CD 20

int 20H

; program segment prefix (zob. tabl. 8.2)

39 0002 ????

top mem dw?

; wskaźnik pierwszego wolnego segmentu

40 0004??

db?

4

41    0005 0005[

42    ??

db 5 dup (?)

; międzysegmentowe wywołanie funkcji 00H2411

43

44

i

45    000A ????

46    OOOC ????

47

terminate wektor < >

; adres kontynuacji

48    OOOE ????

49    0010????

50

break wektor < >

; adres obsługi Ctrl-Break

51    0012????

52    0014 ????

53

error wektor < >

; adres obsługi błędu

54 0016????

dw ?

55 0018 0014[ 56??

db 20 dup (?)

; "otoczenie programowe"

duch"

Page 1-2

57

58

i

59 002C ????

cnvironmcnt dw?

60    002E 0007[

61    ???? 62 ]

63

dw 7 dup (?)

64    003C 0014[

65    ??

66    ) •

67

68

db 20 dup (?)

69 0050

dosycali proc far

70 0050 CD 21

int CALL_DOS

; "int 21H" oraz "ret" międzysegmentowy

71    0052 CB

72

ret

73

doscall endp

74    0053 0009[

75    ??

76    ]

77

db 9 dup (?)

78    005C 0010[

79    ??

fcbl db 16 dup (?)

; bloki sterujące dla plików



Wyszukiwarka

Podobne podstrony:
assembler?86? 3 266 10. Przykłady programów 80    ) 81 82    006C 00
assembler?86? 1 >2 10. Przykłady programów DCZATEK......................... F PROC 0000 PROGR
assembler?86? 2 184 7. Wybrane techniki programowania Z tworzeniem podprogramów zasadniczo są zwią
assembler?86? 0 260    10. Przykłady
Podstawowe funkcje znakowe isdigit - czy znak jest cyfrą? isalnum - czy znak jest literą? isspace -
higeina 21 Przykłady programu świetlnego dla kurcząt-brojlerów Wiek Godzin światła na
IMG 41 (2) Rys. 5.10. Przykład modelu sieciowego opracowanego w programie MS Project 2003. przedstaw
Bezpieczny na drodze (10) Znajdź i przyklej wewnątrz znaków: z prawej strony ciężarówkę, z lewej tra
assembler?86? 2 44 4. Język asemblerowy mikroprocesorów #086/8088 Wiersz programu kończy się zasad
assembler?86? 2 104 5. Rozkazy mikroprocesorów 8086/8088 Przykłady 104 5. Rozkazy mikroprocesorów
assembler?86? 3 186 7. Wybrane techniki programowania Przykład • •• ASSUME SS:STOS MOV AX, STOS MO
assembler?86? 5 190 7. Wybrane techniki programowania Offsc! Stos SP, nowe BP + 2 +4 + 6 
assembler?86? 2 204 8. Uruchamianie programów asemblerowych /L - utworzenie pliku z listingiem o n
assembler?86? 2 224 8. Uruchamianie programów asemblerowych S zakres lista Polecenie powoduje odsz
assembler?86? 2 244 9. Wykorzystanie procedur systemowych w programach użytkowych Program użytkowy
assembler?86? 8 25610. Przykłady programów z parametrem błędnym (różnym od 1 lub 2) powoduje wyświ

więcej podobnych podstron