Parsi Coders
Windows Console Print - نسخه قابل چاپ

+- Parsi Coders (http://parsicoders.com)
+-- انجمن: Software Development Programming (http://parsicoders.com/forumdisplay.php?fid=37)
+--- انجمن: Assembly (http://parsicoders.com/forumdisplay.php?fid=38)
+--- موضوع: Windows Console Print (/showthread.php?tid=390)



Windows Console Print - Amin_Mansouri - 06-14-2011

نقل قول:Instructions: Uses the stdcall calling convention so you can call from C by declaring as 'extern _stdcall _consoleOutput(char *);'. In assembly push a pointer to a zero terminated message and call. No need to clean up the stack afterward.

کد:
.model small

.data
str1 db 10h dup(0)                ; will save filename in this
buff db 1h dup(0)                   ; buffer to save data
str2 db 10,13,'File Not Found $'         ; will print this in case file not found

.code
mov ax,@data
mov ds,ax

mov ah,62h                    ; reading psp contents
int 21h

mov es,bx

mov si,0080h                    ; 80h contains the lenght of command tail
mov al,es:[si]
mov cl,al
dec cl

mov si,0082h                    ; 82h starts the text of command tail
lea di,str1                    ; saving it in str1, in this case the filename
read:
mov al,es:[si]
mov [di],al
inc si
inc di
loop read

mov ah,3dh                    ; opening the file using 3dh of int 21h
lea dx,str1                    ; dx contain the filename in ASCIIZ format, i.e 0's at the end
int 21h
jnc mylabel                    ; there is carry generated if any error    

mov ah,09h                    ; printing str2 on error else skip
lea dx,str2
int 21h

mylabel:
mov bx,ax                    ; file handle of the open file is stored in AX, need to move it in BX to read the open the file with handle AX, better store AX somewhere
label1:
mov ah,3fh
mov cx,0001h
lea dx,buff                    ; reading data in buff of size 1
int 21h
cmp ax,0000h                    ; printing till ax=0000h, i.e end-of-file
jz end1                        ; will break and jump to end1 label on end of file

mov cx,0001h
lea si,buff                    ; printing data in buff
label2:
mov dl,[si]
mov ah,02h                    ; interrupt on print on screen
int 21h
inc si
loop label2
jmp label1

end1:
mov ah,4ch                    ; normal end of any assembly program
int 21h
end