Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2018, 23:45   #11
777Max777
Пользователь
 
Регистрация: 25.03.2018
Сообщений: 14
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
Коды расширенных клавиш возвращает fn.BIOS INT-16h.
Чтобы получить средствами дос, то нужно fn.ввода-DOS вызывать дважды:
Код:
Расширенные клавиши ASCII
-------------------------
Если INT-16h fn.00h вернула в AL=0, то AH содержит расширенный код клавиши.

──────────────╥───────────────╥────────────────╥─────────────────╥──────────────
Key   Hex Dec ║ Key   Hex Dec ║ Key    Hex Dec ║ Key     Hex Dec ║ Key   Hex Dec
──────────────╫───────────────╫────────────────╫─────────────────╫──────────────
Alt-A  1e  30 ║ Alt-N  31  49 ║ Alt-0  81  129 ║ down  ↓  50  80 ║
Alt-B  30  48 ║ Alt-O  18  24 ║ Alt-1  78  120 ║ left  ←  4b  75 ║ ^left  73 115
Alt-C  2e  46 ║ Alt-P  19  25 ║ Alt-2  79  121 ║ right →  4d  77 ║ ^right 74 116
Alt-D  20  32 ║ Alt-Q  10  16 ║ Alt-3  7a  122 ║ up    ↑  48  72 ║
Alt-E  12  18 ║ Alt-R  13  19 ║ Alt-4  7b  123 ║ NUL      03   3 ║
Alt-F  21  33 ║ Alt-S  1f  31 ║ Alt-5  7c  124 ║ Shft-Tab 0f  15 ║
Alt-G  22  34 ║ Alt-T  14  20 ║ Alt-6  7d  125 ║ Del      53  83 ║
Alt-H  23  35 ║ Alt-U  16  22 ║ Alt-7  7e  126 ║ End      4f  79 ║ ^End   75 117
Alt-I  17  23 ║ Alt-V  2f  47 ║ Alt-8  7f  127 ║ Home     47  71 ║ ^Home  77 119
Alt-J  24  36 ║ Alt-W  11  17 ║ Alt-9  80  128 ║ Ins      52  82 ║
Alt-K  25  37 ║ Alt-X  2d  45 ║ Alt--  82  130 ║ PgDn     51  81 ║ ^PgDn  76 118
Alt-L  26  38 ║ Alt-Y  15  21 ║ Alt-=  83  131 ║ PgUp     49  73 ║ ^PgUp  84 132
Alt-M  32  50 ║ Alt-Z  2c  44 ║                ║                 ║ ^PrtSc 72 114
──────────────╨───────────────╨────────────────╨─────────────────╨──────────────
Нужные тебе стрелки и DEL описаны в столбце(4).
Тогда код может выглядеть приблизительно так:
Код:
;fasm-code
;--------------
org     100h      ; делаем *.com файл (.model tiny)
jmp     start
 
tm      db  'Current second: '
sec     db  0,0,13,10               ; 2-байта под секунды
y1      db  'Y1.txt',0,13,10,'$'    ; имя файла (ascii-z)

ok      db  13,10,10,'WRITE FILE OK!   '
bye     db  'Bye - - Bye - - !!! $'

start:  mov   ah,2Ch         ; запрос сис.времени!
        int   21h            ;
;------ Время в символы
        mov   al,dh          ; al = HEX-секунды
        aam                  ; перевести в DEC
        xchg  ah,al          ;  ...
        add   ax,3030h       ;   ...и в ASCII-символы
        mov   word[sec],ax   ; запомнить в переменной.
;------ Вывод всех строк на экран
        mov   ah,9           ; вывод на экран!
        mov   dx,tm          ;   ..(от метки 'tm' и до '$')
        int   21h            ;
;------ Обработка расширенного ввода
@keyb:  xor   ax,ax          ;
        int   16h            ;
        cmp   ah,53h         ; del ???
        jz    @exit          ;--- да!
        cmp   ah,48h         ; up-arrow
        jz    @up            ;
        jmp   @keyb          ; остальные в игнор!
;------ Запись в файл 'Y1.txt'
@up:    mov   ah,3Ch         ; создать
        mov   dx,y1
        mov   cx,20h
        int   21h
        mov   bx,ax          ; ..(дескриптор файла)
        mov   ax,3D02h       ; открыть
        int   21h
        mov   ah,40h         ; записать
        mov   cx,2           ;   ..2-байта
        mov   dx,sec
        int   21h
        mov   ah,3Eh         ; закрыть
        int   21h
        mov   dx,ok          ; мессага ОК!
        jmp   @prn

@exit:  mov   dx,bye         ; если 'DEL', то BYE!
@prn:   mov   ah,9
        int   21h

        mov   ah,8           ;
        int   21h
        ret                  ; на выход!
Упс... Соряныч забыл дописать после запятой offset) Все запустилось по-ходу правильно.
777Max777 вне форума Ответить с цитированием
Старый 26.03.2018, 21:57   #12
777Max777
Пользователь
 
Регистрация: 25.03.2018
Сообщений: 14
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
Коды расширенных клавиш возвращает fn.BIOS INT-16h.
Чтобы получить средствами дос, то нужно fn.ввода-DOS вызывать дважды:
Код:
Расширенные клавиши ASCII
-------------------------
Если INT-16h fn.00h вернула в AL=0, то AH содержит расширенный код клавиши.

──────────────╥───────────────╥────────────────╥─────────────────╥──────────────
Key   Hex Dec ║ Key   Hex Dec ║ Key    Hex Dec ║ Key     Hex Dec ║ Key   Hex Dec
──────────────╫───────────────╫────────────────╫─────────────────╫──────────────
Alt-A  1e  30 ║ Alt-N  31  49 ║ Alt-0  81  129 ║ down  ↓  50  80 ║
Alt-B  30  48 ║ Alt-O  18  24 ║ Alt-1  78  120 ║ left  ←  4b  75 ║ ^left  73 115
Alt-C  2e  46 ║ Alt-P  19  25 ║ Alt-2  79  121 ║ right →  4d  77 ║ ^right 74 116
Alt-D  20  32 ║ Alt-Q  10  16 ║ Alt-3  7a  122 ║ up    ↑  48  72 ║
Alt-E  12  18 ║ Alt-R  13  19 ║ Alt-4  7b  123 ║ NUL      03   3 ║
Alt-F  21  33 ║ Alt-S  1f  31 ║ Alt-5  7c  124 ║ Shft-Tab 0f  15 ║
Alt-G  22  34 ║ Alt-T  14  20 ║ Alt-6  7d  125 ║ Del      53  83 ║
Alt-H  23  35 ║ Alt-U  16  22 ║ Alt-7  7e  126 ║ End      4f  79 ║ ^End   75 117
Alt-I  17  23 ║ Alt-V  2f  47 ║ Alt-8  7f  127 ║ Home     47  71 ║ ^Home  77 119
Alt-J  24  36 ║ Alt-W  11  17 ║ Alt-9  80  128 ║ Ins      52  82 ║
Alt-K  25  37 ║ Alt-X  2d  45 ║ Alt--  82  130 ║ PgDn     51  81 ║ ^PgDn  76 118
Alt-L  26  38 ║ Alt-Y  15  21 ║ Alt-=  83  131 ║ PgUp     49  73 ║ ^PgUp  84 132
Alt-M  32  50 ║ Alt-Z  2c  44 ║                ║                 ║ ^PrtSc 72 114
──────────────╨───────────────╨────────────────╨─────────────────╨──────────────
Нужные тебе стрелки и DEL описаны в столбце(4).
Тогда код может выглядеть приблизительно так:
Код:
;fasm-code
;--------------
org     100h      ; делаем *.com файл (.model tiny)
jmp     start
 
tm      db  'Current second: '
sec     db  0,0,13,10               ; 2-байта под секунды
y1      db  'Y1.txt',0,13,10,'$'    ; имя файла (ascii-z)

ok      db  13,10,10,'WRITE FILE OK!   '
bye     db  'Bye - - Bye - - !!! $'

start:  mov   ah,2Ch         ; запрос сис.времени!
        int   21h            ;
;------ Время в символы
        mov   al,dh          ; al = HEX-секунды
        aam                  ; перевести в DEC
        xchg  ah,al          ;  ...
        add   ax,3030h       ;   ...и в ASCII-символы
        mov   word[sec],ax   ; запомнить в переменной.
;------ Вывод всех строк на экран
        mov   ah,9           ; вывод на экран!
        mov   dx,tm          ;   ..(от метки 'tm' и до '$')
        int   21h            ;
;------ Обработка расширенного ввода
@keyb:  xor   ax,ax          ;
        int   16h            ;
        cmp   ah,53h         ; del ???
        jz    @exit          ;--- да!
        cmp   ah,48h         ; up-arrow
        jz    @up            ;
        jmp   @keyb          ; остальные в игнор!
;------ Запись в файл 'Y1.txt'
@up:    mov   ah,3Ch         ; создать
        mov   dx,y1
        mov   cx,20h
        int   21h
        mov   bx,ax          ; ..(дескриптор файла)
        mov   ax,3D02h       ; открыть
        int   21h
        mov   ah,40h         ; записать
        mov   cx,2           ;   ..2-байта
        mov   dx,sec
        int   21h
        mov   ah,3Eh         ; закрыть
        int   21h
        mov   dx,ok          ; мессага ОК!
        jmp   @prn

@exit:  mov   dx,bye         ; если 'DEL', то BYE!
@prn:   mov   ah,9
        int   21h

        mov   ah,8           ;
        int   21h
        ret                  ; на выход!
Ещё один вопрос. А в tasm это как выглядит?
777Max777 вне форума Ответить с цитированием
Старый 26.03.2018, 22:12   #13
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от 777Max777 Посмотреть сообщение
Все запустилось по-ходу правильно.
как тогда запустилось? не обманывай сам-себя...
основное отличие fasm от tasm, отсутствие директив [offsst] для указания адресов. Можно юзать LEA (операнды с скобках), но это на любителя.
Код:
; tasm-code
;-------------
mov  ah,9
lea  dx,tm
int 21h
; fasm-code
;-------------
mov  dx,tm
;.....
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 27.03.2018, 23:49   #14
777Max777
Пользователь
 
Регистрация: 25.03.2018
Сообщений: 14
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
как тогда запустилось? не обманывай сам-себя...
основное отличие fasm от tasm, отсутствие директив [offsst] для указания адресов. Можно юзать LEA (операнды с скобках), но это на любителя.
Код:
; tasm-code
;-------------
mov  ah,9
lea  dx,tm
int 21h
; fasm-code
;-------------
mov  dx,tm
;.....
Вот как переделал
Код:
.model small                                    
.stack 256                                      
.data                                          
a db '/  /'                                    
sec db  0,0,13,10              
   
lin db 0
col db 0  

Y1 db 'Y1.TXT', 0                              
Y2 db 'Y2.TXT', 0    

id1 dw 0                                        
id2 dw 0                                         

                                    
txt1 db 'Zapyszit potoczne znaczennja sekundy w odyn z dwoh failiv klaviszamy Up i Down',0       
txt2 db 'Klavisza Up-Y1 a Down-Y2',0                                                             
txt3 db 'Bye---Bye!!!',0                                                                         
.code                                           
     assume ds:@data es:@data, cs:@code
     start: 
     mov ax,@data                               ;Kopijujem adres
     mov es,ax                                  ;segmenta danych
     mov ds,ax
                
     mov ah,00h                                     ;Video_rerzym.   
     mov al,3
     int 10h     

    ;***STVORENNJA_FAILIV*** 
    ;FILE_1 (Y1)-------------------
    mov ah, 3ch                                     
    mov cx, 00000000b                              
    mov dx, offset Y1                               
    int 21h                                       
    mov id1, ax                                    
    
    ;***VIDKRYTY_FAIL_1***   
    mov ah, 3dh
    mov al, 2
    mov dx, offset Y1
    int 21h 
    
    ;FILE_2 (Y2)----------------------
    mov ah, 3ch                                     
    mov cx, 00000000b                             
    mov dx, offset Y2                              
    int 21h                                       
    mov id2, ax                                    
    
    ;***VIDKRYTY_FAIL_2***   
    mov ah, 3dh
    mov al, 2
    mov dx, offset Y2
    int 21h    

    ;***INSTRUKCIJA***
                                 
    ;___PEREMISZCZENNJA KURSORU_1___
    mov col, 1
    mov lin, 2
     
    ;___VYVID POVIDOMLENJA_1___  
    mov ah, 13h
    mov al, 0
    mov cx, 78
    mov dh, lin                                     
    mov dl, col                                     
    mov bl, 0b1h
    mov bp, offset txt1
    int 10h 
    inc lin

    ;___PEREMISZCZENNJA KURSORU_2___
    mov col, 27                                     ;Stovbec vyvodu
    inc lin                                         ;Rjadok vyvodu
    inc col                                         ;Stovbec vyvodu

    ;___VYVID POVIDOMLENJA_2___  
    mov ah, 13h
    mov al, 0
    mov cx, 24
    mov dh, lin                                     
    mov dl, col                                    
    mov bl, 0b1h
    mov bp, offset txt2
    int 10h  
    inc lin
 
    ;***SEKUNDY***
    ;___VYZNACZYMO_POTOCZNYJ_CZAS___
 m1:mov ah,2ch                           
    int 21h
    mov sec,dh                                       ;Zbererzennja danyh u zminnu
    
    mov   al,dh                                      ; al = HEX-sekundy
    aam                                              ; perevesty v  DEC
    xchg  ah,al                                      ;  ...
    add   ax,3030h                                   ;   ...i v ASCII-symvoly
    mov   ax, offset sec                             ;Zapamjataty v zminnij 
    
    ;___VYVODYMO_CEKUNDY___
    mov al,sec
    mov ah,0
    mov bh,10
    div bh
    add al,30h
    mov a+1,al
    add ah,30h
    mov a+2,ah
     
    ;___VYVID_ZNACZENNJA_SEKUNDY___
    mov ah, 13h
    mov al,1
    mov bh,0
    mov bp, offset a
    mov cx,4
    mov bl, 01001110b
    mov dh,0
    mov dl,38
    int 10h
   ;jmp m1  
 
    ;***OBROBKA_ROZSZYRENOHO_VVODU***   
keyb:   xor ax, ax
        int 16h
        cmp ah, 53h                                 ;Scan kod knopky Del v Hex 
        jz del                                      ;Perehid na mitku del
        cmp ah, 48h                                 ;Scan kod knopky ArrowUp v Hex 
        jz up                                       ;Perehid na mitku up   
        cmp ah, 50h                                 ;Scan kod knopky ArrowDown v Hex 
        jz down                                     ;Perehid na mitku down
        jmp keyb                                    ;Inszi ignoruvaty

up: 
    ;FILE_1 (Y1)---------------------
    mov ah, 3ch                                     ;Funkcii stvorennja failu
    mov cx, 00000000b                               ;Atrybuty failu
    mov dx, offset Y1                               ;Adresa ASCII-rjadka
    int 21h                                         ;Pereryvanja
    mov id1, ax                                     ;Zanesennja v zminnu identyfikatora
    
    ;***VIDKRYTY_FAIL_1***   
    mov ah, 3dh
    mov al, 2                                       ;Czytaty ta zapysuvaty v fail
    mov dx, offset Y1
    int 21h 
    ;---------------------
    ;___Zapys u file_1___
    mov ah, 40h
    mov bx, id1
    mov dx, offset sec                              ;Zapys sekundy
    mov cx, 2                                       ;2 baita
    int 21h  
    ;---------------------
down:
    ;FILE_2 (Y2)------------------
    mov ah, 3ch                                     ;Funkcii stvorennja failu
    mov cx, 00000000b                               ;Atrybuty failu
    mov dx, offset Y2                               ;Adresa ASCII-rjadka
    int 21h                                         ;Pereryvanja
    mov id2, ax                                     ;Zanesennja v zminnu identyfikatora 
    ;---------------------
    ;***VIDKRYTY_FAIL_2***   
    mov ah, 3dh
    mov al, 2                                       ;Czytaty ta zapysuvaty v fail
    mov dx, offset Y2
    int 21h            
    ;---------------------
    ;___Zapys u file_2___
    mov ah, 40h
    mov bx, id2
    mov cx,4h
    mov dx, offset sec                               ;Zapys sekundy
    mov cx, 2                                        ;2 baita
    int 21h    
    jmp cls                                          ;Perehid na mitku cls

    ;***ZAKRYTTJA_FAILIV***
    ;FILE_1 (Y1)
cls:mov ah, 3eh
    mov bx, id1
    int 21h
    ;FILE_2 (Y2) 
    mov ah, 3eh
    mov bx, id2
    int 21h

JMP m1                                              ;Perehid na mitku m1

del:
    ;***DEL***                                      ;Koly narzata knopka Del
    ;___PEREMISZCZENNJA KURSORU_3___
    mov col, 26                                     ;Stovbec vyvodu
    inc lin                                         ;Rjadok vyvodu
    inc col                                         ;Stovbec vyvodu

    ;___VYVID POVIDOMLENJA_3___  
    mov ah, 13h
    mov al, 0
    mov cx, 12
    mov col, 34                                     ;Znaczennja stovbcja v jakomu bude vyvodyty povodomlennja
    mov lin, 6                                      ;Znaczennja linijky v jakij bude vyvodyty povodomlennja
    mov dh, lin                                     ;Rjadok z jakoho vyvedutsja povidomlenja
    mov dl, col                                     ;Stovpec z jakoho vyvedutsja povidomlenja
    mov bl, 0b1h
    mov bp, offset txt3
    int 10h  
    inc lin

exit:
;___THE END___ 
mov ax,4c00h                                         ;Funkcija zakryttja prograny
int 21h
end start
Изображения
Тип файла: jpg 1.jpg (33.9 Кб, 128 просмотров)
Тип файла: jpg 2.jpg (41.8 Кб, 128 просмотров)
Тип файла: jpg 3.jpg (102.1 Кб, 133 просмотров)
Тип файла: jpg 4.jpg (99.6 Кб, 134 просмотров)
777Max777 вне форума Ответить с цитированием
Старый 27.03.2018, 23:52   #15
777Max777
Пользователь
 
Регистрация: 25.03.2018
Сообщений: 14
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
как тогда запустилось? не обманывай сам-себя...
основное отличие fasm от tasm, отсутствие директив [offsst] для указания адресов. Можно юзать LEA (операнды с скобках), но это на любителя.
Код:
; tasm-code
;-------------
mov  ah,9
lea  dx,tm
int 21h
; fasm-code
;-------------
mov  dx,tm
;.....
Только надо поставить как-то метку чтобы не записывало в Y2 значение которое должно быть записано только в Y1. Ещё вместо нормального времени записывает в текстовик любой символ. Хз как метку правильно поставить и что сделать чтобы записало в файл норм время.

Сверху скрины проги ибо максимум можно отвечать 8000 символами на форуме
1.Экран консоли самой проги
2.При нажатии кнопки del
3.При нажатии стрелки вверх (должно записать значение только в Y1 текстовик)
4.При нажатии стрелки вниз (записало только в Y2 (все норм))
777Max777 вне форума Ответить с цитированием
Старый 28.03.2018, 00:10   #16
777Max777
Пользователь
 
Регистрация: 25.03.2018
Сообщений: 14
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
как тогда запустилось? не обманывай сам-себя...
основное отличие fasm от tasm, отсутствие директив [offsst] для указания адресов. Можно юзать LEA (операнды с скобках), но это на любителя.
Код:
; tasm-code
;-------------
mov  ah,9
lea  dx,tm
int 21h
; fasm-code
;-------------
mov  dx,tm
;.....
Привык сперва спрашивать а потом пробовать сам) С тем что записывает в оба файла вместо одного я разобрался поставив переход на метку cls после записи в файл 1, но с тем почему пишет левые символы ещё нет(
777Max777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Excel - : Лекарства "Метокард" (строка 5) и "Карвидил" (строка 6) при нажатии появляются 2 раз. Что надо делать? omonulla1986 Microsoft Office Excel 7 04.12.2016 16:49
Замена "," на "." при выводе массива в файл. superpsih Microsoft Office Access 1 22.07.2016 12:42
Ошибка "External: sigsegv" при нажатии на кнопку голова Lazarus, Free Pascal, CodeTyphon 4 30.06.2015 16:22
как вставить компоненту "panel" при нажатии на кнопку? Nazario Общие вопросы Delphi 2 03.05.2012 18:38
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04