assembler86 4

assembler86 4



268


10. Przykłady programów

186 01C5 8A D8

mov bl,al

187 01C7

2E: A0 01BER

mov al.aktywny

188 01CB

OACO

or al.al

: testowanie semafora aktywności

189 01CD

74 18

jz nie aktywny

; programu

190

191 01CF

80FB4A

cmp bl.SCAN CODE l; czy naciśnięto klawisz?

192 01D2

74 03

je wyłącz

; tak. wyłączyć program

193 01D4

EB1F90

jmp retint

; nic, obsłuż przerwanie

194

195 01D7

2E: C6 06 01 BE R 00 wyłącz mov aktywny.0

; wyłączenie programu

196 01DD

2E: C7 06 01BFR0000

mov wskaźnik,u

197 01E4

EB0F90

jmp retint

198

199 01E7

nieaktywny:

200 01E7

80FB4E

cmp bl,SCAN_CODE_2; czy naciśnięto klawisz " + " ?

201 01EA

74 03

je zalacz

; tak, włącz program

202 01EC

EB 1A 90

jmp stare_09H

; powrót przez stare przerwanie

203

204 01EF 2E: C6 06 01BE R 01 zalacz: mov aktywny,!

205

206 01F5E4 61 retint:

in al.KBCTL

; zerowanie bitu kontrolnego

207 01F7 8AE0

movah,aI

; klawiatury

208 01F9 0C80

or al.SOH

209 01FBE6 61

out KB CTL.al

; (powtórzenie standardowej sekwencji

210 01FD 86 EO

xchg ah,al

; z BIOS)

211 01FFE6 61

out KB CTL.al

212

213 0201 5B

pop bx

214 0202 58

popax

215 0203 BO 20

mov al.20h

; zerowanie przerwania od klawiatury

216 0205 E6 20

out 20h.al

217 0207

CF

iret

; ominięcie starego przerwania

218

219 0208

stare 09H:

220 0208 5B

popbx

221 020958

pop ax

222    020A 2E: FF 2E 01B9 R

223

jmp int09H

; skok do starego przerwania

224

klawiatura

endp

duch"

Page

1-5

225

227

; nowa procedura obsługi przerwania z zegara, symulująca uprowadzanie

228

; znaków z klawiatury

230

231 020F

duszek

proc far

232 020F

50

push ax

233 0210

53

push bx

234 0211

51

push cx

235 0212

1E

push ds

236 0213

2E: A0 01BER

mov a 1, aktywny

; test semafora aktywności programu

237 0217

OACO

or al.al

238 0219

74 OE

jz powrot

: powrót do starego przerwania

10.2. Symulacja klawiatury

239

; program jest nieaktywny

240 021B

2& A0 01BDR

mov al,licznik

; 8 razy nic nie rób - pętla

241 021F

FE CO

inc al

242 0221

3C08

cmp al,8

; jeśli równe 8, zacznij "pisać"

243 0223

74 07

jz pisanie

; wykonuj dalej

244 0225

2E: A2 01BD R

mov licznik,al

; nowa zawartość licznika

245

246    0229

247

E9 02ADR powrot:

jmp koniec

: zakończenie przez stare przerwanie

248 022C

2E: C6 06 01BD R 00 pisanie:: mov Iicznik.O

; znaki będą wprowadzane do bufora

249 0232

B8 0040

mov ax.DOS_DS

: klawiatury

250 0235

8E D8

mov ds,ax

; ds = 40H

251

252 0237

BB001A

movbx,BUFFER HEAD

253 023A

8A 07

mov al,[bx]

; czytaj położenie "głowicy"

254 023C

33 C9

xor cx,cx

255 023E

BB001C

mov bx,BUFFER TAIŁ; czytaj

256 0241

8A OF

mov cl,[bx]

; położenie końca tekstu w buforze

257 0243

3A Cl

cmp al,cl

258    0245

259

75 66jnc

koniec

; powrót, gdy są równe

260 0247

2E: 8B1E01BFR

mov bx

.wskaźnik

261 024C

2E 8A A7 0103R

mov ah.byte ptr tablica[bx]; czytaj kod ASCII znaku

262 0251

43 inc bx

263 0252

2E- 8A 87 0103 R

mov al.byte ptr tablica[bxl; czytaj Scan-code znaku

264 0257

OBCO

or ax,ax

; test. czy koniec tabeli

265 0259

75 OD

jne dalej

; nie. rób dalej

266 025B

2E: A3 01BFR

mov wskaźnik, ax

; tak

267 025F

2E: C6 06 01BE R 00

mov aktywny ,0

: po jednokrotnym wykonaniu

268

; program będzie nieaktywny

269 0265

EB46 90

jmp koniec

270

271 0268

3D 0101 dalej:

cmp ax,101H

; czy jest pauza ?

272 026B

75 OD

jne wprowadzznaki

; nie. wprowadzaj znaki

273 026D

2E: Al 01BF R

mov ax,wskaznik

; tak. uaktualnij wskaźnik

274 027

140

incax

; i zakończ program bez

275 0272

40

incax

; wprowadzania znaków

276 0273

2E: A301BFR

mov wskaznik,ax

277 0277

EB 34 90

jmp koniec

; powrót

278

279 027A

wprowadź znaki:

280 027A

8BD9

mov bx,cx

duch"

Page

1-6

281 027C

88 27

movbyte ptr [bx], ah

; nowy kod ASCII do bufora

282 027E

43

inc bx

283 027F

88 07

movbyte ptr [bx],a!

; nowy Scan-code do bufora

284 0281

43

inc bx

285 0282

E4 61

in al.KB CTL

; zrób mały "klik-klak"

286 0284

OC 03

or al,3H

; symulujący uderzenie w klawisz

287 0286

E6 61

out KB CTUal

288

289 0288

B9 0350

mov cx.350H

290 028B

90 pauza 1:

nop

; i czekaj

291 028C

E2FD

loop pauza 1


Wyszukiwarka

Podobne podstrony:
assembler?86? 4 208 8. Uruchamianie programów asemblerowych /NO (ang. node) - bez podajania nazw b
assembler?86? 4 228 8. Uruchamianie programów asemblerowych wprowadzanie rozpoczyna się od bieżące
assembler?86? 8 25610. Przykłady programów z parametrem błędnym (różnym od 1 lub 2) powoduje wyświ
assembler?86? 9 25810. Przykłady programów 104 105    0871    D
assembler?86? 1 >2 10. Przykłady programów DCZATEK......................... F PROC 0000 PROGR
assembler?86? 6 272 W. Przykłady programów INT1CH.............................. L 0004 01B5 PROG
assembler?86? 4 108 5. Rozkazy mikroprocesorów 8086/8088 Przykłady DEC SI DEC AX    
assembler?86? 4 248 9. Wykorzystanie procedur systemowych w programach użytkowych adres pola FCB,
assembler?86? 2 264 10. Przykłady programów znaków, wówczas kolejny znak jest ignorowany, przerwan
assembler?86? 3 266 10. Przykłady programów 80    ) 81 82    006C 00
assembler?86? 4 188 7. Wybrane techniki programowania Opisany mechanizm jest bardzo skutecznym nar
higeina 21 Przykłady programu świetlnego dla kurcząt-brojlerów Wiek Godzin światła na
0000039 4 180 Przykładowe programy postępowania pacjenta do operacji. Oznacza to nie tylko stosowani
Program nauczania KOWEZiU _ : ** Wykorzystanie przykładowego programu nauczania dla zawodu technik g
Modyfikacje programu nauczania KOWE _ Modyfikacje przykładowego programu nauczania opracowanego w
Obraz8 PRÓGCDNAGRYWANIE Z PROGRAMATOREM Przykład: Programowanie nagrania na kanale 5, 24 grudnia 19
Atrybuty Przykład: Program czyta plik źródłowy języka c, wyświetla jego zawartość z
Przykłady programów /, różnymi instrukcjami /* Nagłówek-komentarzwieloliniowy wC iC++ ,// jednolinow

więcej podobnych podstron