diff options
Diffstat (limited to 'sem2/lab5/task.asm')
| -rw-r--r-- | sem2/lab5/task.asm | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/sem2/lab5/task.asm b/sem2/lab5/task.asm new file mode 100644 index 0000000..e99eb6d --- /dev/null +++ b/sem2/lab5/task.asm @@ -0,0 +1,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
\ No newline at end of file |