Tải bản đầy đủ (.pdf) (45 trang)

TUYỂN TẬP NHỮNG BÀI TẬP LC3 - ĐHBK TP.HCM

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (312.63 KB, 45 trang )

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


×