nyac55 Posted November 25, 2013 Report Share Posted November 25, 2013 Witam. Mam problem z wprowadzeniem znaku z klawiatury ,gdyż program ma działać tak ,że np. po naciśnięciu klawisza l przechodzi do odpowiedniej etykiety. Obecnie program przechodzi tylko raz ,a gdy chcę wprowadzić kolejny znak i zastąpić ten stary ,następnie porównać czy w al wprowadził 1 czy 0 -> ,albo mi tego nie robi ,albo w kodzie poniżej jest jakiś błąd.format MZentry main:startstack 100hmacro wypisz txt{mov dx,txtmov ah,9int 21h}macro ustaw_kursor A,B{ mov bh,0 mov dh,A mov dl,B mov ah,2 int 10h }segment mainstart: mov ax,dane ;ustalnie segmentu danych mov ds,ax wypisz txt1 ;legenda menu wypisz txt2 wypisz txt3 wypisz txt4 wypisz txt5 wypisz txt6 wypisz txt7 wypisz dana1 ;wyswietla 1 dana i wartosc wypisz spacja wypisz zm1 wypisz znak1 wypisz dana2 ;wyswietla 1 dana i wartosc wypisz spacja wypisz zm2 wypisz znak2 wypisz wynik ;wyswietla wynik wypisz wyn call pob_znak mov ah,4ch int 21hpob_znak: mov ah,7 int 21h cmp al,'L' je l cmp al,'l' je l cmp al,'P' je p cmp al,'p' je p cmp al,'W' je w cmp al,'w' je w jmp pob_znakl: ;pobiera znak pod zm1;wypisz txt1 wypisz dal ustaw_kursor 8,12 ;wypisz dal mov ah,7 int 21h ;ret cmp al,'1' je l1 l1: loop l mov cx,8 add [zm1],al shl [zm1],1 loop l wypisz zm1 mov ah,7 ;czekamy na enter int 21h cmp al,13 jmp l cmp al,'0' rcl[zm1+0],1 ;add [zm1],al ;shl [zm1],1 mov ah,7 int 21h ;czekamy na enter jmp lp: ;pobiera znak pod zm2wypisz txt2 mov ah,7 int 21h retw: retkor:esc: mov ah,4ch int 21hsegment dane txt1 db '- <L> - wybor dane1',10,13,'$' txt2 db '- <P> - wybor dane2',10,13,'$' txt3 db '- <W> - wykonanie operacji',10,13,'$' txt4 db '- <1>, <0> - wprowadzenie wartosci danej',10,13,'$' txt5 db '- <Enter> - akceptacja danej',10,13,'$' txt6 db '- <BS> - korekta',10,13,'$' txt7 db '- <Esc> - wyjscie z programu',10,13,'$' dal db 'L$' dana1 db 10,13,'Dana 1 =$' znak1 db ' -',10,13,'$' dana2 db 'Dana 2 =$' znak2 db ' =',10,13,'$' wynik db 'Wynik =$',10,13 zm1 db 48 zm2 db 30h wyn db 10,13,'$',10,13 spacja db ' $' Link to comment Share on other sites More sharing options...
nyac55 Posted December 2, 2013 Author Report Share Posted December 2, 2013 Moje prace nad programem liczącym:format MZentry main:startstack 100hmacro wypisz txt{mov dx,txtmov ah,9int 21h}macro ustaw_kursor A,B{ mov bh,0 mov dh,A mov dl,B mov ah,2 int 10h }segment mainstart: mov ax,dane ;ustalnie segmentu danych mov ds,ax mov ax,3 ;clr scr int 10h wypisz txt1 ;legenda menu wypisz txt2 wypisz txt3 wypisz txt4 wypisz txt5 wypisz txt6 wypisz txt7 wypisz dana1 ;wyswietla 1 dana i wartosc wypisz spacja wypisz zm1 wypisz znak1 wypisz dana2 ;wyswietla 1 dana i wartosc wypisz spacja wypisz zm2 wypisz znak2 wypisz wynik ;wyswietla wynik wypisz wyn call pob_znak call wysw_binpob_znak: mov ah,7 int 21h cmp al,'L' je pierwsza_dana cmp al,'l' je pierwsza_dana cmp al,'P' je druga_dana cmp al,'p' je druga_dana cmp al,'W' je w cmp al,'w' je w cmp al, 8 je bs cmp al, 27 je esc jmp pob_znak mov cx,8 ; TA DEKLARACJA (przesunięcie) NIGDY CI SIĘ NIE WYKONA, przeskakujesz ten fragment programupierwsza_dana: mov cx,8 ; przesunąłem ją tutaj, teraz się wykona, w cx były śmieci, dlatego program Ci sę zapętlał wypisz txt1 ;wypisz dal jmp dan1petla: ;pobiera znak pod zm1 shl [zm1],1 ; M - przesunąłem to tutaj, bo po ostatnim przebiegu pętli przesunął by Ci o 1 w lewo całą zmiennądan1: ;ustaw_kursor 8,12 mov ah,7 int 21h cmp al,13 ;enter je ent cmp al,'0' jb dan1 cmp al,'1' ja dan1 ;cmp al,13 ;enter ;je ent cmp al,8 ;backspace je bs mov ah,2 ;wyswiela wartosci mov dl,al int 21h sub al,30h ;zamieniamy wartosc hex na bin add [zm1],al ;doklejamy kolejne bity loop petla ustaw_kursor 8,12 call wysw_bin ;wyswietlenie zmiennej mov ah,7 int 21h jmp startdruga_dana: ;pobiera znak pod zm2 wypisz txt2 mov cx,8 petla2: shl [zm1],1dan2: mov ah,7 int 21h cmp al,'0' jb dan2 cmp al,'1' ja dan2 mov ah,2 mov dl,al int 21h sub al,30h add [zm2],al ustaw_kursor 10,12 ;call wys2 ;wyswietlenie zmiennej mov ah,7 int 21h loop petla2 jmp startw:ent: mov ah,2 ;wyswiela wartosci mov dl,al int 21hbs:esc: wypisz txt7 mov ah,7 int 21h mov ah,4ch int 21h;;;;;;;;;;;;;;;;;;;wyswietlanie;;;;;;;;;;;;;;;;;;;;;wysw_bin: mov cl,8ety1: push cx rcl [zm1],1 jc ety2 mov dl,'0' jmp ety3ety2: mov dl,'1'ety3: mov ah,2 int 21h pop cxloop ety1 rcl [zm1],1 ret;;;;;;;;;;;;;;;;;;;;;segment dane txt1 db '- <L> - wybor dane1',10,13,'$' txt2 db '- <P> - wybor dane2',10,13,'$' txt3 db '- <W> - wykonanie operacji',10,13,'$' txt4 db '- <1>, <0> - wprowadzenie wartosci danej',10,13,'$' txt5 db '- <Enter> - akceptacja danej',10,13,'$' txt6 db '- <BS> - korekta',10,13,'$' txt7 db '- <Esc> - wyjscie z programu',10,13,'$' dal db 'L$' dana1 db 10,13,'Dana 1 =$' znak1 db ' -',10,13,'$' dana2 db 'Dana 2 =$' znak2 db ' =',10,13,'$' wynik db 'Wynik =$',10,13 zm1 db 0 zm2 db 0 wyn db 10,13,'$',10,13 spacja db ' $'Program jeszcze nie jest w pełni sprawny. Link to comment Share on other sites More sharing options...