Một số bài tập Hợp Ngữ (Assembler) tham khảo

Over 0 working discount & coupon codes is active for 61 users, enjoy!

Một số bài tập Hợp Ngữ (Assembler) tham khảo

Bài 1: Viết chương trình hiện ra câu “Hello Assembly”
 .MODEL small
.STACK 100h
.DATA
Message db ‘Hello Assembly!$’
.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 “Chao mung ban den voi Assembly” “Assembly that de!”. Mỗi câu trên một dòng.
.MODEL small
.STACK 100h
.DATA
Tbao1 db “Chao mung ban den voi Assembly$”
Tbao2 db 0DH,0AH,”Assembly that de!$”
.CODE
ProgramStart:
Mov    AX,@DATA
Mov    DS,AX
;xuat thong bao 1
Lea    DX,Tbao1
Mov    AH,9
Int    21h
;xuat thong bao 2
Lea    DX,Tbao2
Mov    AH,9
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    “Hay nhap mot ky tu: $”
TBao2    db    0DH,0AH,”Ky tu da nhap: $”
KyTu    db    ?
.code
ProgramStart:
Mov ax,@data
Mov ds,ax
; nhac nhap
Lea dx, TBao1
Mov ah, 9
int 21h
; nhap 1 ky tu
Mov ah, 1
Int 21h
Mov KyTu, al
; thong bao ket qua
lea dx, TBao2
mov ah, 9
int 21h
; hien thi ky tu da nhap
Mov ah, 2
Mov dl, KyTu
Int 21h
; ve dos
Mov ah, 4Ch
Int 21h
end

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
.data
TBao1    db    “Hay nhap mot ky tu: $”
TBao2    db    0DH,0AH,”Ky tu da nhap: $”
TBao3   db    0DH,0AH,”Ky tu truoc ky tu da nhap: $”
TBao4   db    0DH,0AH,”Ky tu sau ky tu da nhap: $”
KyTu    db    ?
.code
ProgramStart:
Mov ax,@data
Mov ds,ax
; nhac nhap
Lea dx, TBao1
Mov ah, 9
int 21h
; nhap 1 ky tu
Mov ah, 1
Int 21h
Mov KyTu, al
; thong bao ket qua
lea dx, TBao2
mov ah, 9
int 21h
; hien thi ky tu da nhap
Mov ah, 2
Mov dl, KyTu
Int 21h
; hien thi ky tu truoc ky tu nhap
lea dx, TBao3
mov ah, 9
int 21h
mov ah, 2
mov dl, KyTu
dec dl
int 21h
; hien thi ky tu sau ky tu nhap
lea dx, TBao4
mov ah, 9
int 21h
mov ah, 2
mov dl, KyTu
inc dl
int 21h
mov ah, 4Ch
int 21h
end
Bài 2: 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 ‘Nhap vao ki tu thuong : $’
Msg2 DB 0Dh,0Ah,’Chuyen sang ki tu hoa la : ‘
Char DB ?,’$’
.CODE
Main PROC
MOV AX,@DATA
MOV DS,AX
; In ra thong bao 1
LEA DX,Msg1
MOV AH,9
INT 21h
; Nhap vao 1 ki tu thuong va doi thanh ki tu hoa
MOV AH,1
INT 21h ; Doc 1 ki tu thuong va luu vao AL
SUB AL,20h ; Doi thanh ki tu hoa
MOV Char,AL
; Hien len chu hoa
LEA DX,Msg2
MOV AH,9
INT 21h
; Ket thuc chuong trinh
MOV AH,4Ch
INT 21h
Main ENDP
END Main
Bài 3: Chuyển đổi ký tự hoa thành ký tự thường
.MODEL SMALL
.STACK 100h
.DATA
Msg1 DB ‘Nhap vao ki tu hoa : $’
Msg2 DB 0Dh,0Ah,’Chuyen sang ki tu thuong la : ‘
Char DB ?,’$’
.CODE
Main PROC
MOV AX,@DATA
MOV DS,AX
; In ra thong bao 1
LEA DX,Msg1
MOV AH,9
INT 21h
; Nhap vao 1 ki tu hoa va doi thanh ki tu thuong
MOV AH,1
INT 21h ; Doc 1 ki tu hoa va luu vao AL
ADD AL,20h ; Doi thanh ki tu thuong
MOV Char,AL
; Hien len chu thuong
LEA DX,Msg2
MOV AH,9
INT 21h
; Ket thuc chuong trinh
MOV AH,4Ch
INT 21h
Main ENDP
END Main
nhap chuoi
data segment
tb1 db “Hay nhap vao mot chuoi ky tu:  $”
tb2 db 13, 10,”chuoi vua nhap la:  $”
str db 200,?,200 dup(‘$’)
ends
stack segment
dw 128 dub(?)
ends
code segment
mov ax,data
mov ds,ax

lea dx,tb1
mov ah,09h
int 21h

mov ah,0Ah
lea dx,str
int 21h

lea DX,tb2
mov ah,09h
int 21h

lea bx,str
mov al,{bx+01h}
mov ah,00h
add bx,ax
;mov [bx+2],”$”
mov ah,09h
lea dx,str+2
int 21h
ends

Bài tập: 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. Dùng chương con

.MODEL small
.STACK
.DATA
tb1 DB ‘Nhap vao 1 chuoi: $’
tb2 DB 10,13,’Doi thanh chu thuong: $’
tb3 DB 10,13,’Doi thanh chu hoa: $’
s   DB 100,?,101 dup(‘$’)
.CODE
BEGIN:
MOV AX, @DATA
MOV DS,AX
;xuat chuoi tb1
MOV AH,09h
LEA DX,tb1
INT 21h
;nhap chuoi s
MOV AH,0AH
LEA DX,s
INT 21h
;xuat chuoi tb2
MOV AH,09h
LEA DX,tb2
INT 21h
; Goi chuong trinh con in chuoi thuong
CALL InChuoiThuong

; xuat chuoi tb3
MOV AH,09h
LEA DX,tb3
INT 21h
; Goi chuong trinh con in chuoi thuong
CALL InChuoiHoa

MOV AH,4ch
INT 21h
;**************************************
; 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
INT 21h
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 tập: 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
.DATA
tb1 DB ‘Nhap vao 1 chuoi: $’
tb2 DB 10,13,’Tong chieu dai cua chuoi: $’
s   DB 100,?,101 dup(‘$’)
.CODE
BEGIN:
MOV AX, @DATA
MOV DS,AX
;xuat chuoi tb1
MOV AH,09h
LEA DX,tb1
INT 21h
;nhap chuoi s
MOV AH,0AH
LEA DX,s
INT 21h
;xuat chuoi tb2
MOV AH,09h
LEA DX,tb2
INT 21h
;Tinh chieu dai chuoi
XOR AX,AX
MOV AL,s+1  ;Chuyen chieu dai chuoi vao ax
MOV CX,0    ;Khoi tao bien dem
MOV BX,10
LapDem1:
MOV DX,0
DIV BX
PUSH DX
INC CX
CMP AX,0
JNZ LapDem1
;xuat chieu dai chuoi
MOV AH,2
LapDem2:
POP DX
OR  DL,’0′        ;chuyen chu so -> so
INT 21H
LOOP LapDem2
MOV AH,4ch
INT 21h
END BEGIN
It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn