summaryrefslogtreecommitdiff
path: root/sem2/lab5/task.asm
blob: e99eb6d6d054df8a3aaf52cfa8d5f4568efd65cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
.model small
.data
old_9 dd 0
mesg db "To exit press ESC! $"
mes2 db "Pressed$"
mess DB "GG$"
B_UP equ 72  ; вверх
B_DN equ 80  ; вниз
B_BS equ 75  ; влево
B_FWD equ 77 ; вправо
minAdress DB 0
step DB 1 ;КОЛИЧЕСТВО СЧИТЫВАЕМЫХ БАЙТ
tmp DB 4 dup (0)

.stack 100h
.code

pInitTmp PROC ;инициализация TMP из BX
    MOV cx, 0004h ; счеткчик выполняем 4 раза
    MOV si, 0000h ; индекс масcисва - i

    mLoop:
        PUSH cx

        MOV cl, 04h
        MOV tmp[si], bl
        ; сдвиги итераций
        SHL tmp[si], cl ;сдвиг вправа
        SHR tmp[si], cl
        SHR bx, cl

        POP cx ;извлечение счётчика заносим в стек
        INC si
    LOOP mLoop

    RET
pInitTmp ENDP

pPrintTmp PROC ;вывод TMP 
    MOV cx, 0004h; начинаем с 3 4 раза и до нуля выводим этот массив
    MOV si, 0003h

    mLoop0:
        MOV dl, tmp[si]
        DEC si
        CALL pPrintNum
    LOOP mLoop0

    MOV dl, 20h
    CALL pPrintCh
    
    RET
pPrintTmp ENDP

pPrintNum PROC ;показывает 1 16-ричный разряд из DL ;
    ADD dl, 30h  ;
    CMP dl, 3Ah ;
    
    JL metka
    ADD dl, 07h ;

    metka:
    MOV ah, 02h
    INT 21h

    RET
pPrintNum ENDP

pPrintCh PROC ;show CHAR
    MOV ah, 02h
    INT 21h

    RET
pPrintCh ENDP

pPrintStr PROC ;показывает STRING
    MOV ah, 09h
    INT 21h
    MOV dl, 0Ah
    CALL pPrintCh

    RET
pPrintStr ENDP

pDIByte PROC ;показывает BH
    mov bx, [cs:di]
    XCHG bl, bh ; xchg = swap
    CALL pInitTmp
    MOV cx, 0002h ;каждый из 4 элементов массива это одна из стрелочек
    MOV si, 0003h

    mLoop4:
        MOV dl, tmp[si]
        DEC si
        CALL pPrintNum
    LOOP mLoop4

    INC di
    MOV dl, 20h
    CALL pPrintCh

    RET
pDIByte ENDP

start:
my9 proc far
    
    push ax
    push bx
    push es
    push si
    in al,60h ;Проверяем не нажата ли клавиша UP
    ADD al, 00h
END start