INCLUDE macros.asm STACK SEGMENT BYTE STACK DW 50 DUP(?) STACK ENDS DATA SEGMENT MESSAGE1 DB 0ah,0dh,'Dose tous arithmous:$' MESSAGE2 DB 0ah,0dh,'A= $' MESSAGE3 DB 0ah,0dh,'P= $' MESSAGE4 DB 0ah,0dh,'S= $' a DB 8 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK ;Arxikopoihsh deiktwn QUIT: EXIT; BEGIN: MOV AX,STACK ;Arxikopoihseis genika MOV SS,AX MOV AX,DATA MOV DS,AX MOV si,8 PRINT_STR MESSAGE1 ANAGNWSH: READ_CHAR CMP AL,51h ;An dothike Q teleiwnei to programma. je QUIT CMP AL,0Dh ;An dothike enter tha prepei na treksw to programma je EKTELESH1 ;alliws tha prepei na to valw sto table, afou dw oti einai arithmos CMP al,30h jb ANAGNWSH CMP al,39h jg ANAGNWSH ;wraia, arithmos PRINT_CHAR AL ;ektypwnw ton xaraktira MOV a[si],AL DEC si CMP si,0 ;ontws krataei max 8 JZ EKTELESH1 JMP ANAGNWSH EKTELESH1: mov bh,00h ;elpizw na to parei mov cx,09h push si sub cx,si mov si,01h mov bl,00h ;krataw athroisma PRINT_STR MESSAGE2 int 3 EKTELESH2: dec cx cmp cx,00h jz EKTELESH3 ;synthiki oti den exw allous arithmous, tha prepei na vgalw to athroisma mov al,a[si] inc si ;ayksanw gia to epomeno loop mov ah,01h and ah,al cmp ah,01h jz EKTELESH2 ;oxi artios ara pame gia ton epomeno add bl,al sub bl,'0' print_char al jmp EKTELESH2 EKTELESH3: ;edw tha prepei na vgalw to athroisma mov al,09H ;EKTYPWNW TO KENO print_char al xor ah,ah mov al,bl call printdec EKTELESH4: ;metrame perittous mov cx,0ah pop si sub cx,si ;twra to cl periexei to posous arithmous exw, me 1 epipleon mov si,00h mov bh,00h ;krataw athroisma PRINT_STR MESSAGE3 EKTELESH5: dec cx cmp cx,00h jz EKTELESH6 ;synthiki oti den exw allous arithmous, tha prepei na vgalw to athroisma mov al,a[si] inc si ;ayksanw gia to epomeno loop mov ah,01h and ah,al cmp ah,01h jnz EKTELESH5 ;oxi perittos ara pame gia ton epomeno add bh,al sub bh,'0' PRINT_CHAR al jmp EKTELESH5 EKTELESH6: ;edw tha prepei na vgalw to athroisma mov al,09H print_char al xor ah,ah mov al,bh call printdec print_str MESSAGE4 mov dx,0000h add dl,bh add dl,bl mov ax,dx call printdec jmp QUIT printdec proc push bx mov bl, 10 xor cx, cx nextdigit: inc cx div bl push ax xor ah, ah cmp al, 0 jnz nextdigit printdigits: pop ax add ah, '0' print_char ah loop printdigits pop bx ret printdec endp CODE ENDS END BEGIN