Trở về
Tham gia nhóm m Autoit đ đưc hưng dn và gii đáp trc tiếp : http://fb.com/groups/autoitscript
Tin tức công nghệ  -  Thủ thuật lập trình

Saturday, November 16, 2013

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

  • Xuất ra ngày, tháng, năm

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

  • Xuất ra giờ hệ thống

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