[ASM] data do zmniennej tekstowej

0

Cześć! Jak napisać, aby odczytaną sekundę wpisać do zmiennej db xxx i wyświetlić na ekran??? [tazz]

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1