ASM Snippets
unknown
assembly_x86
2 years ago
5.9 kB
18
Indexable
.model tiny
.486
.data
filen db "file123.txt", 0
handle dw ?
write db "sidk", 0ah, "ah4261"
rect macro strow, stcol, endrow, endcol, att, a, b
;starting row number in dx
;logic uses displays graphic row by row
mov dx,strow
;starting column in cx
b: mov cx,stcol
;display one pixel
a: mov al,att
mov ah,0ch
int 10h
;increment pixel column number and check whether end column reached
;if no go to the next column
inc cx
cmp cx,endrow
jnz a
;if all columns in a row display has been completed then
;increment row number - check if last row is reached
;if reached display completed
;if not go on to stcolumn in the next row and display
inc dx
cmp dx,endrow
jnz b
endm
.code
.startup
mov ah, 3ch
lea dx, filen
mov cl, 20h
int 21h
mov handle, ax
;create a file with file name in filen
;handle given in handle
mov ah, 3dh
mov al, 2h
lea dx, filen
int 21h
mov handle, ax
;open existing file
mov ah, 40h
mov bx, handle
mov cx, 11
lea dx, write
int 21h
;write to a file with handle handle
;number of bytes to write in cx
;dx will have the address of what you want to write
;ax contains bytes written
mov ah, 42h
mov al, 0
mov bx, handle
mov cx, 0
mov dx, 0
int 21h
;move file pointer
;al = 0 relative to beginning
;al = 1 relative to current
;al = 2 relative to end
mov ah, 3fh
mov bx, handle
mov cx, 7
lea dx, buf
int 21h
;this will read the file to address pointed by dx
;cx = number of bytes to read
;ds:dx = memory buffer address
;this is writing to buf, make sure file pointer is not at the end of the file
mov ah, 3eh
mov bx, handle
int 21h
;close a file with handle in bx
;this will take input of one character into the al register
mov ah, 01h ;al = 08h for input without echo
int 21h
;this will input string
;data has to be in the following format
;max1 db xx this will store the max number of chars user can type (max 255)
;act1 db ? this will be actual number of chars user has typed including enter
;inp1 db 32 dup (?) reserve 32 locations for input
lea dx, max1
mov ah, 0ah
int 21h
;output a character
mov dl, 'a'
mov ah, 02h
int 21h
;output a string (str1 has to be '$' terminated)
lea dx, str1
mov ah, 09h
int 21h
;get display mode
mov ah, 0fh
int 10h
;output:
;al = current video mode
;ah = number of character columns
;bh = page number
;set display mode
mov ah, 00h
mov al, 00h ;put display mode in al
int 10h
;make sure to go back to original display mode in the end
;00h - text mode. 40x25. 16 colours. 8 pages. this is column x row
;03h - text mode. 80x25. 16 colours. 8 pages. this is column x row
;12h - graphical mode. 80x25. 256 colours. 720x400 pixels. 1 page.
;even though it's 8 pages, we can only use the first page
;use graphics mode to display patterns
;get cursor position and size
mov ah, 03h
mov bh, 0 ;this is page number, usually 0
int 10h
;output:
;DH = row.
;DL = column.
;CH = cursor start line.
;CL = cursor bottom line.
;set cursor position
mov ah, 02h
mov dh, 40 ;row
mov dl, 12 ;column
mov bh, 0 ;this is page unmber, usually 0
int 10h
;set cursor size
mov ah, 01h
mov ch, ;cursor start line (bits 0-4) and options (bits 5-7).
mov cl, ;bottom cursor line (bits 0-4).
int 10h
;read character at cursor position
mov ah, 08h
mov bh, 0 ;page number
int 10h
;output:
;ah = attribute
;al = character
;The attribute byte is used to specify the foreground and background of the character displayed on the screen.
;Bits 2-1-0 represent the foreground colour
;Bit 3 represents the intensity of foreground colour (0-low , 1- high intensity)
;Bits 6-5-4 represent the background colour
;Bit 7 is used for blinking text if set to 1
;000 -black (gray)
;001 -blue (bright blue)
;010 -green (bright green)
;011 -cyan (bright cyan)
;100 -red (bright red)
;101 -magenta (bright magenta)
;110 -brown (yellow)
;111 -white (bright white)
;write a character at cursor position
mov ah, 09h
mov al, ;character to display, this can be space if you just want to color the display ascii - 20h
mov bh, ;page number
mov bl, ;attribute
mov cx, ;number of times to write the character, moving 13*80 (in disp mode 3) will fill upper 13 rows (0-12)
int 10h
;make sure to take user input without echo so to continue with our colors else os goes back to default font
;mov ah, 07h
;int 21h
;data is stored in al
;fill a pixel
mov ah, 0ch
mov al, ;color
mov cx, ;column
mov dx, ;row
;this will print all the text inside buf
mov cnt, 765
lea si, buf
x2: mov al, [si]
inc si
mov ah, 09h
mov bh, 0;page number
mov bl, attr;attribute
mov cx, 1;number of times to write the character, moving 13*80 (in disp mode 3) will fill upper 13 rows (0-12)
int 10h
mov ah, 02h
mov dh, row ;row
mov dl, col ;column
mov bh, 0 ;this is page unmber, usually 0
int 10h
inc col
cmp col, 79
je x3
dec cnt
jnz x2
jmp x4
x3: mov col, 0
inc row
cmp row, 24
je x4
dec cnt
jnz x2
x4:
;to hold display, system retains programmed display mode
;this has to be before .exit
mov ah, 07h
x1: int 21h
cmp al, '%'
jnz x1
.exit
;this will display the count from a word in memory called cocnt
display proc near
mov ax,cocnt
mov cl,64h
div cl
mov bh,ah
add al,30h
mov dl,al
mov ah,02
int 21h
mov cl,0ah
mov ax,0
mov al,bh
div cl
add al,30h
mov dl,al
mov bh,ah
mov ah,02
int 21h
add bh,30h
mov dl,bh
mov ah,02
int 21h
ret
display endp
endEditor is loading...
Leave a Comment