BÀI TẬP MÔN LẬP TRÌNH HỢP NGỮ CÓ ĐÁP ÁN

Contents

Bài 1: Viết chương trình hiện ra câu “Xin chào Assembly!”

.MODEL small
.STACK 100h
.DATA
Message db 'Xin chào Assembly!', 0
.CODE
ProgramStart:
    Mov AX, @DATA
    Mov DS, AX
    Mov DX, OFFSET Message 
    Mov AH, 9
    Int 21h

    Mov AH, 4Ch
    Int 21h

END ProgramStart

Bài 2: Viết chương trình hiện ra hai câu “Chào mừng bạn đến với Assembly” và “Lập trình thật dễ!” mỗi câu trên một dòng

.MODEL small
.STACK 100h
.DATA
Tbao1 db "Chào mừng bạn đến với Assembly$"
Tbao2 db 0DH, 0AH, "Lập trình thật dễ!$"
.CODE
ProgramStart:
    Mov AX, @DATA
    Mov DS, AX

    ; Xuất thông báo 1
    Mov AH, 9
    Lea DX, Tbao1
    Int 21h

    ; Xuất thông báo 2
    Mov AH, 9
    Lea DX, Tbao2
    Int 21h

    Mov AH, 4Ch
    Int 21h

END ProgramStart

Bài 3: Viết chương trình yêu cầu nhập một ký tự và xuất ra màn hình ký tự vừa nhập

.model small stack
.data
TBao1 db "Hãy nhập một ký tự: $"
TBao2 db 0DH, 0AH, "Ký tự đã nhập: $"
KyTu db ?
.code
ProgramStart:
    Mov ax, @data
    Mov ds, ax

    ; Nhắc nhập
    Lea dx, TBao1
    Mov ah, 9
    Int 21h

    ; Nhập 1 ký tự
    Mov ah, 1
    Int 21h
    Mov KyTu, al

    ; Xuất ký tự đã nhập
    Lea dx, TBao2
    Mov ah, 9
    Int 21h

    ; Hiển thị ký tự
    Mov ah, 2
    Mov dl, KyTu
    Int 21h

    ; Kết thúc chương trình
    Mov ah, 4Ch
    Int 21h
end ProgramStart

Bài 4: Viết chương trình nhập vào một ký tự Xuất ra màn hình ký tự đứng trước và ký tự đứng sau

.model small stack
.code
ProgramStart:
    Mov ax, @data
    Mov ds, ax

    ; Nhắc nhập
    Lea dx, TBao1
    Mov ah, 9
    Int 21h

    ; Nhập 1 ký tự
    Mov ah, 1
    Int 21h
    Mov KyTu, al

    ; Xuất thông báo ký tự đã nhập
    lea dx, TBao2
    mov ah, 9
    int 21h

    ; Xuất ký tự trước ký tự đã nhập
    mov ah, 2
    mov dl, KyTu
    dec dl
    int 21h

    ; Xuất ký tự sau ký tự đã nhập
    lea dx, TBao3
    mov ah, 9
    int 21h
    mov ah, 2
    mov dl, KyTu
    inc dl
    int 21h

    mov ah, 4Ch
    int 21h
end ProgramStart

Bài 5: Viết chương nhập vào một ký tự Chuyển ký tự đó sang ký tự hoa

.MODEL SMALL STACK 100h DATA
Msg1 DB 'Nhập vào ký tự thường: $'
Msg2 DB 0Dh, 0Ah, 'Chuyển sang ký tự hoa là: ' Char DB ?,'$'
.CODE
Main PROC
    MOV AX, @DATA
    MOV DS, AX

    ; In ra thông báo 1
    LEA DX, Msg1
    MOV AH, 9
    INT 21h

    ; Nhập vào 1 ký tự thường và đổi thành ký tự hoa
    MOV AH, 1
    INT 21h
    ; Đọc 1 ký tự thường và lưu vào AL
    SUB AL, 20h
    ; Đổi thành ký tự hoa
    MOV Char, AL
    ; Hiển thị ký tự hoa
    LEA DX, Msg2
    MOV AH, 9
    INT 21h

    ; Kết thúc chương trình
    MOV AH, 4Ch
    INT 21h
Main ENDP

Bài 6: Chuyển đổi ký tự hoa thành ký tự thường

.MODEL SMALL STACK 100h DATA
Msg1 DB 'Nhập vào ký tự hoa: $'
Msg2 DB 0Dh, 0Ah, 'Chuyển sang ký tự thường là: ' Char DB ?,'$'
.CODE
Main PROC
    MOV AX, @DATA
    MOV DS, AX

    ; In ra thông báo 1
    LEA DX, Msg1
    MOV AH, 9
    INT 21h

    ; Nhập vào 1 ký tự hoa và đổi thành ký tự thường
    MOV AH, 1
    INT 21h
    ; Đọc 1 ký tự hoa và lưu vào AL
    ADD AL, 20h
    ; Đổi thành ký tự thường
    MOV Char, AL
    ; Hiển thị ký tự thường
    LEA DX, Msg2
    MOV AH, 9
    INT 21h

    ; Kết thúc chương trình
    MOV AH, 4Ch
    INT 21h
Main ENDP

Bài 7: Viết chương trình nhập vào một chuỗi In ra màn hình chuỗi thường, chuỗi in hoa. Dùng chương trình con

.MODEL small STACK
.DATA
tb1 DB 'Nhập vào một chuỗi: $'
tb2 DB 10,13,'Đổi thành chuỗi thường: $'
tb3 DB 10,13,'Đổi thành chuỗi hoa: $'
s DB 100,?,101 dup('$')

.CODE
BEGIN:
    MOV AX, @DATA
    MOV DS, AX

    ; Xuất chuỗi tb1
    MOV AH, 9
    LEA DX, tb1
    INT 21h

    ; Nhập chuỗi s
    MOV AH, 0Ah
    LEA DX, s
    INT 21h

    ; Xuất chuỗi tb2
    MOV AH, 9
    LEA DX, tb2
    INT 21h

    ; Gọi chương trình con in chuỗi thường
    CALL InChuoiThuong

    ; Xuất chuỗi tb3
    MOV AH, 9
    LEA DX, tb3
    INT 21h

    ; Gọi chương trình con in chuỗi hoa
    CALL InChuoiHoa

    MOV AH, 4Ch
    INT 21h
BEGIN ENDP

;**************************************
; Doi thanh chuoi ky tu thuong
InChuoiThuong PROC
    LEA SI, s+1
    XOR CX, CX
    MOV CL, [SI]
    INC SI

LapThuong:
    MOV AH, 02h
    MOV DL, [SI]
    CMP DL, 'A'
    JB LT1
    CMP DL, 'Z'
    JA LT1
    ADD DL, 32

LT1:
    INC SI
    LOOP LapThuong
    RET
InChuoiThuong ENDP

; Doi thanh chuoi ky tu hoa
InChuoiHoa PROC
    LEA SI, s+1
    XOR CX, CX
    MOV CL, [SI]
    INC SI

LapHoa:
    MOV AH, 02h
    MOV DL, [SI]
    CMP DL, 'a'
    JB LH1
    CMP DL, 'z'
    JA LH1
    SUB DL, 32

LH1:
    INC SI
    INT 21h
    LOOP LapHoa
    RET
InChuoiHoa ENDP

END BEGIN

Bài 8: Viết chương trình nhập vào một chuỗi Đếm chiều dài của chuỗi nhập vào

.MODEL tiny STACK
.CODE
BEGIN:
    MOV AX, @DATA
    MOV DS,AX

    ; Xuất chuỗi tb1
    MOV AH, 9
    LEA DX, tb1
    INT 21h

    ; Nhập chuỗi s
    MOV AH, 0Ah
    LEA DX, s
    INT 21h

    ; Xuất chuỗi tb2
    MOV AH, 9
    LEA DX, tb2
    INT 21h

    ; Tính chiều dài chuỗi
    XOR AX, AX
    MOV AL, s+1 ; Chuyển chiều dài chuỗi vào ax
    MOV CX, 0 ; Khởi tạo biến đếm
    MOV BX, 10
LapDem1:
    MOV DX, 0
    DIV BX
    PUSH DX
    INC CX
    CMP AX, 0

    MOV AH, 2
LapDem2:
    POP DX
    OR DL, '0' ; Chuyển chữ số -> số
    INT 21H
    LOOP LapDem2

    MOV AH, 4Ch
    INT 21H
END BEGIN

Bài 9: Viết chương trình nhập vào một chuỗi In ra màn hình chuỗi thường, chuỗi in hoa. Dùng chương trình con.

.MODEL small STACK
.CODE
BEGIN:
    MOV AX, @DATA
    MOV DS, AX

    ; Xuất chuỗi tb1
    MOV AH, 9
    LEA DX, tb1
    INT 21h

    ; Nhập chuỗi s
    MOV AH, 0Ah
    LEA DX, s
    INT 21h

    ; Xuất chuỗi tb2
    MOV AH, 9
    LEA DX, tb2
    INT 21h

    ; Gọi chương trình con in chuỗi thường
    CALL InChuoiThuong

    ; Xuất chuỗi tb3
    MOV AH, 9
    LEA DX, tb3
    INT 21h

    ; Gọi chương trình con in chuỗi hoa
    CALL InChuoiHoa

    MOV AH, 4Ch
    INT 21h
BEGIN ENDP

;**************************************
; Doi thanh chuoi ky tu thuong
InChuoiThuong PROC
    LEA SI, s+1
    XOR CX, CX
    MOV CL, [SI]
    INC SI

LapThuong:
    MOV AH, 02h
    MOV DL, [SI]
    CMP DL, 'A'
    JB LT1
    CMP DL, 'Z'
    JA LT1
    ADD DL, 32

LT1:
    INC SI
    LOOP LapThuong
    RET
InChuoiThuong ENDP

; Doi thanh chuoi ky tu hoa
InChuoiHoa PROC
    LEA SI, s+1
    XOR CX, CX
    MOV CL, [SI]
    INC SI

LapHoa:
    MOV AH, 02h
    MOV DL, [SI]
    CMP DL, 'a'
    JB LH1
    CMP DL, 'z'
    JA LH1
    SUB DL, 32

LH1:
    INC SI
    INT 21h
    LOOP LapHoa
    RET
InChuoiHoa ENDP

END BEGIN

Bài 10: Viết chương trình nhập vào một chuỗi Đếm số lượng phần tử trong chuỗi

.MODEL small STACK
.DATA
tb2 DB 10, 13, 'Tổng chiều dài của chuỗi: $'
s DB 100 DUP('$')
.CODE
BEGIN:
    MOV AX, @DATA
    MOV DS, AX

    ; Xuất chuỗi tb1
    MOV AH, 9
    LEA DX, tb1
    INT 21h

    ; Nhập chuỗi s
    MOV AH, 0Ah
    LEA DX, s
    INT 21h

    ; Xuất chuỗi tb2
    MOV AH, 9
    LEA DX, tb2
    INT 21h

    ; Tính chiều dài của chuỗi
    XOR AX, AX
    MOV AL, s+1 ; Chuyển chiều dài của chuỗi vào ax
    LEA DX, s+2 ; Chuyển địa chỉ offset của chuỗi vào dx
    INC AX
    INC AX
    MOV CX, 0 ; Khởi tạo biến đếm

LapDem:
    MOV AH, 9
    MOV DL, [DX]
    INT 21h
    INC DX
    LOOP LapDem

    MOV AH, 4Ch
    INT 21H

END BEGIN

Bài 1: Viết chương trình hiện ra câu “Xin chào Assembly!”

.MODEL small
.STACK 100h
.DATA
Message db 'Xin chào Assembly!', 0
.CODE
ProgramStart:
    Mov AX, @DATA
    Mov DS, AX
    Mov DX, OFFSET Message 
    Mov AH, 9
    Int 21h
    Mov AH, 4Ch
    Int 21h
END ProgramStart

Bài 2: Viết chương trình hiện ra hai câu “Chào mừng bạn đến với Assembly” và “Lập trình thật dễ!” mỗi câu trên một dòng

.MODEL small
.STACK 100h
.DATA
Message1 db 'Chào mừng bạn đến với Assembly!', 0
Message2 db 'Lập trình thật dễ!', 0
.CODE
ProgramStart:
    Mov AX, @DATA
    Mov DS, AX

    ; Xuất thông báo 1
    Mov AH, 9
    Mov DX, OFFSET Message1
    Int 21h

    ; Xuất thông báo 2
    Mov AH, 9
    Mov DX, OFFSET Message2
    Int 21h

    Mov AH, 4Ch
    Int 21h

END ProgramStart

Bài 3: Viết chương trình yêu cầu nhập một ký tự và xuất ra màn hình ký tự vừa nhập

.model small stack
.data
TBao1 db "Nhập một ký tự: $"
TBao2 db "Ký tự đã nhập: $"
KyTu db ?
.code
ProgramStart:
    Mov ax, @data
    Mov ds, ax

    ; Nhắc nhập
    Lea dx, TBao1
    Mov ah, 9
    Int 21h

    ; Nhập ký tự
    Mov ah, 1
    Int 21h
    Mov KyTu, al

    ; Xuất ký tự
    Lea dx, TBao2
    Mov ah, 9
    Int 21h

    ; Hiển thị ký tự đã nhập
    Mov ah, 2
    Mov dl, KyTu
    Int 21h

    ; Kết thúc chương trình
    Mov ah, 4Ch
    Int 21h
end ProgramStart

Bài 4: Viết chương trình nhập vào một ký tự Xuất ra màn hình ký tự đứng trước và ký tự đứng sau

.model small stack
.code
ProgramStart:
    Mov ax,@data
    Mov ds,ax

    ; xuất thông báo
    Lea dx,TBao1
    Mov ah,9
    Int 21h

    ; nhập ký tự
    Mov ah,1
    Int 21h
    Mov bl,al

    ; xuất thông báo
    Lea dx,TBao2
    Mov ah,9
    Int 21h

    ; xuất ký tự đứng trước
    Mov ah,2
    Mov dl,bl
    Dec dl
    Int 21h

    ; xuất ký tự đứng sau
    Lea dx,TBao3
    Mov ah,9
    Int 21h

    ; xuất ký tự đứng sau
    Mov ah,2
    Mov dl,bl
    Inc dl
    Int 21h

    ; kết thúc chương trình
    Mov ah,4Ch
    Int 21h
end ProgramStart

Bài 5: Viết chương nhập vào một ký tự Chuyển ký tự đó sang ký tự hoa

.MODEL SMALL STACK 100h DATA
Msg1 DB 'Nhập ký tự thường: $'
Msg2 DB 0Dh,0Ah,'Chuyển sang ký tự hoa là: ' Char DB ?,'$'
.CODE Main PROC
MOV AX,@DATA MOV DS,AX
; In ra thông báo
LEA DX,Msg1 MOV AH,9 INT 21h
; Nhập ký tự
MOV AH,1 INT 21h
; Đọc ký tự và lưu vào AL
SUB AL,32 ; Chuyển ký tự sang ký tự hoa
MOV Char,AL ; Lưu ký tự đã chuyển sang biến Char
; In ra ký tự hoa
LEA DX,Msg2 MOV AH,9 INT 21h
MOV AH,2 MOV DL,Char INT 21h
; Kết thúc chương trình
MOV AH,4Ch INT 21h Main ENDP End Main

Bài 6: Chuyển đổi ký tự hoa thành ký tự thường

.MODEL SMALL STACK 100h DATA
Msg1 DB 'Nhập ký tự hoa: $'
Msg2 DB 0Dh,0Ah,'Chuyển sang ký tự thường là: ' Char DB ?,'$'
.CODE Main PROC
MOV AX,@DATA MOV DS,AX
; In ra thông báo
LEA DX,Msg1 MOV AH,9 INT 21h
; Nhập ký tự
MOV AH,1 INT 21h
; Đọc ký tự và lưu vào AL
ADD AL,32 ; Chuyển ký tự sang ký tự thường
MOV Char,AL ; Lưu ký tự đã chuyển sang biến Char
; In ra ký tự thường
LEA DX,Msg2 MOV AH,9 INT 21h
MOV AH,2 MOV DL,Char INT 21h
; Kết thúc chương trình
MOV AH,4Ch INT 21h Main ENDP End Main

Bài 7: Viết chương trình nhập vào một chuỗi In ra màn hình chuỗi thường, chuỗi in hoa. Dùng chương trình con.

.MODEL small STACK 100h DATA
.DATA
tb1 DB 'Nhập vào một chuỗi: $'
tb2 DB 10,13,'Đổi thành chuỗi thường: $'
tb3 DB 10,13,'Đổi thành chuỗi hoa: $'
s DB 100,?,101 dup('$')
.CODE
BEGIN:
    MOV AX, @DATA
    MOV DS, AX

    ; Xuất chuỗi tb1
    MOV AH, 9
    LEA DX, tb1
    INT 21h

    ; Nhập chuỗi s
    MOV AH, 0Ah
    LEA DX, s
    INT 21h

    ; Xuất chuỗi tb2
    MOV AH, 9
    LEA DX, tb2
    INT 21h

    ; Gọi chương trình con in chuỗi thường
    CALL InChuoiThuong

    ; Xuất chuỗi tb3
    MOV AH, 9
    LEA DX, tb3
    INT 21h

    ; Gọi chương trình con in chuỗi hoa
    CALL InChuoiHoa

    MOV AH, 4Ch
    INT 21h

END BEGIN

;**************************************
; Doi thanh chuoi ky tu thuong
InChuoiThuong PROC
    LEA SI, s+1
    XOR CX, CX
    MOV CL, [SI]
    INC SI

LapThuong:
    MOV AH, 02h
    MOV DL, [SI]
    CMP DL, 'A'
    JB LT1
    CMP DL, 'Z'
    JA LT1
    ADD DL, 32

LT1:
    INC SI
    LOOP LapThuong
    RET
InChuoiThuong ENDP

; Doi thanh chuoi ky tu hoa
InChuoiHoa PROC
    LEA SI, s+1
    XOR CX, CX
    MOV CL, [SI]
    INC SI

LapHoa:
    MOV AH, 02h
    MOV DL, [SI]
    CMP DL, 'a'
    JB LH1
    CMP DL, 'z'
    JA LH1
    SUB DL, 32

LH1:
    INC SI
    INT 21h
    LOOP LapHoa
    RET
InChuoiHoa ENDP

END BEGIN

Bài 8: Viết chương trình nhập vào một chuỗi Đếm chiều dài của chuỗi nhập vào

.MODEL small STACK 100h
.DATA
tb1 DB 'Nhập vào một chuỗi: $'
tb2 DB 10,13,'Chiều dài của chuỗi là: $'
s DB 100 DUP('$')
.CODE
BEGIN:
    MOV AX, @DATA
    MOV DS, AX

    ; Xuất chuỗi tb1
    MOV AH, 9
    LEA DX, tb1
    INT 21h

    ; Nhập chuỗi s
    MOV AH, 0Ah
    LEA DX, s
    INT 21h

    ; Xuất chuỗi tb2
    MOV AH, 9
    LEA DX, tb2
    INT 21h

    ; Tính chiều dài chuỗi
    XOR AX, AX
    MOV AL, s+1
    SUB AX, 2
    MOV CX, AX

    ; Xuất chiều dài chuỗi
    MOV AH, 2
    MOV DL, '0'
    ADD DL, CH
    INT 21h

    MOV AH, 4Ch
    INT 21h

END BEGIN
FEATURED TOPIC