.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