TUYỂN TẬP
NHỮNG BÀI TẬP LC3
(Trường Đại học Bách khoa - Đại học Quốc gia TP.HCM)
Biên soạn: Nguyễn Duy Nhất
1. Viết chương trình bằng hợp ngữ LC3, in ra màn hình “Hello, World”.
Chương trình:
.ORIG X3000
LEA R0,CHUOI1
PUTS
HALT
CHUOI1 .STRINGZ “Hello, World”
.END
2. Viết chương trình bằng hợp ngữ LC3, in ra màn hình
“Hello, nice to meet you!
How are you!”.
Chương trình:
.ORIG X3000
LEA R0,CHUOI1
PUTS
LEA R0,CHUOI2
PUTS
HALT
CHUOI1 .STRINGZ "Hello, nice to meet you!\n"
CHUOI2 .STRINGZ "How are you?"
.END
3. Viết chương trình bằng hợp ngữ LC3, thực hiện nhập 2 số a và b (a, b là các số có
một chữ số). Tính a b .
Chương trình:
.ORIG X3000
IN
ADD R1,R0,#0
Biên soạn: Nguyễn Duy Nhất
ADD R1,R1,#-16
ADD R1,R1,#-16
ADD R1,R1,#-16
IN
ADD R2,R0,#0
ADD R2,R2,#-16
ADD R2,R2,#-16
ADD R2,R2,#-16
NOT R2,R2
ADD R2,R2,#1
ADD R3,R1,R2
BRN N
ADD R0,R3,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#3
OUT
HALT
N
AND R4,R4,#0
ADD R0,R4,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
OUT
NOT R0,R3
Biên soạn: Nguyễn Duy Nhất
ADD R0,R0,#1
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#3
OUT
HALT
.END
4. Viết chương trình bằng hợp ngữ LC3, thực hiện nhập 2 số a và b (a, b là các số có
một chữ số). Tính a b .
Chương trình:
Cách 1:
.ORIG X3000
IN
ADD R1,R0,#0
ADD R1,R1,#-16
ADD R1,R1,#-16
ADD R1,R1,#-16
IN
ADD R2,R0,#0
ADD R2,R2,#-16
ADD R2,R2,#-16
ADD R2,R2,#-16
ADD R3,R1,R2
ADD R4,R3,#-10
BRZP P
Biên soạn: Nguyễn Duy Nhất
ADD R0,R3,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#3
OUT
HALT
P
AND R5,R5,#0
ADD R0,R5,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#4
OUT
ADD R0,R4,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#3
OUT
HALT
.END
Cách 2:
.ORIG X3000
LD R1,ASCII_0M
LD R2,ASCII_0
Biên soạn: Nguyễn Duy Nhất
LEA R0,CHUOI1
PUTS
GETC
OUT
ADD R3,R0,R1
AND R0,R0,#0
ADD R0,R0,X0A
OUT
LEA R0,CHUOI2
PUTS
GETC
OUT
ADD R4,R0,R1
AND R0,R0,#0
ADD R0,R0,X0A
OUT
NOT R4,R4
ADD R4,R4,#1
ADD R3,R3,R4
BRN XUAT
LEA R0,HIEU
PUTS
ADD R0,R3,#0
ADD R0,R0,R2
OUT
HALT
XUAT LEA R0,HIEU
Biên soạn: Nguyễn Duy Nhất
PUTS
LD R5,ASCII_MINUS
ADD R0,R5,#0
OUT
NOT R3,R3
ADD R3,R3,#1
ADD R0,R3,#0
ADD R0,R0,R2
OUT
HALT
ASCII_0
.FILL #48
ASCII_0M
.FILL #-48
ASCII_MINUS
.FILL #45
CHUOI1
.STRINGZ "NHAP A: "
CHUOI2
.STRINGZ "NHAP B: "
HIEU
.STRINGZ "HIEU : "
.END
5. Viết chương trình bằng hợp ngữ LC3, thực hiện nhập 2 số a và b (a, b là các số có
một chữ số). Tính a * b .
Chương trình:
Cách 1:
.ORIG X3000
IN
LD R1,ASCII_0M
ADD R2,R0,R1
IN
ADD R3,R0,R1
Biên soạn: Nguyễn Duy Nhất
AND R4,R4,#0
LAP
ADD R2,R2,#-1
BRN TACH_SO
ADD R4,R4,R3
BR LAP
TACH_SO
AND R2,R2,#0
LAP2
ADD R4,R4,#-10
BRN TIEP
ADD R2,R2,#1
BR
TIEP
LAP2
ADD R3,R4,#10
LD R1,ASCII_0
ADD R2,R2,#0
BRZ XUAT_DON_VI
ADD R0,R2,R1
OUT
XUAT_DON_VI
ADD R0,R3,R1
OUT
HALT
ASCII_0
.FILL #48
ASCII_0M
.FILL #-48
.END
Cách 2:
.ORIG X3010
AND R6,R6,#0
AND R3,R3,#0
LD R5,ASCII_0M
Biên soạn: Nguyễn Duy Nhất
LEA R0,CHUOI1
PUTS
GETC
OUT
ADD R1,R0,R5
LEA R0,CHUOI2
PUTS
GETC
OUT
ADD R2,R0,R5
LAP
ADD R3,R3,R1
ADD R2,R2,#-1
BRP LAP
ADD R4,R3,#0
LAP2
ADD R4,R4,#-10
ADD R6,R6,#1
ADD R4,R4,#0
BRZP LAP2
LEA R0,TICH
PUTS
NOT R5,R5
ADD R5,R5,#1
ADD R6,R6,#-1
ADD R0,R6,R5
OUT
ADD R4,R4,#10
Biên soạn: Nguyễn Duy Nhất
ADD R0,R4,R5
OUT
HALT
CHUOI1
.STRINGZ "MOI NHAP SO 1: "
CHUOI2
.STRINGZ "\nMOI NHAP SO 2: "
TICH
.STRINGZ "\nTICH LA: "
ASCII_0M
.FILL #-48
.END
Cách 3:
.ORIG X3000
IN
ADD R1,R0,#0
ADD R1,R1,#-16
ADD R1,R1,#-16
ADD R1,R1,#-16
IN
ADD R2,R0,#0
ADD R2,R2,#-16
ADD R2,R2,#-16
ADD R2,R2,#-16
AND R3,R3,#0
LAP
ADD R1,R1,#-1
BRN TACH_SO
ADD R3,R3,R2
BR LAP
TACH_SO
AND R1,R1,#0
LAP2
ADD R3,R3,#-10
Biên soạn: Nguyễn Duy Nhất
BRN TIEP
ADD R1,R1,#1
BR LAP2
TIEP
ADD R4,R3,#10
ADD R1,R1,#0
BRZ XUAT_DON_VI
ADD R0,R1,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#3
OUT
XUAT_DON_VI
ADD R0,R4,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#3
OUT
HALT
.END
6. Viết chương trình bằng hợp ngữ LC3, thực hiện yêu cầu
“MOI NHAP KY TU 1: N
MOI NHAP KY TU 2: 9”
Lưu mã ASCII của ký tự 1 và 2 lần lượt vào hai ơ nhớ có địa chỉ x5000 và x6000.
Biên soạn: Nguyễn Duy Nhất
Chương trình:
.ORIG X3000
LEA R0,CHUOI1
PUTS
GETC
OUT
ADD R1,R0,#0
STI R1,DC1
LD R0,ENTER
OUT
LEA R0,CHUOI2
PUTS
GETC
OUT
ADD R2,R0,#0
STI R2,DC2
HALT
CHUOI1
.STRINGZ "MOI NHAP KY TU 1: "
CHUOI2
.STRINGZ "MOI NHAP KY TU 2: "
ENTER
.FILL #10
DC1
.FILL X5000
DC2
.FILL X6000
.END
Biên soạn: Nguyễn Duy Nhất
7. Viết chương trình bằng hợp ngữ LC3, thực hiện các yêu cầu:
Nhập 2 số như sau:
MOI NHAP SO THU NHAT: 6
MOI NHAP SO THU HAI: 3
3+6=9
Lưu kết quả và ơ nhớ có địa chỉ x5000.
Chương trình:
.ORIG X3000
LEA R5,CH
LD R3,ASCII_0M
LEA R0,CHUOI1
PUTS
GETC
OUT
STR R0,R5,#0
ADD R1,R0,R3
LEA R0,CHUOI2
PUTS
GETC
OUT
STR R0,R5,#2
ADD R2,R0,R3
ADD R4,R1,R2
STI R4,DC1
NOT R3,R3
Biên soạn: Nguyễn Duy Nhất
ADD R3,R3,#1
ADD R6,R4,#-10
BRZP HCS
ADD R4,R4,R3
STR R4,R5,#5
BR KET
HCS
ADD R6,R6,R3
STR R6,R5,#5
ADD R3,R3,#1
STR R3,R5,#4
KET
LD R0,ENTER
OUT
LEA R0,CH
PUTS
HALT
CHUOI1
.STRINGZ "Nhap so 1: "
CHUOI2
.STRINGZ "\nNhap so 2: "
ENR
.STRINGZ "\n"
CH
.STRINGZ "X+Y= Z"
DC1
.FILL X5000
ASCII_0M
.FILL #-48
ENTER
.FILL X0A
.END
Biên soạn: Nguyễn Duy Nhất
8. Cho m số nguyên trên bộ nhớ từ địa chỉ x3100 tới x310B chứa 12 ơ nhớ. Viết chương
trình bằng hợp ngữ LC3. Tính tổng các số nguyên đã cho và lưu kết quả vào vùng nhớ
nào đó.
Chương trình:
.ORIG X3000
LD R1,DC1
AND R3,R3,#0
ADD R2,R3,#12
KT
BRZ KET_THUC
LDR R4,R1,#0
ADD R3,R3,R4
ADD R1,R1,#1
ADD R2,R2,#-1
BR KT
KET_THUC STI R3,KQ
HALT
DC1
.FILL X3100
KQ
.BLKW 1
.END
9. Viết chương trình bằng hợp ngữ LC3, thực hiện nhập 3 số a, b và c (a, b, c là các số
có một chữ số). Tính a b c .
Chương trình:
.ORIG X3000
IN
ADD R1,R0,#0
Biên soạn: Nguyễn Duy Nhất
ADD R1,R1,#-16
ADD R1,R1,#-16
ADD R1,R1,#-16
IN
ADD R2,R0,#0
ADD R2,R2,#-16
ADD R2,R2,#-16
ADD R2,R2,#-16
IN
ADD R3,R0,#0
ADD R3,R3,#-16
ADD R3,R3,#-16
ADD R3,R3,#-16
ADD R1,R1,R2
NOT R3,R3
ADD R3,R3,#1
ADD R4,R1,R3
BRN N
ADD R5,R4,#-10
BRZP NN
ADD R0,R4,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#3
OUT
Biên soạn: Nguyễn Duy Nhất
HALT
N
AND R5,R5,#0
ADD R0,R5,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
OUT
NOT R0,R4
ADD R0,R0,#1
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#3
OUT
HALT
NN
AND R6,R6,#0
ADD R0,R6,#0
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#15
ADD R0,R0,#4
OUT
ADD R0,R5,#0
ADD R0,R0,#15
ADD R0,R0,#15
Biên soạn: Nguyễn Duy Nhất
ADD R0,R0,#15
ADD R0,R0,#3
OUT
HALT
.END
10. Viết chương trình bằng hợp ngữ LC3, thực hiện nhập 2 số a và b (a, b là các số có
một chữ số). Tính a b theo mẫu:
NHAP A: 9
NHAP B: 5
TONG LA: 14
Chương trình:
.ORIG X3000
LD R1,ASCII_0M
LD R5,ASCII_0
LEA R0,CHUOI1
PUTS
GETC
OUT
ADD R2,R0,R1
AND R0,R0,#0
ADD R0,R0,X0A
OUT
LEA R0,CHUOI2
PUTS
GETC
Biên soạn: Nguyễn Duy Nhất
OUT
ADD R3,R0,R1
AND R0,R0,#0
ADD R0,R0,X0A
OUT
ADD R2,R2,R3
ADD R4,R2,#-10
BRZP XUAT
LEA R0,TONG
PUTS
ADD R0,R2,#0
ADD R0,R0,R5
OUT
HALT
XUAT
LEA R0,TONG
PUTS
AND R0,R0,#0
ADD R0,R0,R5
ADD R0,R0,#1
OUT
ADD R0,R4,#0
ADD R0,R0,R5
OUT
HALT
Biên soạn: Nguyễn Duy Nhất
ASCII_0
.FILL #48
ASCII_0M
.FILL #-48
CHUOI1
.STRINGZ "NHAP A: "
CHUOI2
.STRINGZ "NHAP B: "
TONG
.STRINGZ "TONG LA: "
.END
11. Viết chương trình bằng hợp ngữ LC3, cho phép người dùng nhập 2 ký tự từ bàn
phím, lưu mã ASCII của 2 ký tự đó vào ơ nhớ theo u cầu: ơ nhớ x4000 chứa ký tự
có mã ASCII lớn, ơ nhớ x4001 chứa ký tự có mã ASCII nhỏ, nếu 2 ký tự bằng nhau
thì chỉ cần lưu vào ơ nhớ x4000.
Chương trình:
.ORIG X3000
LEA R0,CHUOI1
PUTS
GETC
ADD R1,R0,#0
OUT
LEA R0,CHUOI2
PUTS
GETC
ADD R2,R0,#0
OUT
NOT R4,R2
ADD R4,R4,#1
ADD R5,R1,R4
BRN XUAT1
Biên soạn: Nguyễn Duy Nhất
BRP XUAT2
STI R1,EQU
HALT
XUAT1
STI R1,MIN
STI R2,MAX
HALT
XUAT2
STI R1,MAX
STI R2,MIN
HALT
CHUOI1
.STRINGZ "NHAP KY TU THU NHAT: "
CHUOI2
.STRINGZ "\nNHAP KY TU THU HAI: "
MAX
.FILL X4000
MIN
.FILL X4001
EQU
.FILL X4000
.END
12. Viết chương trình bằng hợp ngữ LC3, thực hiện phép tính XOR 16 bit với đầu vào
là 2 ô nhớ được lưu ở địa chỉ x4000 và x4001, kết quả được lưu vào ô nhớ x4010.
Chương trình bắt đầu từ ơ nhớ có địa chỉ x3000.
Chương trình:
.ORIG X3000
LDI R0,M_INT1
LDI R1,M_INT2
NOT R2,R0
NOT R3,R1
AND R2,R2,R1
AND R3,R3,R0
Biên soạn: Nguyễn Duy Nhất
NOT R2,R2
NOT R3,R3
AND R4,R2,R3
NOT R4,R4
STI R4,KQ
M_INT1
.FILL X4000
M_INT2
.FILL X4001
KQ
.FILL X4010
.END
13. Viết chương trình bằng hợp ngữ LC3, thực hiện nhập 2 số (nhỏ hơn bằng 9) từ
bàn phím và thực hiện phép tính trừ hai số, lưu kết quả và ơ nhớ có địa chỉ x4000.
Chương trình bắt đầu từ ơ nhớ có địa chỉ x3000 và xuất ra màn hình theo hai mẫu
bên dưới:
Mẫu 1:
Mẫu 2:
Moi nhap so 1: 6
Moi nhap so 2: 3
Hieu hai so: 6-3= 3
Moi nhap so 1: 3
Moi nhap so 2: 6
Hieu hai so: 3-6= -3
Chú ý: 3 và 6 là 2 số do người chạy nhập
Chương trình:
.ORIG X3000
LEA R5,CT
LD R3,ASCII_0M
LEA R0,CHUOI1
PUTS
GETC
OUT
STR R0,R5,#0
Biên soạn: Nguyễn Duy Nhất
ADD R1,R0,R3
LEA R0,CHUOI2
PUTS
GETC
OUT
STR R0,R5,#2
ADD R2,R0,R3
NOT R2,R2
ADD R2,R2,#1
ADD R1,R1,R2
STI R1,DC1
NOT R3,R3
ADD R3,R3,#1
ADD R1,R1,#0
BRN XUAT
ADD R1,R1,R3
STR R1,R5,#5
BR KET
XUAT
ADD R4,R3,#-3
STR R4,R5,#4
NOT R1,R1
ADD R1,R1,#1
ADD R1,R1,R3
STR R1,R5,#5
Biên soạn: Nguyễn Duy Nhất
KET
LEA R0,HIEU
PUTS
LEA R0,CT
PUTS
HALT
CHUOI1
.STRINGZ "MOI NHAP SO 1: "
CHUOI2
.STRINGZ "\nMOI NHAP SO 2: "
HIEU
.STRINGZ "\nHIEU HAI SO: "
CT
.STRINGZ "X-Y= Z"
ASCII_0M
.FILL #-48
DC1
.FILL X4000
.END
14. Viết chương trình bằng hợp ngữ LC3, tính tổng S 2 4 6 ... 100 và lưu kết quả
tính được vào ơ nhớ có địa chỉ x4000.
Chương trình:
.ORIG
X3000
AND R1,R1,#0
LD R4,ASCII_100
AND R2,R2,#0
ADD R2,R2,R4
LAP
ADD R1,R1,R2
ADD R2,R2,#-2
BRP LAP
STI R1,KQ
Biên soạn: Nguyễn Duy Nhất
KQ
.FILL X4000
ASCII_100
.FILL #100
.END
15. Viết chương trình bằng hợp ngữ LC3, nhập 1 ký tự từ bàn phím. Nếu ký tự là ký
tự thường thì đổi sang ký tự hoa và xuất ra màn hình. Chương trình bắt đầu từ x3000.
Chương trình:
.ORIG X3000
LD R5,ASCII_97
LD R6,ASCII_122
LD R4,ASCII_32
LEA R0,CHUOI1
PUTS
GETC
OUT
ADD R1,R0,#0
ADD R3,R1,#0
ADD R2,R3,R5
BRZP CHUYEN1
LEA R0,KQ
PUTS
ADD R0,R3,#0
OUT
HALT
ADD R3,R1,#0
ADD R2,R3,R6
BRNZ CHUYEN2
LEA R0,KQ