Tema: Pagelbekit mokantiems Asembleriu programint
Autorius: Papaja
Data: 2009-12-13 16:59:53
Sveiki, taip gavosi, kad kiek beskaiciau tutorialu ir pan. niekaip
nesuprantu kaip padaryt uzduoti... Uzduotis turi priimti 2 skaicius(po viena
arba per space abu uzrasyti tai tikrai nesvarbu) 1-masis skaicius turi buti
pakeistas i antrojo skaiciaus skaiciavimo systema...
Pvz: Ivedame 3 ir 2, reikia, kad gautume rezultata 11, ivedam 7 ir 4, tai
turetu buti 13...
Kolkas turiu programa, kurioje ivedi skaiciu ir gali pakeisti skaiciavimo
systema tik manuol budu, gal yra mokanciu programuoti kurie galetu padeti
paeditint sia programa :?


..model small
..stack 100h
..data
 ivedimo_msg  DB "Iveskite skaiciu: ","$"
 isvedimo_msg DB "Rezultatas: ","$"
 enteris      DB 13,10,"$"
 buff         DB 255
                   DB 0
                   DB 255 dup(0)
..code
 start:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Nurodom duomenu pradzia
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   MOV ax,@data
   MOV ds,ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Pagalbos simboliu ieskojimas argumente
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 MOV bx, 0081h
 ieskok:
 MOV ax, es:[bx]
 CMP al, 0Dh
 JE programa
 CMP ax, 3F2Fh
 JE pagalba
 INC bx
 JMP ieskok
 pagalba:
 MOV ah, 9
 INT 21h
 JMP endas


 programa:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Skaitom
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 MOV ah, 09h
 MOV dx, offset ivedimo_msg
 INT 21h
 XOR si,si
 XOR di,di
 XOR cx,cx
 XOR dx,dx
 MOV bx,10
 MOV ah, 0Ah
 MOV dx, offset buff
 INT 21h
 MOV dx, offset enteris
 MOV ah, 09h
 INT 21h
 MOV si, 1
 MOV al, buff[si]
  XOR ah, ah
   MOV di, ax
   INC si
   INC di
   INC di
 next:
  MOV al, buff[si]
   XOR ah, ah
   SUB al, '0'
   CMP al, 9
   JA endas
 INC si
 ADD ax, cx
 JC endas
 CMP si, di
 JE suma
 MUL bx
 CMP ax, cx
 JB endas
 MOV cx, ax
 CMP si, di
 JLE next
 suma:
 XOR si, si
 MOV cx, ax
 JC endas
 MOV ax,cx
 CALL astuntainis
 JMP endas
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Procedura astuntainis
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 astuntainis PROC
 PUSH ax
 PUSH cx
 PUSH dx
 MOV cx, 8    ;;;;;;;;;;;;;;;;;;;;;;;;;;; <- pakeitus skaiciu keicia i tokia
systema
 PUSH "$$"
 ciklas:
 MOV dx, 0
 DIV cx
 PUSH dx
 CMP ax, 0
 JNE ciklas
 MOV ah, 2
 spausdinimas:
 POP dx
 CMP dx, "$$"
 JE pabaiga
 ADD dl, '0'
 INT 21h
 JMP spausdinimas
 pabaiga:
 POP dx
 POP cx
 POP ax
 RET
 astuntainis ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Pabaiga
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 endas:
 MOV ah, 4ch
 MOV al, 0
 INT 21h
end start