thiet ke website

Một số bài tập và hướng dẫn lập trình hệ thống Assembly (Phần 1)

lập trình hệ thống assembly

Hôm nay mình xin chia sẻ với các bạn một vài bài tập lập trình hệ thống Assembly và code của nó. Chúc các bạn học tập tốt, nếu có thắc mắc các bạn có thể để lại bình luận để cùng mọi người trao đổi.

1. Nhập 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

2. 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

3. 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

4. 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

5. 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

6. 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

7. 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

Nếu có thắc mắc cứ thoải mái để lại bình luận phía dưới nhé!

Thiet ke logo

Bài viết liên quan

[Java cơ bản] Bài 57: Block code

[Java cơ bản] Bài 57: Block code

Hôm nay sẽ giới thiệu tới các bạn một khái niệm đó là Block code. Chúc các bạn học tốt.

[C++] SPOJ.COM – Problem Bonus – VOI 2011 Phần thưởng

[C++] SPOJ.COM – Problem Bonus – VOI 2011 Phần thưởng

Để bài: (Nguồn: SPOJ) Tuấn là người chiến thắng trong một cuộc thi “tìm hiểu kiến thức vũ trụ” và được nhận các phần thưởng do công ty XYZ tài trợ. Các phần thưởng được bố trí trên một bảng hình vuông nxn có dạng…

[Java cơ bản] Bài 3: Giới thiệu, cài đặt NetBeans và Eclipse

[Java cơ bản] Bài 3: Giới thiệu, cài đặt NetBeans và Eclipse

Video này sẽ hướng dẫn các bạn cách cài đặt NetBeans, Eclipse… sau đó giới thiệu những chức năng cơ bản của 2 ứng dụng này! Chúc các bạn học tập vui vẻ!

[Java cơ bản] Bài 15: Cấu trúc vòng lặp For

[Java cơ bản] Bài 15: Cấu trúc vòng lặp For

For là cấu trúc lệnh lặp, như khi muốn in ra 10 phần tử từ 0 đến 9 và khi đó ta sẽ viết ra 10 lệnh in ra màn hình như vậy thì sẽ rất bất tiện. Vậy ta sử dụng vòng lặp để…

Bình luận ()