flat assembler
Message board for the users of flat assembler.
![]() |
Author |
|
revolution 18 Nov 2013, 01:57
I suspect I am not the only person to find your code hard to follow with the labels in a non-English language. While there might be some people on this board that can read your native language it would probably be a much better bet that if you translated them to English you would get more help with your problem.
|
|||
![]() |
|
MHajduk 18 Nov 2013, 21:50
I dared to "anglicize" the original bipocich's program and, as I suppose, this version will be easier to understand to potential reader:
Code: format MZ entry main: start stack 100h segment main start: call clean mov ax, progdata mov ds, ax mainproc: call data1 call minus call data2 call equals call result call question call line1 call options call line2 call choice label0: call getdata cmp al, 1Bh je endproc ;jne label0 cmp al, 'L' je get_data1 cmp al, 'P' je get_data2 ;cmp al, 'L' ;je perform jne label0 ;mov ah, 4ch ;int 21h ;------------------- get_data1: mov dx, text1 call displaytxt mov bx, number1 mov cx, 8 procloop: mov ah,07h int 21h cmp al,'0' je OK cmp al,'1' je OK jne procloop OK: mov [bx], al mov dx, bx call displaytxt inc bx loop procloop ;call clean ;call mainproc call data1 ret get_data2: mov dx, text2 call displaytxt mov bx, number2 mov cx, 8 loop1: mov ah,07h int 21h cmp al,'0' je OK1 cmp al,'1' je OK1 jne loop1 OK1: mov [bx], al call display_bin inc bx loop procloop call data2 ret display_bin: mov cl,8 label1: push cx rcl [number2],1 jc label2 mov dl,'0' jmp label3 label2: mov dl,'1' label3: mov ah,2 int 21h pop cx loop label1 rcl [number2],1 ret displaytxt: mov ah, 09h int 21h ret getdata: mov ah, 07h int 21h ret endproc: mov ah, 4ch int 21h minus: mov bh,0 mov dl, 00 mov dh, 1 mov ah, 2 int 10h mov dx, text4 call displaytxt ret equals: mov bh,0 mov dl, 00 mov dh, 3 mov ah, 2 int 10h mov dx, text5 call displaytxt ret data1: mov bh,0 mov dl, 00 mov dh, 00 mov ah, 2 int 10h mov dx, text1 call displaytxt mov dx, number1 call displaytxt ret data2: mov bh,0 mov dl, 0 mov dh, 2 mov ah, 2 int 10h mov dx, text2 call displaytxt mov dx, number2 call displaytxt ret result: mov bh,0 mov dl, 0 mov dh, 4 mov ah, 2 int 10h mov dx, text3 call displaytxt ret question: mov bh,0 mov dl, 0 mov dh, 6 mov ah, 2 int 10h mov dx, text6 call displaytxt ret options: mov bh,0 mov dl, 0 mov dh, 8 mov ah, 2 int 10h mov dx, text7 call displaytxt ret clean: mov ah, 0 mov al, 3 int 10h ret line1: mov bh,0 mov dl, 0 mov dh, 7 mov ah, 2 int 10h mov dx, text9 call displaytxt ret line2: mov bh,0 mov dl, 0 mov dh, 9 mov ah, 2 int 10h mov dx, text9 call displaytxt ret choice: mov bh,0 mov dl, 0 mov dh, 10 mov ah, 2 int 10h mov dx, text10 call displaytxt ret segment progdata number1 db ' $' number2 db ' $' text db 'TEST$' text1 db 'Data1 = $' text2 db 'Data2 = $' text3 db 'Result = $' text4 db ' - $' text5 db ' = $' text6 db 'What do you want to do?$' text7 db ' <L> - choose data1; <P> - choose data2; <w> - perform an operation; <Esc> - exit$' text9 db '---------------------------------------------------------------$' text10 db 'Choice: $' |
|||
![]() |
|
bipocich 18 Nov 2013, 23:16
revolution wrote: I suspect I am not the only person to find your code hard to follow with the labels in a non-English language. While there might be some people on this board that can read your native language it would probably be a much better bet that if you translated them to English you would get more help with your problem. revolution THX for your suggestions and comments;) Here is the translated code: Code: format MZ entry main: start stack 100h segment main start: call clean mov ax, dane mov ds, ax main_program: call data1 call minus call data2 call equals call result call question call line1 call options call line2 call choice ety1: call download cmp al, 1Bh je ebd ;jne ety1 cmp al, 'L' je enter_data1 cmp al, 'P' je enter_data2 ;cmp al, 'L' ;je did_operations jne ety1 ;mov ah, 4ch ;int 21h ;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ enter_data1: mov dx, text1 call show mov bx, number1 mov cx, 8 loop11: mov ah,07h int 21h cmp al,'0' je good cmp al,'1' je good jne loop11 good: mov [bx], al mov dx, bx call show inc bx loop loop11 ;call clean ;call main_program call data1 ret ;------------------------------------------------- enter_data2: mov dx, text2 call show mov bx, number2 mov cx, 8 loop111: mov ah,07h int 21h cmp al,13 je back cmp al,'0' je good1 cmp al,'1' je good1 jne loop111 good1: mov [bx], al mov [tmp], al mov dx, tmp call show inc bx loop loop111 call data2 ret ;------------------------------------------------- back: dec bx ret ;ret ;------------------------------------------------- show: mov ah, 09h int 21h ret download: mov ah, 07h int 21h ret ebd: mov ah, 4ch int 21h minus: mov bh,0 mov dl, 00 mov dh, 1 mov ah, 2 int 10h mov dx, text4 call show ret equals: mov bh,0 mov dl, 00 mov dh, 3 mov ah, 2 int 10h mov dx, text5 call show ret data1: mov bh,0 mov dl, 00 mov dh, 00 mov ah, 2 int 10h mov dx, text1 call show mov dx, number1 call show ret data2: mov bh,0 mov dl, 0 mov dh, 2 mov ah, 2 int 10h mov dx, text2 call show mov dx, number2 call show ret result: mov bh,0 mov dl, 0 mov dh, 4 mov ah, 2 int 10h mov dx, text3 call show ret question: mov bh,0 mov dl, 0 mov dh, 6 mov ah, 2 int 10h mov dx, text6 call show ret options: mov bh,0 mov dl, 0 mov dh, 8 mov ah, 2 int 10h mov dx, text7 call show ret clean: mov ah, 0 mov al, 3 int 10h ret line1: mov bh,0 mov dl, 0 mov dh, 7 mov ah, 2 int 10h mov dx, text9 call show ret line2: mov bh,0 mov dl, 0 mov dh, 9 mov ah, 2 int 10h mov dx, text9 call show ret choice: mov bh,0 mov dl, 0 mov dh, 10 mov ah, 2 int 10h mov dx, text10 call show ret segment dane number1 db ' $' number2 db ' $' tekst db 'TESTOWY$' text1 db 'data1 = $' text2 db 'data2 = $' text3 db 'result = $' text4 db ' - $' text5 db ' = $' text6 db 'What do you want to do?$' text7 db ' <L> - choice dane1; <P> - choice dane2; <w> - do operation; <Esc> - exit$' text9 db '---------------------------------------------------------------$' text10 db 'choice: $' tmp db ' $' |
|||
![]() |
|
bipocich 18 Nov 2013, 23:18
MHajduk wrote: I dared to "anglicize" the original bipocich's program and, as I suppose, this version will be easier to understand to potential reader: MHajduk THX for your "anglicize" ![]() |
|||
![]() |
|
bipocich 21 Dec 2013, 00:29
The my solution of the problem:
Code: format MZ entry main: start stack 100h ;------------------------------------------------- ;MAKRA ;------------------------------------------------- macro wyswietl text { mov dx , text mov ah, 09h int 21h } macro wstaw text { mov [text],al } macro zerowanie text { local petla mov al, [spacja] mov cx,8 mov si,0 petla: mov [text+si],al inc si loop petla } macro kreskowanie text { mov al, [spacja] mov cx,8 mov si,0 petla2: mov [text+si],al inc si loop petla2 } macro kopiowanie text { mov cx,8 mov si,0 petla: mov al, [text+si] mov [pomocnicza+si],al inc si loop petla } macro na_HEX tmp { local ety4, ety5, ety6, ety7 mov al,[tmp] ;pierwsza cyfra hex shr al,4 cmp al,10 jb ety4 add al,55 ; kody ascii liter jmp ety5 ety4: add al,30h ety5: mov dl,al mov ah,2 int 21h mov al,[tmp] ;druga cyfra hex and al,0Fh cmp al,10 jb ety6 add al,55 ; kody ascii liter jmp ety7 ety6: add al,30h ety7: mov dl,al mov ah,2 int 21h } macro na_OCT tmp { mov al,[tmp] ;pierwsza cyfra oct shr al,6 add al,30h mov dl,al mov ah,2 int 21h mov al,[tmp] ;druga cyfra oct shl al,2 shr al,5 add al,30h mov dl,al mov ah,2 int 21h mov al,[tmp] ; trzecia dyfra oct and al,7 add al,30h mov dl,al mov ah,2 int 21h } macro konwersja tmp { local petla mov cx,8 mov si,7 petla: mov al, [tmp+si] rcr al, 1 rcl [xyz],1 loop petla } ;------------------------------------------------- ;MAKRA ;------------------------------------------------- segment main start: mov ax, dane mov ds, ax gBówna: call czysc call dana1 call minus call dana2 call rownasie call wynik call pytanie call linia1 call opcje call linia2 call wybor ety1: call pobierz cmp al, 1Bh je koniec ;jne ety1 cmp al, 'L' je wprowadz_dana1 cmp al, 'P' je wprowadz_dana2 cmp al, 'W' je odejmowanie ;cmp al, 'L' ;je wykonaj_operacje jne ety1 ;mov ah, 4ch ;int 21h ;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ wprowadz_dana1: zerowanie liczba1 zerowanie liczba3 wyswietl text1 mov cx,8 mov si,0 spr1: call pobierz cmp al,'0' je dobrze cmp al,'1' je dobrze cmp al, 8 je znak_wstecz cmp al, 13 je znak_enter jne spr1 dobrze: mov [liczba1+si],al wstaw tmp wyswietl tmp inc si loop spr1 jmp spr2 znak_wstecz: cmp cx,8 je spr1 dec si wstaw tmp wyswietl tmp jmp spr1 znak_enter: mov cx,si przesuniecie: call gBówna spr2: call pobierz cmp al, 8 je znak_wstecz cmp al, 13 je znak_enter jne spr2 ret ;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ wprowadz_dana2: zerowanie liczba2 zerowanie liczba3 wyswietl text2 mov cx,8 mov si,0 spr3: call pobierz cmp al,'0' je dobrze1 cmp al,'1' je dobrze1 cmp al, 8 je znak_wstecz1 cmp al, 13 je znak_enter1 jne spr1 dobrze1: mov [liczba2+si],al wstaw tmp wyswietl tmp inc si loop spr3 jmp spr4 znak_wstecz1: cmp cx,8 je spr3 dec si wstaw tmp wyswietl tmp jmp spr3 znak_enter1: mov cx,si przesuniecie1: call gBówna spr4: call pobierz cmp al, 8 je znak_wstecz1 cmp al, 13 je znak_enter1 jne spr4 ret ;------------------------------- pobierz: mov ah, 07h int 21h ret koniec: mov ah, 4ch int 21h minus: mov bh,0 mov dl, 00 mov dh, 1 mov ah, 2 int 10h wyswietl text4 ret rownasie: mov bh,0 mov dl, 00 mov dh, 3 mov ah, 2 int 10h wyswietl text5 ret dana1: mov bh,0 mov dl, 00 mov dh, 00 mov ah, 2 int 10h wyswietl text1 wyswietl liczba1 wyswietl przerwa konwersja liczba1 na_HEX xyz wyswietl przerwa wyswietl nawias1 na_OCT liczba1 wyswietl nawias2 ret dana2: mov bh,0 mov dl, 0 mov dh, 2 mov ah, 2 int 10h wyswietl text2 wyswietl liczba2 wyswietl przerwa konwersja liczba2 na_HEX xyz wyswietl przerwa wyswietl nawias1 na_OCT liczba2 wyswietl nawias2 ret wynik: mov bh,0 mov dl, 0 mov dh, 4 mov ah, 2 int 10h wyswietl text3 wyswietl liczba3 wyswietl przerwa na_HEX liczba3 wyswietl przerwa wyswietl nawias1 na_OCT liczba3 wyswietl nawias2 ret pytanie: mov bh,0 mov dl, 0 mov dh, 6 mov ah, 2 int 10h wyswietl text6 ret opcje: mov bh,0 mov dl, 0 mov dh, 8 mov ah, 2 int 10h wyswietl text7 ret czysc: mov ah, 0 mov al, 3 int 10h ret linia1: mov bh,0 mov dl, 0 mov dh, 7 mov ah, 2 int 10h wyswietl text9 ret linia2: mov bh,0 mov dl, 0 mov dh, 9 mov ah, 2 int 10h wyswietl text9 ret wybor: mov bh,0 mov dl, 0 mov dh, 10 mov ah, 2 int 10h wyswietl text10 ret odejmowanie: mov cx,8 mov si,7 clc petla_odejmowanie: mov al,[liczba1+si] ; tab[i] sbb al,[liczba2+si] ; dodaj z przeniesieniem cmp al, 0FFh jne ety1x mov al,1 ety1x: add al,30h mov [liczba3+si],al dec si loop petla_odejmowanie ;mov al, cf ;cmp al,1 jmp gBówna segment dane liczba1 db ' $' liczba2 db ' $' liczba3 db ' $' pomocnicza db ' $' tekst db 'TESTOWY$' text1 db 'Dana1 = $' text2 db 'Dana2 = $' text3 db 'Wynik = $' text4 db ' - $' text5 db ' = $' text6 db 'Co chcesz zrobic?$' text7 db ' <L> - wybor dane1; <P> - wybor dane2; <W> - wykonanie operacji; <Esc> - wyjscie$' text9 db '---------------------------------------------------------------$' text10 db 'Wybor: $' tmp db ' $' tmp1 db 0 przerwa db ' $' spacja db ' $' nawias1 db '[$' nawias2 db ']$' kreska db '_$' xyz db 45h ![]() |
|||
![]() |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2023, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.