News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

MASM

Started by Vix, April 24, 2005, 06:53:53 PM

Previous topic - Next topic

Vix

Can anyone please tell me how I can print the value inside register ax I mean can I do it
I know that int 21h is used for it but if I use

mov ah, 02h
int 21h

it will print out value of registar dl
Can i transfer data from ax to dl


AeroASM

int 21h function 02h does not print out the value of dl. It prints out the ascii character whose ascii code is in dl.

Therefore you need to generate the ascii values for each hexadecimal digit. One hexadecimal digit = four bits: therefore

1. Take four bits
2. convert it to the correct hexadecimal digit (0-9,A-F)
3. Print it!
4. Take the next four bits
5. repeat 2-5

thomasantony

Or you can just add 30h to the value to get the decimal value and print it

Thomas :U
There are 10 types of people in the world. Those who understand binary and those who don't.


Programmer's Directory. Submit for free

AeroASM

Not if it is more than one decimal digit

guesehsaio

this is  my  stupid method......
it's can print eax...

PRINT_AX        PROC    NEAR
      PUSH    AX
      ADD     DL,30H
      CMP     DL,'9'
      JBE     OK
      ADD     DL,7
OK:             MOV     AH,2
      INT     21H
      POP     AX
      RET
PRINT_AX        ENDP
;***********************************************************
print_ax_1      proc near
         
      MOV     CL,4
      MOV     DL,AL
      SHR     DL,CL
      CALL    PRINT_AX
      MOV     DL,AL
     
      AND     DL,0FH
      CALL    PRINT_AX
      MOV     DL,AH
      SHR     DL,CL
      CALL    PRINT_AX
      MOV     DL,AH
 
      AND     DL,0FH
      CALL    PRINT_AX
      ret
print_ax_1      endp
;***************************************************************
print_ax_2     proc near
      MOV     CL,4
      MOV     DL,AH
      SHR     DL,CL
      CALL    PRINT_AX
      MOV     DL,AH
      AND     DL,0FH
      CALL    PRINT_AX
      MOV     DL,AL
      SHR     DL,CL
      CALL    PRINT_AX
      MOV     DL,AL
      AND     DL,0FH
      CALL    PRINT_AX
      ret
print_ax_2      endp

;**************************************************************
Swap_Eax proc near   
    ;push eax
    BSWAP eax             
    call print_ax_1   
    BSWAP eax
    ;pop eax                   
    call print_ax_2   
    ret
Swap_Eax endp

Vortex

PrintDec procedure by MichaelW:


.model small,stdcall

PrintDec PROTO :WORD

.stack
.code
start:
xor cx,cx ; set cx to 0
@@:
inc cx ; increment cx
push cx ; preserve cx as it's used by PrintDec
invoke PrintDec,cx
mov ah,2
mov dl,13
int 21h ; put CR+LF
mov ah,2
mov dl,10
int 21h
pop cx
cmp cx,10 ; Is cx equal to 10 ?
jne @b  ; If not jump back to process cx
mov ah,04Ch
int 21h

PrintDec PROC numb:WORD
mov ax,numb   
;
   ; Init divisor.
mov bx,10
   ; Zero digit counter.
mov cx,0
@@:
   ; Zero MSW of dividend.
mov dx,0
   ; Divide value by 10.
div bx
   ; Push remainder.
push dx
   ; Increment digit count.
inc cx
   ; Repeat if quotient > 0.
or ax,ax
jnz @B
@@:
   ; Pop digit off stack.
pop dx
   ; Convert to ascii.
add dl,30h
   ; Display.
mov ah,2
int 21h
   ; Repeat CX times.
loop @B
ret
PrintDec ENDP

END start