rendered paste bodyINCLUDE 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