Cześć! Jak napisać, aby odczytaną sekundę wpisać do zmiennej db xxx i wyświetlić na ekran??? [tazz]
0
0
Błeee ;-( , ja sie tak napisiałem, a Marooned wszystko popsiuł. łeeee. Mimo wszystko masz tu kod na przeliczanie we wszystkich systemach od 2 do trzydziestu paru. Kod jest dla modelu large, więc uważaj (sam nie pomyślałem i po zmianie na tiny zresetowało mi kompa). Procedurki są tak napisane, że mozna je swobodnie uzyć bez przeróbek w każdym programie dla modelu large. Linijki z 'ARG' możesz wyrzucić, bo odwołania są bezpośrednio poprzez ss:[bp+...], a właściwie ss:[sp+...], zresztą po push i tak by źle działały. ;)
.model large
.stack 100h
.data
copyright db "2003 (c) no-body :]",13,10,10
db "You have to press <esc> to terminate",10
crlf db 13,10,'$'
buffer db 17 dup (0) ; max 16 cyfr (binarnie) + '$'
.code
press_esc PROC
@1:
xor ah,ah
int 16h ; wait for keyboard
xor ax,011bh ; esc pressed ?
jnz @1 ; repeat until esc
ret
press_esc ENDP
i2a PROC
;ARG bufseg:WORD,bufofs:WORD,value:WORD,base:WORD
push ds
push bp
mov bp,sp
mov ax,ss:[bp+14] ;bufseg
mov ds,ax
mov bx,ss:[bp+12] ;bufofs
mov cx,ss:[bp+8] ;base
mov ax,ss:[bp+10] ;value
@2: ;dlugosc ciagu
xor dx,dx
div cx
inc bx
test ax,ax ;cmp ax,0000h
jnz @2
mov byte ptr ds:[bx],'$'
mov ax,ss:[bp+10] ;value
@3: ;glowna petla
xor dx,dx
div cx
mov di,dx
mov dh,byte ptr cs:[digit+di]
dec bx
mov byte ptr ds:[bx],dh
test ax,ax
jnz @3
pop bp
pop ds
ret
digit db "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
i2a ENDP
pisz PROC
;ARG txtseg:WORD,txtofs:WORD
push ds
push bp
mov bp,sp
mov ax,ss:[bp+10] ;txtseg
mov ds,ax
mov dx,ss:[bp+8] ;txtofs
mov ah,09h
int 21h
pop bp
pop ds
ret
pisz ENDP
main:
mov ax,@data
mov ds,ax
push ax ;txtseg na stos
mov ax,offset copyright
push ax ;txtofs na stos
call pisz
pop ax ;zdiac ze stosu,
pop ax ;co wrzucilem
push ds ;bufseg
mov ax,offset buffer
push ax ;bufofs
mov ax,1234h ;value
push ax
mov ax,10h ;base 10h=16->hex
push ax
call i2a
pop ax
pop ax
pop ax
pop ax
push ds
mov ax,offset buffer
push ax
call pisz
pop ax
pop ax
mov dx,offset crlf
mov ah,09h
int 21h ;next line please !
push ds ;bufseg
mov ax,offset buffer
push ax ;bufofs
mov ax,1234h ;value
push ax
mov ax,02h ;base 2h=2->bin
push ax
call i2a
pop ax
pop ax
pop ax
pop ax
push ds
mov ax,offset buffer
push ax
call pisz
pop ax
pop ax
mov dx,offset crlf
mov ah,09h
int 21h ;next line please !
call press_esc
mov ax,4c00h ;return code 0
int 21h ;bye
END main
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.