М. З. Якубова техника ғылымдарының кандидаты, доцент



бет92/141
Дата26.09.2023
өлшемі3.68 Mb.
#478578
1   ...   88   89   90   91   92   93   94   95   ...   141
КОМПЬЮТЕРЛІК ЖҮЙЕЛЕР АРХИТЕКТУРАСЫ

Программа коды:
Процедураларды жазу (ішкі программаларды) Call ungetch
Ungetch proc
Ungetch endp
Ungetch – процедураның аты Call – ішкі программаны шақыру Proc– procedure – процедура
endp– end procedure – процедураның соңы
178
90-сурет. Программаның орындалу нәтижесі коды
INT 16h, AH = 02h, 12h, 22h – пернетақтаның жағдайын оқу

Енгізу

АН = 02h (83/84-key), 12h (101/102-key), 22h (122-key)

Шығару

AL = пернетақта жағдайының байты 1
АН = 2 пернетақта жағдайының байты (12h және 22h)

Пернетақта жағдайының байты 1 (бұл байт жадыдағы келесі адрес бойынша орналасқан 0000h: 0417h немесе 0040h: 0017h):
7 бит: Ins қосылған
6 бит: CapsLock қосылған 5 бит: NumLock қосылған 4 бит: ScrollLock қосылған
3 бит: Alt батырмасы басылған
2 бит: Ctrl батырмасы басылған (кез келген Ctrl) 1 бит: сол жақ Shift батырмасы басылған
0 бит: оң жақ Shift батырмасы басылған
DOS ОЖ құралдары
0Ah функциясы – STDIN-нен буферге символдар жолын оқу
179

Енгізу

АН = 0Ah
DS: DX = буфер адресі

Шығару

Буфер енгізілген жолдан тұрады

Ондық санды оналтылық санға түрлендіретін программаның мысалын қарастырамыз

1

2

org 100h

; СОМ-файлдың басталуы

start:

; программа кодының басталу белгісі

mov dx,offset messagel

; DS: DX – жол адресі

mov ah,9

; АН регистріндегі функция нөмірі

int 21h

; message1

mov dx,offset buffer

; DS: DX – жол адресі

mov ah,0Ah

; АН регистріндегі функция нөмірі

int 21h

; символдар жолын буферге оқу

mov dx,offset crlf

; DS: DX – жол адресі

mov ah,9

; АН регистріндегі функция нөмірі

int 21h

; жолды ауыстыру

xor di,di

; DI = 0 – буфердегі байт нөмірі

xor ax,ax

; АХ = 0 – нәтиженің ағымдағы мәні

mov cl,blength

xor ch,ch

; ch регистрін нөлге айналдырамыз

xor bx,bx

; bx регистрін нөлге айналдырамыз

mov si,cx

; SI – буфер ұзындығы

mov cl,10

; CL = 10, MUL-дың көбейткіші

asc2hex:

; asc2hex: блогының басталу белгісі

mov bl,byte ptr bcontents [di]

sub bl,'0'

; цифр = цифрдың коды – «0» символының коды

jb asc_error

; егер символдың коды«0»-дің кодынан кіші болса

cmp bl,9

; немесе «9»-дан үлкен болса

ja asc_error

; программаны қате деген хабарламамен аяқтау

mul cx

; басқа жағдайдаағымдағы нәтижені 10-ға көбейту

add ax,bx

; оған жаңа цифрды қосу

inc di

; санағышты арттыру

180

1

2

cmp di,si

; егер санағыш+1 символдар санынан аз болса

jb asc2hex

; жалғастыру (санағыш 0 деп есептеледі)

push ax

; түрлендіру нәтижесін сақтау

mov ah,9

; АН регистріндегі функция нөмірі

mov dx,offset message2

; DS: DX – жолдар адресі

int 21h

; message 2 енгізу

pop ax

; стектен оқу

push ax

; стекке жазу

xchg ah,al

; AL регисріне үлкен байтты орналастыру

call print_al

; оны экранға шығару

pop ax

; AL регистрінде кіші байтты қалыпқа келтіру

call print_al

; оны экранға шығару

ret

; СОМ-файлды аяқтау

asc_error:

; asc_error: блогының басталуы

mov dx,offset err_msg

; DS: DX – жол адресі

mov ah,9

; АН регистріндегі функция нөмірі

int 21h

; қате туралы хабарлама шығару

ret

; программаны аяқтау

print_al:

; print_al: блогының басталу белгісі

mov dh,al

; dh-ке al регистрінің мәнін сақтау

and dh,0Fh

; DH – 4 кіші биті

shr al,4

; AL – үлкен биттері

call print_nibble

; үлкен цифрды шығару

mov al,dh

; AL-де 4 кіші бит сақтаулы

print_nibble:

; 4 битті шығару процесдурасы (оналтылық санның)

cmp al,10

; AL

sbb al,69h

; ASCII-кодына сәйкес

das

; (DAS командасының сипаттамасын қарау)

mov dl,al

; DL-дегі символ коды

mov ah,2

; АН-дегі функция нөмірі

int 21h

; символды шығару

ret

; RET екі рет жұмыс істейді – бірінші рет үлкен цифрға шақырылған print_nibble процедурасынан қайтқанда, екінші рет – print_al процедурасынан қайтқанда

91-сурет. Программаның орындалу нәтижесі
181

1

2

messagel db "Ондық сан: $"

; шығарылатын мәліметтерден тұратын жол

message2 db "Оналтылық сан: $"

; шығарылатын мәліметтерден тұратын жол

err_msg db "Енгізу қатесі"

; шығарылатын мәліметтерден тұратын жол

crlf db 0Dh,0Ah,

; шығарылатын мәліметтерден тұратын жол

Buffer db 6

; енгізу буферінің максималды буфері

blength db?

; оқығаннан кейінгі буфер өлшемі

bcontents:

; буфердегі мәліметтер СОМ-файлдың соңынан ке- йін орналасады

end start

; программа кодының аяқталу белгісі

Программаның коды және орындалу барысы:
182
0Ah функциясы ыңғайлы, бірақ мәліметтерді енгізудің шек- телген әдісі болып табылады. Әдетте, әр символды жеке енгізе- тін функциялар жиі қолданылады, олар символдардың экранда бейнеленуін, программаның функционалды және басқарушы ба- тырмаларға өзгерісін және т.с.с. бақылап отырады.
Бақылау сұрақтары:
  • DIV, PUSH, POP, SHL, TEST командалардың жұмысын сипаттаңыз.
  • Стекке орналастырылған сандардың қайда орналасқанын анықтаңыз.
  • SHL dx,1 және SHL dx, cl командаларының өзара айырмашылығы?

  • Зертханалық жұмыс барысында көрсетілген мысалдарды іске асырып, регистрлердің қолданылу ерекшеліктерін көрсетіңіз.

Батырма

Код

Батырма

Код

Батырма

Код

Батырма

Код

1

2

3

4

5

6

7

8

Esc

01h

Enter

1Ch

K*

37h

Ins

52h

1!

02h

Ctrl

1Dh

Alt

38h

Del

53h

2 @

03h

A

1Eh

SP

39h

SysRq

54h

3 #

04h

S

1Fh

Caps

3Ah

Macro

56h

4 $

05h

D

20h

F1

3Bh

F11

57h

5%

06h

F

21h

F2

3Ch

F12

58h

6 ^

07h

G

22h

F3

3Dh

PA1

5Ah

7 &

08h

СЫЗБА

23h

F4

3Eh

F13/LWin

5Bh

8 *

09h

J

24h

F5

3Fh

F14/RWin

5Ch

9 (

0Ah

K

25h

F6

40h

F15/Menu

5Dh

0)

0Bh

L

26h

F7

41h

F16

63h

- _

0Ch

;:

27h

F8

42h

F17

64h

= +

0Dh

сызба "

28h

F9

43h

F18

65h

BS

0Eh

` ~

29h

F10

44h

F19

66h

Tab

0Fh

LShift

2Ah

Num

45h

F20

67h

Q

10h

\ |

2Bh

Scroll

46h

F21

68h

СЫЗБА

11h

Z

2Ch

Home

47h

F22

69h

E

12h

X

2Dh

-

48h

F23

6Ah

1

2

3

4

5

6

7

8

R

13h

C

3Eh

PgUp

49h

F24

6Bh

T

14h

V

2Fh

K-

4Ah

EraseEOF

6Dh

СЫЗБА

15h

B

30h

4Bh

Copy/Play

6Fh

U

16h

N

31h

K5

4Ch

CrSel

72h

I

17h

M

32h

®

4Dh

Delta

73h

O

18h

, <

33h

K+

4Eh

ExSel

74h

P

19h

. >

34h

End

4Fh

Clear

76h

[{

1Ah

/?

35h

I

50h

] }

1Bh

RShift

36h

PgDn

51h



Достарыңызбен бөлісу:
1   ...   88   89   90   91   92   93   94   95   ...   141




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет