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