Skip to content

Instantly share code, notes, and snippets.

@frgtn frgtn/gist:647840

Created Oct 26, 2010
Embed
What would you like to do?
pirmas uždavinys iš Radavičiaus laiško
.model small
.stack 100h
buff_size equ 254
.data
enter_data db "Enter text:", 10, 13, '$'
newline db 10, 13, '$'
buffsize1 db buff_size
read1 db ?
buff1 db buff_size dup (?)
buff2 db buff_size+1 dup (?) ; paliekam vietos $ simboliui
.code
start:
mov ax, @data
mov ds, ax
mov dx, offset enter_data
mov ah, 09h
int 21h
mov dx, offset buffsize1
mov ah, 0Ah
int 21h
mov ah, 09h
mov dx, offset newline
int 21h
xor ax, ax
xor dx, dx
mov si, offset buff1
mov cl, byte ptr read1
mov di, offset buff2
ciklas:
cmp byte ptr [ds:si], '0'
jb ne_skaitmuo
cmp byte ptr [ds:si], '9'
ja ne_skaitmuo
skaitmuo: ; turim skaitmeni
mov dl, [ds:si] ; kopijuojam ji i registra
sub dl, '0' ; atimame nulio reiksme ascii lenteleje kad gautume skaiciu
mov dh, 0 ; pridedinesim vieno baito registra prie dvieju baitu registro, tad irasome i vyresniji baita nuli
add ax, dx ; pridedam musu skaitmeni prie bendros skaitmenu sumos
mov dh, 1 ; pasizymime, kad praeitas simbolis buvo skaitmuo. Prireiks kai noresim spausdinti
jmp testi
ne_skaitmuo:
cmp dh, 1 ; patikriname, ar paskutinis simbolis buvo skaicius
jne kopijuoti ; jei ne - tiesiog kopijuojam simboli nespausdindavim skaiciaus
call print_int ; kvieciam skaiciaus spausdinimo funkcija
xor ax, ax
xor dx, dx
kopijuoti:
mov ch, [ds:si]
mov [ds:di], ch
inc di
testi:
inc si
dec cl
cmp cl, 0
jne ciklas
; patikrinam, ar paskutinis simbolis buvo skaicius, jei taip - spausdiname suma
cmp dh, 1
jne spausdinimas
call print_int
spausdinimas:
mov byte ptr [ds:di], '$'
mov dx, offset buff2
mov ah, 09h
int 21h
mov ax, 4c00h
int 21h
proc print_int ; metodas paimtas is trecio pavyzdzio ir modifikuotas, kad rasytu i atminti, o ne i konsole
; PASTABA funkcija NERA reenterabili!
push ax
push cx
push dx
mov cx, 10
push "$$"
division:
mov dx, 0
div cx
push dx
cmp ax, 0
ja division
mov ah, 2
print:
pop dx
cmp dx, "$$"
je exit
add dl, '0'
mov [ds:di], dl
inc di
jmp print
exit:
pop dx
pop cx
pop ax
ret
print_int endp
end start
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.