Tin tức công nghệ - Thủ thuật lập trình
Lập trình hệ thống (một số code mẫu Assembly) - Phần 1
Toàn màn hìnhIn bài viết
- Nhập vào tên và in chuỗi 'XIN CHAO + tên' ra màn hình
DSEG SEGMENT
MSG1 DB 'NHAP VAO TEN CUA BAN : $'
MSG2 DB 10,13,'XIN CHAO $ !'
MAX DB 30
LEN DB ?
BUFF DB 30 DUP('$')
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG , DS: DSEG
BEGIN:
MOV AX ,DSEG
MOV DS,AX
MOV AH , 09H
LEA DX, MSG1
INT 21H
MOV AH, 0AH
LEA DX, MAX
INT 21H
MOV AH,02H
MOV DX,1500H
INT 10H
MOV AH,09H
LEA DX,MSG2
INT 21H
MOV AH,09H
LEA DX,BUFF
INT 21H
MOV AH,08H
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END BEGIN
- Nhập vào một chuỗi, xuất chuỗi đảo ngược ra màn hình
dseg segment
m1 db 'xuat chuoi tu A den Z: $'
m2 db 10,13,'xuat chuoi dao nguoc: $'
dseg ends
sseg segment
db 100 dup(?)
sseg ends
cseg segment
assume cs: cseg, ds:dseg, ss:sseg
start:
mov ax, dseg
mov ds,ax
xor ax,ax
xor cx,cx
mov ah ,09h
lea dx,m1
int 21h
mov dl, 'A'
mov cl, 26
xuat:
mov ah, 02h
int 21h
push ax
inc dl
loop xuat
mov ah, 09h
lea dx,m2
int 21h
xor cx, cx
mov cl, 26
xuatdaonguoc:
mov ah, 02h
pop dx
int 21h
loop xuatdaonguoc
exit:
mov ah, 08h
int 21h
mov ah, 4ch
int 21h
cseg ends
end start
- Nhập vào chuỗi ký tự thường, xuất ra chuỗi đã in hoa
DSEG SEGMENT
msg1 DB 'Hay nhap chuoi ky tu thuong: $'
msg2 DB 10, 13, 'Chuoi in hoa la: $'
DEM DW ?
DSEG ENDS
SSEG SEGMENT STACK 'STACK'
DW 256 DUP(?)
SSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG, SS: SSEG
start: MOV AX, DSEG
MOV DS, AX
MOV AH, 09h
LEA DX, msg1
INT 21h
XOR CX, CX
nhap: MOV AH, 01
INT 21h
CMP AL, 0Dh ; (hoac dung CMP AX,010Dh)
JZ inra
SUB AX,20H
PUSH AX
INC CX
JMP nhap
inra: MOV AH, 09h
LEA DX, msg2
INT 21h
MOV BX,1
MOV DEM,CX
intiep:
XOR DX,DX
MOV DX,0112H
ADD DX,DEM
MOV AH,02H
SUB DX,BX
INC BX
INT 10H
POP AX
MOV AH, 02H
MOV DL,AL
INT 21h
LOOP intiep
MOV AH, 08h
INT 21h
MOV AH, 4Ch
INT 21h
CSEG ENDS
END start
- Nhập vào một ký tự, in ra ký tự kề sau nó
DSEG SEGMENT
MSG1 DB 'NHAP VAO MOT KY TU : $'
MSG2 DB 10,13,'KY TU KE TIEP KY TU VUA NHAP LA : $'
SYM DB ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG , DS:DSEG
BEGIN:
MOV AX,DSEG
MOV DS,AX
MOV AH,09H
LEA DX,MSG1
INT 21H
MOV AH,01H
INT 21H
MOV SYM,AL
MOV AH,09H
LEA DX,MSG2
INT 21H
MOV DL,SYM
ADD DL,1
MOV AH,02H
INT 21H
MOV AH,08H
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END BEGIN
- Xuất một chuỗi từ A->Z và chuỗi đảo ngược từ Z->A
DSEG SEGMENT
MSG1 DB 'XUAT CHUOI TU A --> Z : $'
MSG2 DB 10,13,'XUAT CHUOI DAO NGUOC LA : $'
DSEG ENDS
SSEG SEGMENT STACK
DB 100 DUP(?)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
MOV AH,09H
LEA DX,MSG1
INT 21H
XOR DX,DX
MOV CX,26
MOV DL,'A'
XUAT1: MOV AH,02H
INT 21H
PUSH AX
INC DL
LOOP XUAT1
MOV AH,09H
LEA DX,MSG2
INT 21H
XOR CX,CX
MOV CX,26
XUAT2: POP AX
MOV DX,AX
MOV AH,02H
INT 21H
XOR DX,DX
MOV DX,AX
LOOP XUAT2
EXIT:MOV AH,08H
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
DSEG SEGMENT
MSG1 DB 'HOM NAY LA : $'
thu db 'SunMonTueWedThuFriSat $'
St_date db 20, 0, 20 dup(0)
ngay DB ?
thang DB ?
nam DW ?
DSEG ENDS
SSEG SEGMENT
DB 100 DUP (?)
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG , DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
LEA SI,St_date
MOV AH,09H
LEA DX,MSG1
INT 21H
MOV AH,2AH
INT 21H
;Vào:AH=2Ah
;Ra:AL=thu trong tun(0=C.nhat,6=T.bay)
;DL=ngày(1-31)
;DH=thang(1-12)
;CX=nam(1980-2099)
XOR AH,AH
MOV ngay,DL
MOV thang,DH
MOV nam,CX
MOV BL,3
MUL BL
MOV SI,AX
MOV CX,3
_THU:
MOV AH, 02H
mov DL, thu[SI]
int 21h
inc SI
loop _THU
MOV AH,02H
MOV DL,0
INT 21H
_NGAY:
MOV AL,ngay
XOR AH,AH
MOV BL,10
DIV BL
ADD AH,30H
ADD AL,30H
MOV BH,AH
MOV AH,02H
MOV DL,AL
INT 21H
MOV AH,02H
MOV DL,BH
INT 21H
MOV AH,02H
MOV DL,'-'
INT 21H
_THANG:
MOV AL,thang
XOR AH,AH
MOV BL,10
DIV BL
ADD AH,30H
ADD AL,30H
MOV BH,AH
MOV AH,02H
MOV DL,AL
INT 21H
MOV AH,02H
MOV DL,BH
INT 21H
MOV AH,02H
MOV DL,'-'
INT 21H
MOV AX,nam
MOV BX,10
XOR CX,CX
MOV CX,4
_NAM:
XOR DX,DX
DIV BX
PUSH DX
LOOP _NAM
XOR CX,CX
MOV CX,4
_XUATNAM:
POP DX
ADD DL,30H
MOV AH,02H
INT 21H
LOOP _XUATNAM
EXIT:
MOV AH,08H
INT 21H
CSEG ENDS
END START
DSEG SEGMENT
Time_Buf DB '00:00:00$'
DSEG ENDS
CSEG SEGMENT
ASSUME: CS:CSEG,DS:DSEG
START:MOV AX, DSEG
MOV DS, AX
MOV AH, 2Ch
INT 21h
;AH = 2Ch
;Ra: CH = gio
;CL = phut
;DH = giay
;DL = % giay
MOV AL, CH
MOV AH, 0
MOV DL, 10
DIV DL
ADD AL, 30h
ADD AH, 30h
MOV Time_Buf, AL
MOV Time_Buf+1, AH
MOV AL, CL
MOV AH, 0
MOV DL, 10
DIV DL
ADD AL, 30h
ADD AH, 30h
MOV Time_Buf+3, AL
MOV Time_Buf+4, AH
MOV AL, DH
MOV AH, 0
MOV DL, 10
DIV DL
OR AX, 3030h
MOV Time_Buf+6, AL
MOV Time_Buf+7, AH
mov ah,02h ;Di chuyen
mov dx,1545h;con tro toi
int 10h ;dong 12 (0c) cot 21 (15)
MOV AH, 9
LEA DX, Time_Buf
INT 21h
mov ah,08h
int 21h
MOV AH, 4Ch
INT 21h
CSEG ENDS
END START