asm

;-------------------------------

; MACRO HIEN MOT XAU KY TU |

; KET THUC BANG '$' RA MAN HINH |

;-------------------------------

HienString MACRO xau

push AX DX

mov DX,offset xau

mov AH,9

int 21h

pop DX AX

ENDM

;--------------------

; MACRO XOA MAN HINH |

;--------------------

CLRSCR MACRO

push AX

mov AH,0fh

int 10h

mov AH,0

int 10h

pop AX

ENDM

;---------------------------------

; NHAN MOT SO NGUYEN TU BAN PHIM |

; Ket thuc so bang ENTER (0dh) |

; So nhan duoc nam trong AX |

; (khong duoc danh sai va sua) |

;---------------------------------

VAO_SO_N PROC

push BX CX DX SI

mov BX,10 ; Mot so hang nhan

xor CX,CX ; Phan so da vao truoc (luc dau bang 0)

mov SI,CX ; Co dau cua so (luc dau coi nhu so duong)

VSN1:

mov AH,1 ; Cho 1 ky tu tu ban phim

int 21h

cmp AL,0dh ; Ky tu vua vao la phim Enter

je VSN3

cmp AL,'-' ; Ky tu vua vao la dai '-'

jne VSN2 ; Khong phai dau '-' thi nhay

inc SI ; con khong thi co dau len 1

jmp VSN1

VSN2:

sub AL,30h ; Chuyen ky tu vua vao tu ma ASCII sang dang so

xor AH,AH ; AH=0 (AX la so vua vao)

xchg AX,CX ; Doi cheo so vua vao va phan so da vao truoc

mul BX ; Nhan phan so da vao truoc voi 10

add CX,AX ; Cong so vua vao voi phan so da vao sau khi nhan 10

jmp VSN1

VSN3:

and SI,SI ; Dung co ZF (Neu SI#0 thi so vao la am)

jz VSN4 ; So vua vao la duong thi nhay

neg CX ; Bu 2 gia tri vua vao de duoc so am

VSN4:

mov AX,CX

pop SI DX CX BX

ret

VAO_SO_N ENDP

;----------------------------

; HIEN NOI DUNG THANH GHI AX |

; RA MAN HINH DANG CO SO 10 |

;----------------------------

HIEN_SO_N PROC

push AX BX CX DX

mov BX,10 ; BX chua so chia la 10

xor CX,CX ; So lan cat vao stack (luc dau = 0)

and AX,AX ; Dung co dau SF

jns HSN1 ; Neu so can hien la duong thi nhay

push AX ; con khong thi cat AX vao stack

mov AL,'-' ; Hien dau '-' ra man hinh

mov AH,0eh

int 10h

pop AX ; Hoi phuc lai so can hien tu stack vao AX

neg AX ; Bu 2 de lay gia tri tuyet doi

HSN1:

xor DX,DX ; DX=0

div BX ; DX:AX chia cho BX (10)

add DX,30h ; Chuyen so du tu dang so ra dang ASCII

push DX ; Cat vao stack

inc CX ; Tang so lan cat vao stack len 1

and AX,AX ; Dung co ZF (lieu thuong = 0)

jnz HSN1 ; Thuong # 0 thi nhay den tiep tuc qua trinh chia

HSN2: ; Vong lap lay cac gia tri co trong stack hien

pop AX

mov AH,0eh ; Chuc nang hien 1 ky tu dang ASCII o AL ra man hinh

int 10h

loop HSN2

pop DX CX BX AX

ret

HIEN_SO_N ENDP

;----------------------------

; Chuong trinh con nhan |

; ten tep vao tu ban phim |

; Yeu cau : dx=offset buf |

; Phai khai bao trong data : |

; buff db 50 |

; db ? |

; file_name db 50 dup(?) |

;----------------------------

GET_FILE_NAME PROC

push ax bx cx dx

mov ah,0ah ; Chuc nang nhan 1 xau tu

int 21h ; ban phim va de vao buff

mov bx,dx ; bx tro den dau buf

inc bx ; bx tro den byte chua so luong ky tu da vao

mov cl,[bx] ; cl=so luong ky tu thuc te da vao

xor ch,ch ; ch=0 de cx=cl

inc bx ; bx tro den byte dau tien chua ky tu da vao

add bx,cx ; bx tro den byte chua 0dh (Enter)

mov [bx],ch ; Cho byte do bang \0

pop dx cx bx ax

ret

GET_FILE_NAME ENDP

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: #thu#vien