Professional Documents
Culture Documents
VD: Âm – Dương:
.ORIG X3010 ; chuong trinh bat dau o o nho x3010 -> co the thay dia
chi o nho khac tuy theo de bai
LOOP LDR R2, R1, #0 ; lay gia tri luu trong dia chi o nho dang chua
trong R1 vao R2
BRP POS ; neu la so duong thi toi label "POS"
BRN NEG ; neu la so am thi toi label "NEG"
BRZ NEXT
NEXT ADD R1, R1, #1 ; dia chi o nho luu trong R1 tang them 1
ADD R0, R0, #-1 ; bien dem R0 giam di 1
BRP LOOP ; neu chua du 10 gia tri thi quay lai "LOOP"
LD R0, DOWN ;
TRAP X21 ; xuat ky tu xuong dong
MEM .FILL X3000 ; dia chi o nho dau tien la x3000 -> co the thay
thanh dia chi o nho khac tu theo de bai
ASCII .FILL X30 ; hang so dua he thap phan ve ma Ascii
DOWN .FILL X0D ; ma Ascii ky tu xuong dong
MESG .STRINGZ " SO DUONG" ;
MESG2 .STRINGZ " SO AM" ; chuoi
.ORIG X3000
LOOP LDR R2, R1, #0 ; lay gia tri luu trong dia chi o nho dang chua
trong R1 vao R2
BRZ CHAN ; neu la so 0 thi toi label "CHAN"
BRN NEG ; neu la so am thi toi label "NEG"
POS ADD R2, R2, #-2 ; vong lap cho so duong -> tru di 2 don vi
BRN LE ; neu xuat hien ket qua am -> di toi label "LE"
BRZ CHAN ; neu xuat hien ket qua 0 -> di toi label "CHAN"
BR POS ; lap lai vong lap "POS" neu ket qua duong
NEG ADD R2, R2, #2 ; vong lap cho so am -> cong them 2 don vi
BRP LE ; neu xuat hien ket qua duong -> di toi label "LE"
BRZ CHAN ; neu xuat hien ket qua 0 -> di toi label "CHAN"
BR NEG ; lap lai vong lap "NEG" neu ket qua am
CHAN ADD R6, R6, #1 ; bien dem so chan tang len 1 don vi
BR NEXT ;
NEXT ADD R1, R1, #1 ; dia chi o nho luu trong R1 tang them 1
ADD R0, R0, #-1 ; bien dem R0 giam di 1
BRP LOOP ; neu chua du 6 gia tri thi quay lai "LOOP"
LD R0, DOWN ;
TRAP X21 ; xuat ky tu xuong dong
LD R0, ASCII ;
ADD R0, R0, R5 ; dua R6 ve ma Ascii de xuat
TRAP X21 ; xuat
LEA R0, MESG2 ;
TRAP X22 ; xuat chuoi trong "MESG2"
HALT ; lenh ket thuc chuong trinh
.ORIG X3000
; bang ma ASCII co ky tu lon nhat [DEL] - #127 - x7F - 0111 1111 -> chi can dung 8 bit
de bieu dien
TRAP X23 ;
ADD R1, R0, #0 ; luu ky tu vua nhap vao R1
LOOPT AND R2, R1, R4 ; vong lap to: AND tung bit cua ky tu de kiem
bit 1
BRZ SUB ; AND ra 0 -> SUB
LOOPN ADD R4, R4, R4 ; day bit 1 len vi tri tiep theo
ADD R6, R6, #-1 ; bien quet giam di 1 don vi
BRZ KET ; bien quet ve 0 -> KET
BR LOOPT ; -> LOOPT
SUB ADD R3, R3, #-1 ; bien dem R3 tru 1 vi xuat hien bit 0
BR LOOPN ; -> LOOPN
.ORIG X3001 ; vi tri bat dau chuong trinh -> chay chuong trinh tu day
AND R5, R5, #0 ; xoa R5 dem bit
K_TRA ADD R1, R1, #-2 ; vong lap kiem tra chan - le
BRN D_TRAI ; neu xuat hien ket qua am -> le -> di toi label "D_TRAI"
BRZ D_PHAI ; neu xuat hien ket qua 0 -> chan -> di toi label
"D_PHAI"
BR K_TRA ; lap lai vong lap "K_TRA" neu ket qua duong
; dich bit sang trai -> thuc hien phep nhan voi 2 -> dich 2 bit -> nhan 4
D_TRAI ADD R0, R0, R0 ; nhan doi 1 lan -> sang trai 1 bit
ADD R5, R0, R0 ; nhan doi 2 lan -> sang trai 2 bit -> R5
BR K_THUC ;
; dich bit sang phai -> thuc hien phep chia voi 2 -> dich 2 bit -> chia 4
D_PHAI ADD R0, R0, #-4 ; tru di 4
BRN K_THUC ; am -> K_THUC
ADD R5, R5, #1 ; R3 tang them 1
BR D_PHAI ; -> D_PHAI
K_THUC STI R5, ANS ; luu ket qua vao dia chi o nho luu trong ANS
HALT ; ket thuc chuong trinh
ANS .FILL x3000 ; dia chi o nho luu giu lieu -> hien tai la x3000
.ORIG X3020
FIN ADD R6, R4, #-10 ; kiem tra co hang chuc khong
BRZP H_CHUC
ADD R0, R4, R5 ; lay lai ket qua luu vao R0 -> ma Ascii
TRAP X21 ; xuat
HALT
.ORIG X3050
AND R1, R1, #0 ; xoa thanh ghi R1
LEA R0, MESG ; dua chuoi "MESG" vao thanh ghi R0
PUTS ; xuat chuoi
LEA R1, MEM ; dua dia chi (o dia chi dau tien) cua "MEM" vao R1
NEXT STR R0, R1, #0 ; luu gia tri trong R0 vao o dia chi luu
trong R1
ADD R1, R1, #1 ; tang o dia chi them mot
BR LOOP ; quay lai vong lap "LOOP"
KETTHUC
LEA R0, MESG2 ;
PUTS ; xuat chuoi "MESG2"
LEA R0, MEM ; dua "MEM" vao R0
PUTS ; xuat
MEM .BLKW 100 ; danh ra mot khoang memory cho chuoi duoc nhap
MESG .STRINGZ "Nhap chuoi: " ; chuoi "MESG"
MESG2 .STRINGZ "Ket qua: " ; chuoi "MESG2"
ENTER .FILL XFFF6 ; gia tri am cua phim "ENTER" dung de kiem tra
IN_HOA .FILL #-32 ; hang so dua chu thuong thanh chu in hoa
KT .FILL #-97 ; hang so kiem tra vi tri chu in thuong trong bang
ma Ascii
.ORIG x3010
LD R1, o_nho ; dia chi o nho dau tien luu vao R1, R1 -> lam dia
chi dong
LDI R5, o_nho ; lay gia tri dau tien lam min -> luu R5
LDI R6, o_nho ; lay gia tri dau tien lam max -> luu R6
LOOP LDR R3, R1, #0 ; lay gia tri luu trong dia chi o nho dang
chua trong R1 vao R3
NOT R4, R3 ; lay bu 1 -> R4
ADD R4, R4, #1 ; lay bu 2 -> R4
ADD R7, R4, R5 ; kiem tra co be hon MIN khong
BRP MIN ; be hon (duong) -> MIN
ADD R7, R4, R6 ; kiem tra co lon hon MAX khong
BRN MAX ; lon hon (am) -> MAX
BR NEXT ; re nhanh vo dieu kien -> NEXT
NEXT ADD R1, R1, #1 ; bien dia chi o nho tang them 1
ADD R0, R0, #-1 ; bien dem o nho giam 1
BRP LOOP ; neu bien dem o nho chua ve 0 -> quay lai vong lap
STI R5, GT_MIN ; luu gia tri R5 vao o nho cua label "GT_MIN"
STI R6, GT_MAX ; luu gia tri R6 vao o nho cua label "GT_MAX"
HALT ; lenh ket thuc chuong trinh
LOOP ADD R3, R1, R3 ; cong so thu nhat (R1) vao R3 -> phep nhan
duoc tinh bang so lan cong
ADD R2, R2, #-1 ; so thu hai tru di mot lan
BRz NEXT2 ; neu so thu 2 ve 0 (R2 = 0) -> "NEXT2"
BR LOOP ; re nhanh khong dieu kien de tro lai vong
lap
NEXT2 ADD R2, R3, #-10 ; hieu voi 10 de kiem tra tich co be hon 1o ko
BRN FIN1 ; am -> xuat ket qua luon -> "FIN1"
LO0P2 ADD R2, R2, #-10 ; hieu voi 10 de dem co bao nhieu o hang chuc
BRN FIN2 ; dem du -> thoat vong lap
ADD R4, R4, #1 ; chu so hang chuc + them 1
BR LO0P2 ; lap lai LOOP2
.ORIG x3000
.ORIG X3000
LD R6, ASCII ; lay gia tri luu trong label "ASCII" luu vao R6
LD R5, NEGASCII ; ___________________________ "NEGASCII" luu
vao R5
TRAP X23
ADD R0, R0, R5 ; dua gtri vua nhap ve he thap phan roi luu
vao R5
ADD R2, R0, R1 ; tong 2 so vua nhap
LD R0, HIEU10 ;
ADD R4, R0, R2 ; kiem tra tong co lon hon 10 bang hieu voi
10
BRZP CHUC ; neu ket qua hieu ra duong -> xuong label "CHUC"
ADD R0, R2, R6 ; dua tong trong R2 ve ma Ascii
TRAP X21 ; lenh xuat gia tri trong R0 ra Console
; trang 1
AM LD R0, DAUTRU ;
TRAP X21 ; xuat ky tu dau "-"
ADD R0, R3, #-1 ;
NOT R0, R0 ; lay bu 2 nguoc -> lay gia tri tuyet doi cua hieu
ADD R0, R0, R6 ; dua ve ma Ascii
TRAP X21 ; xuat
TRAP X23 ;
ADD R1, R0, R6 ;
TRAP X23 ;
ADD R2, R0, R6 ;
TRAP X23 ;
ADD R3, R0, R6 ; nhap -> luu cac gia tri -> dua ve he
thap phan
NEXT1 AND R0, R0, #0 ; xoa thanh ghi R0 de lam bien dem
ADD R2, R1, R4 ; hieu voi 10000 de kiem tra co hang chuc
ngan khong
BRN NEXT2 ; am -> NEXT2
LO0P1 ADD R0, R0, #1 ; chu so hang chuc ngan + them 1
ADD R2, R2, R4 ; hieu voi 10000 de dem co bao nhieu o hang
chuc ngan
BRN XUAT1 ; am -> XUAT1
BR LO0P1 ; lap lai LOOP1
XUAT1 ADD R0, R3, R0 ; dua R0 ve ma Ascii
TRAP X21 ; xuat gia tri hang chuc ngan (R0)
; nhom lenh them ky tu "0" cho hang ngan neu co ton tai hang chuc ngan
LD R0, CNGAN ; 10000 -> R0
ADD R2, R0, R2 ; lay lai cac gia tri tu hang ngan
AND R0, R0, #0 ; xoa thanh ghi R0 de neu hang ngan = 0 ->
xuat ra 0 (R0)
ADD R2, R2, R5 ; R2 - 1000 -> kiem tra hang ngan co = 0
khong
BRN XUAT2 ; am -> XUAT2 (xuat R0 = 0)
BR LOOP2 ; -> LOOP2 (neu hang ngan co ton tai)
; nhom lenh them ky tu "0" cho hang tram neu co ton tai hang ngan va hang chuc
ngan
LD R0, NGAN ; 1000 -> R0
ADD R2, R0, R2 ; lay lai cac gia tri tu hang tram
AND R0, R0, #0 ; xoa thanh ghi R0 de neu hang tram = 0 ->
xuat ra 0 (R0)
ADD R2, R2, R6 ; R2 - 100 -> kiem tra hang tram co = 0 khong
BRN XUAT3 ; am -> XUAT3 (xuat R0 = 0)
BR LOOP3 ; -> LOOP3 (neu hang ngan co ton tai)
; nhom lenh them ky tu "0" cho hang tram neu co ton tai hang ngan, hang chuc
ngan va hang tram
LD R0, TRAM ;
ADD R2, R0, R2 ;
AND R0, R0, #0 ;
ADD R2, R2, #-10 ;
BRN XUAT4 ; tuong tu nhu tren
BR LOOP4
HALT