Đề thi môn kỹ thuật vi xử lý có đáp án phần 2

30 9.4K 31
Tài liệu đã được kiểm tra trùng lặp
Đề thi môn kỹ thuật vi xử lý có đáp án phần 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Đề thi môn kỹ thuật vi xử lý có đáp án

Trang 1

Giải bài tập Vi xử lý – BachDH – TTM K51 v1.0Phần 1: Kỹ thuật vi xử lý

1 Bộ vi xử lý 8088 được khởi tạo đoạn ngăn xếp tại SS = 4200H Giả thiết tại một thời

điểm BP=00FCH, BX=1234H, AX= 2006H, CX= 5566H, SP=0100H đang trỏ vào đỉnhngăn xếp Hãy tính địa chỉ và nội dung các byte nhớ trong ngăn xếp sau các lệnh sau: PUSH AX

PUSH BXPOP DXPUSH CXMOV DL,[BP]POP SIGiải:

Coi độ lớn Stack là 1 byte và lưu trữ theo Little endian.+ Ban đầu:

Địa chỉ Nộidung

4200H+ PUSH AX

4200H+ PUSH BXSP

Trang 2

… …SS

4200H+ POP DX

4200H+ PUSH CXSP

4200H+ POP SI

4200H

Trang 3

2 Bộ vi xử lý 8088 được khởi tạo đoạn dữ liệu tại DS = 4200H Giả thiết tại một thời

điểm BX=ABF8H, SI=4E5CH, DI= 13C2H Hãy tính địa chỉ toán hạng nguồn của cáclệnh sau :

a) MOV AL,[BX]+5 b) ADD AL,[3A5CH]

c) MOV CL,[DI+7] d) MOV BX,[SI+BX+0FH]

a) Chế độ địa chỉ tương đối cơ sở4200H:ABFDH = 4CBFDHb) Chế độ địa chỉ trực tiếp

4200H:3A5CH = 45A5CHc) Chế độ địa chỉ tương đối chỉ số

4200H:13C9H = 433C9H

d) Chế độ địa chỉ tương đối chỉ số cơ sở4200H:FA63H = 51A63H

3

Trang 4

3 Cho nội dung các thanh ghi trong của 8088 như sau.

AX= 94B3H ; BX=5AE4H ; CX= A4B7H ; DX= EA8DH Hãy cho biết kết quảcác phép toán sau và nội dung các cờ CF,OF,ZF sau mỗi phép toán

a) ADD AX,BXb) SUB BX,CXc) ADD CL,DLd) OR BH,AL Giải:

a) Kết quả:

ADD 5AE4H94B3H 1001 0100 1011 00110101 1010 1110 0100AX = EF97H 1110 1111 1001 0111Cờ: CF = 0, OF = 0, ZF = 0

b) Kết quả:

A4B7H 1010 0100 1011 0111bù 1 0101 1011 0100 1000ADD 5AE4Hbù 2 0101 1011 0100 10010101 1010 1110 0100BX = B62DH 1011 0110 0010 1101Cờ: CF = 0, OF = 1, ZF = 0

1011 0011

Cờ: CF = 0, OF = 0, ZF = 0

Trang 5

4 a) Hãy sử dụng các mạch giải mã 1/4, các mạch logic, các vi mạch EPROM 512B thiết

kế bộ nhớ 2kB đặt địa chỉ cuối cùng là FFFFFH b) Liệt kê địa chỉ của từng vi mạch EPROM.Giải:

Dung lượng EPROM = 512B = 29B = 200H  9 chân địa chỉ (A0 – A8)

Dung lượng bộ nhớ = 2kB = 211B = 4.29B = 800H  phải dùng 4 vi mạch EPROM512B

Địa chỉ đầu của bộ nhớ = Địa chỉ cuối của bộ nhớ - (Dung lượng bộ nhớ - 1) = FFFFFH – (800H – 1) = FF800H

Mỗi vi mạch EPROM có dung lượng 200H nên địa chỉ của từng vi mạch EPROM là:IC 1: Địa chỉ đầu = FF800H

Địa chỉ cuối = FF9FFHIC2: Địa chỉ đầu = FFA00H

Địa chỉ cuối = FFBFFHIC3: Địa chỉ đầu = FFC00H

Địa chỉ cuối = FFDFFHIC4: Địa chỉ đầu = FFE00H

Địa chỉ cuối = FFFFFHSơ đồ địa chỉ:

A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 IO/M

IC2 11 11 11 11 11 11 11 11 11 00 11 01 01 01 01 01 01 01 01 01IC3 11 11 11 11 11 11 11 11 11 11 00 01 01 01 01 01 01 01 01 01

Chọn mạch giải mã 1/4 (74LS139)Sơ đồ ghép nối:

5

Trang 6

5 Thiết kế bộ nhớ dung lượng 24KB từ các vi mạch ROM 8KB và bộ giải mã 74138

(1/8) ghép nối với bộ vi xử lý 8088 (Chế độ MIN) với địa chỉ đầu từ AA000H.Giải:

Dung lượng ROM = 8KB = 213B = 2000H  13 chân địa chỉ (A0 – A12)Dung lượng bộ nhớ = 24KB = 6000H  cần dùng 3 vi mạch ROM để thiết kếĐịa chỉ đầu bộ nhớ = AA000H

Địa chỉ cuối bộ nhớ = Địa chỉ đầu + (Dung lượng – 1) = AA000H + 6000H – 1 = AFFFFH

Mỗi vi mạch ROM có dung lượng 2000H nên địa chỉ đầu và cuối của mỗi vi mạch là:IC1: Địa chỉ đầu = AA000H

Địa chỉ cuối = ABFFFHIC2: Địa chỉ đầu = AC000H

Địa chỉ cuối = ADFFFHIC3: Địa chỉ đầu = AE000H

Địa chỉ cuối = AFFFFHSơ đồ địa chỉ:

A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 IO/M

Trang 7

6 Thiết kế mạch giải mã địa chỉ cho 8 cổng ra có địa chỉ 3A8H – 3AFH dùng các mạch

giải mã 74139 (1/4).Giải:

Mỗi mạch giải mã 1/4 có 4 cổng ra  cần dùng 2 mạch giải mã 1/4 để thiết kế.Sơ đồ địa chỉ:

Sơ đồ nối:

7

Trang 8

7 Hệ vi xử lý 8088 có 2 vi mạch cổng PPI 8255A (Mỗi vi mạch có 4 địa chỉ).Hãy thiết kế

mạch giải mã địa chỉ biết địa chỉ cơ sở của vi mạch 1 là 2B0H còn vi mạch 2 là 2B4H.Giải:

Trang 9

8 Cho vi mạch cổng 8255A có 4 cổng PA, PCA, PB, PCB Hãy Viết đoạn chương trình đặt

cấu hình cho các cổng ở mode 0 như sau: PA, PCA là cổng vào, còn PB, PCB là cổng ra.Giải:

Vì ở mode 0 nên  MA1MA0 = 00MB = 0

Vì PA, PCA là cổng vào  A = CA = 1Vì PB, PCB là cổng ra  B = CB = 0Vậy từ điều khiển là:

Cấu hình cho 8255A:

MOV DX,CWR ;đưa CWR vào DX

MOV AL,CW ;từ điều khiển chứa trong ALOUT DX,AL ;đưa từ điều khiển ra CWR

9

Trang 10

Phần 2: Lập trình hợp ngữ A Giải thích chương trình

1 Cho đoạn chương trình hợp ngữ sau, hãy giải thích từng lệnh (theo ngữ cảnh) và cho

biết kết quả trên màn hình.

MOV DL,BH ;Chuyển nội dung BH vào DL

INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL(=BH)LOOP LAI ;Lặp lại việc in ra màn hình kí tự trong DL 5 lần (CX=5)MOV DL,’_’ ;Gán DL= kí tự ‘_’

INT 21H ;Gọi ngắt 21H 3 lần, in ra màn hình 3 kí tự ‘_’ liên tiếpINT 21H

MOV DL,BH ;Chuyển nội dung BH vào DL

INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL (=BH)INC DL ;Tăng DL 1

LOOP FO2 ;Lặp lại việc in ra màn hình kí tự trong DL 5 lần

INT 21H ;Gọi ngắt 21H, in kí tự điều khiển LF (tạo một dòng mới)

Trang 11

3 Cho đoạn chương trình hợp ngữ sau.

M1 DB 0Bh,10h,15h,2DUP(?)B1 DB 10

.CODEThu proc

MOV M1[BX],AL ;M1[3] = AL = 1Ah

SUB B1,10h ;B1 -= 0Ah - 10h = FAhMOV AL,B1 ;AL = B1 = FAh

INC BX ;BX += 1 = 4MOV M1[BX],AL ;M1[4] = AL = FAh

Hãy cho biết giá tri mới của mảng M1 sau các lệnh trên.M1: 0Bh,10h,1Fh,1Ah,FAh

11

Trang 12

4 Cho đoạn chương trình hợp ngữ sau.

M1 DB ‘t’,’h’,’i’,’l’,’a’,’i’,2 DUP(‘*’)B1 DB 20H

MOV AL,B1 ;Gán AL = B1 = 20HLEA BX,M1 ;BX trỏ tới M1MOV CX,6 ;Gán CX = 6LAP:

SUB [BX],AL ;[BX] -= AL = [BX] – 20H (chữ thường thành chữ hoa)ADD BX,1 ;BX += 1

LOOP LAP ;Lặp lại 6 lần

LOOP LAI ;Lặp lại quá trình trên 8 lần (CX = 8)

Hãy cho biết giá tri mới của mảng M1 sau các lệnh trên và kết quả trên màn hình.M1: ‘T’,’H’,’I’,’L’,’A’,’I’,’*’,’*’

Kết quả trên màn hình:THILAI**

Trang 13

5 Giải thích từng lệnh và viết kết quả trên màn hình của đoạn chương trình sau

MOV BH,41H ;Gán BH = 41H (kí tự ‘A’)MOV BL,4 ;Gán BL = 4

MOV CX,5 ;Gán CX = 5LAI:

MOV DL,BH ;Chuyển nội dung BH vào DL

INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DLOR DL,20H ;DL OR 20H (chuyển chữ hoa thành chữ thường)INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DLLOOP LAI ;Lặp lại quá trình trên 5 lần (CX = 5)

MOV DL,’_’ ;Gán DL = ‘_’

INT 21H ;Gọi ngắt 21H 3 lần, in ra 3 lần kí tự ‘_’INT 21H

Trang 14

6 Giải thích từng lệnh và viết kết quả trên màn hình của đoạn chương trình sau

MOV BH,0AH ;Gán BH = 0AH (kí tự điều khiển LF)MOV DL,39H ;Gán DL = 39H (kí tự ‘9’)

ADD DL,BH ;DL += BH = 39H + 0AH = 43H (kí tự ‘C’)MOV CX,5 ;Gán CX = 5

INT 21H ;Gọi ngắt 21H, in ra màn hình kí tự trong DL (kí tự CR)

01000011

Trang 15

B Bài tập lập trình

1 Viết chương trình hợp ngữ đầy đủ thực hiện công việc sau

- Thông báo để vào một dòng chữ bất kỳ, kết thúc bằng Enter.- Vào một dòng chữ.

- Đếm số chữ hoa trong dòng.

- Nếu không có chữ hoa hiển thị thông báo “Không có chữ hoa”.

- Ngược lại hiển thị số chữ hoa lên màn hình.(giả thiết số chữ hoa không quá 9).- Về DOS

.MODEL SMALL.STACK 100H.DATA

S1 DB 'Vao mot dong chu bat ki: $’S2 DB ‘Khong co chu hoa$’

S3 DB 0AH,0DH,’$’.CODE

MOV AH,1 ;Bắt đầu đọc kí tự vào

XOR CX,CX ;CX chứa số chữ hoa trong dòngLAP1:

CMP AL,0DH ;Xem có phải là Enter không?

JE TIEP1 ;Nếu là Enter thì nhảy tới nhãn TIEP1CMP AL,41H ;Xem có <’A’ không?

JL NOTUPPER ;Nếu <’A’ thì nhảy tới nhãn NOTUPPERCMP AL,5AH ;Nếu >=’A’, xét xem có >’Z’ không?

JG NOTUPPER ;Nếu lớn hơn thì nhảy tới nhãn NOTUPPERINC CX ;Nếu <=’Z’ thì là chữ hoa, tăng CX 1

Trang 16

CMP CX,0 ;Xem CX có bằng 0 không?

JE NOUPPER ;Nếu CX = 0, nhảy tới nhã NOUPPER

MOV DX,CX ; Nếu CX <> 0, chuyển số chữ hoa trong CX sang DXADD DL,30H ;Đổi sang kí tự số

MOV AH,2

INT 21H ;In ra số chữ hoaJMP EXIT ;Nhảy tới nhãn EXITNOUPPER:

MOV AH,9 ;Nếu không có chữ hoa, in ra thông báo S2LEA DX,S2

INT 21HEXIT:

MOV AH,4CH ;Trả lại điều khiển cho hệ thốngINT 21H

MAIN ENDPEND MAIN

Trang 17

2 Cho một mảng số liệu có tên M1 gồm 50 phần tử cỡ WORD Viết chương trình hợp

ngữ đầy đủ đếm và hiển thị số lượng phần tử là số âm lên màn hình.

(Giả thiết có chương trình con hiển thị số hệ 10 tên là IN_DEC, số cần hiển thị đểtrong AX.)

.MODEL SMALL.STACK 100H.DATA

M1 DW -10,-9,2,-3,5,45 DUP(-1).CODE

MAIN PROC

MOV AX,@DATA ;Khởi tạo DSMOV DS,AX

XOR CX,CX ;CX chứa số số âm

XOR BX,BX ;BX đóng vai trò chỉ số khi chạy trong mảngLEA SI,M1 ;SI trỏ vào đầu mảng M1

CMP BX,50 ;So sánh BX với 50

JE TIEP1 ;Nếu BX = 50 nhảy tới nhãn TIEP1MOV AX,[SI] ;AX = phần tử trỏ bởi SI

CMP AX,0 ;So sánh AX với 0

JGE SO_DUONG ;Nếu AX>=0, nhảy tới nhãn SO_DUONGINC CX ;Nếu AX<0, tăng số số âm 1

CMP AX,0 ;So sánh AX với 0

JGE SODUONG ;Nếu AX>=0, nhảy tới SODUONGPUSH AX ;Nếu AX<0, lưu lại số trong AXMOV AH,2 ;In ra dấu âm ‘-‘

MOV DL,'-'

17

Trang 18

INT 21H

POP AX ;Lấy lại số âm trong AX

NEG AX ;Rồi đổi dấu số âm trong AX thành số dươngSODUONG:

XOR CX,CX ;CX chứa số chữ số của số cần in

XOR DX,DX ;Chuẩn bị cho phép chia DXAX cho 10

PUSH DX ;Số dư cất vào StackINC CX ;Tăng số chữ số lên 1CMP AX,0 ;So sánh thương với 0

JNE LAY_SO_DU ;Nếu <> 0 thì lặp lại quá trình chia DXAX cho 10MOV AH,2 ;In ra các chữ số của AX

Trang 19

3 Cho một mảng số liệu có tên M1 gồm 80 phần tử, mỗi phần tử cỡ 1 BYTE chứa 1 kí

tự Viết chương trình hợp ngữ đầy đủ làm các công việc sau:+ Vào một dòng kí tự lưu trong mảng.

+ Đếm và hiển thị những kí tự là chữ số ở dòng tiếp theo.Giải:

.MODEL SMALL.STACK 100H.DATA

INT 21H ;Đọc các kí tự nhập vào

CMP AL,0DH ;Xem có phải phím Enter khôngJE TIEP1 ;Nếu đúng thì nhảy đến nhãn TIEP1MOV [SI],AL ;Lưu kí tự đọc được vào ô nhớ trỏ bởi SI

INC SI ;Tăng SI 1 (do các phần tử trong mảng kiểu BYTE)CMP AL,48 ;So sánh kí tự nhập vào với ‘0’

JL LAP1 ;Nếu nhỏ hơn thì đọc kí tự tiếp theoCMP AL,57 ;So sánh kí tự nhập vào với ‘9’JG LAP1 ;Nếu lớn hơn thì đọc kí tự tiếp theoINC CX ;Nếu < ‘9’ thì tăng số chữ số lên 1JMP LAP1 ;Đọc kí tự tiếp theo

Trang 20

CMP [SI],’$’ ;So sánh [SI] với kí tự ‘$’

JE TIEP2 ;Nếu đúng thì nhảy tới nhãn TIEP2MOV DL,[SI] ;Nếu không thì gán DL bằng [SI]CMP DL,’0’ ;So sánh DL với ‘0’

JL NOT_NUMBER ;Nếu <’0’thì nhảy tới nhãn NOT_NUMBERCMP DL,’9’ ;Nếu >=’0’ thì so sánh với ‘9’

JG NOT_NUMBER ;Nếu >’9’ thì nhảy tới nhãn NOT_NUMBERINT 21H ;Nếu <=’9’ thì in ra chữ số đó

MOV DL,’ ‘ ;In ra dấu ‘ ‘INT 21H

INC SI ;Nếu không phải là chữ số thì tăng SI 1

JMP LAP2 ;Chuyển sang xét kí tự tiếp theo trong mảng M1TIEP2:

MOV AH,4CH ;Trả lại điều khiển cho hệ thốngINT 21H

MAIN ENDP

IN_DEC PROC ;Thủ tục in ra số hệ 10 chứa trong AXPUSH AX ;Lưu lại các thanh ghi

PUSH BXPUSH CXPUSH DX

Trang 21

JGE SODUONG ;Nếu AX>=0, nhảy tới SODUONGPUSH AX ;Nếu AX<0, lưu lại số trong AXMOV AH,2 ;In ra dấu âm ‘-‘

MOV DL,'-'INT 21H

POP AX ;Lấy lại số âm trong AX

NEG AX ;Rồi đổi dấu số âm trong AX thành số dươngSODUONG:

XOR CX,CX ;CX chứa số chữ số của số cần in

XOR DX,DX ;Chuẩn bị cho phép chia DXAX cho 10

PUSH DX ;Số dư cất vào StackINC CX ;Tăng số chữ số lên 1CMP AX,0 ;So sánh thương với 0

JNE LAY_SO_DU ;Nếu <> 0 thì lặp lại quá trình chia DXAX cho 10MOV AH,2 ;In ra các chữ số của AX

21

Trang 22

4 Viết chương trình hợp ngữ đầy đủ tính a=b+c với điều kiện:

+ a,b,c là các biến kiểu byte.

+ Thông báo để vào giá trị b,c bằng một số hệ 10 từ bàn phím.+ Tính a=b+c và thông báo kết quả lên màn hình.

(Nếu a9 hãy trừ đi 10 và in ra số 1, Đổi a ra chữ số và hiển thị )+ Về DOS

.MODEL SMALL.STACK 100H.DATA

S1 DB ‘Vao cac chu so tu 0 – 9: $’S2 DB ‘b = $’

S3 DB ‘c = $’

S4 DB ‘Tong cua b va c la: $’CRLF DB 13,10,’$’

.CODEMAIN PROC

MOV AX,@DATA ;Khởi tạo DSMOV DS,AX

MOV AH,9 ;In ra thông báo vào các chữ sốLEA DX,S1

INT 21H

LEA DX,CRLF ;Xuống dòngINT 21H

LEA DX,S2 ;In ra thông báo nhập b =INT 21H

MOV AH,1 ;Nhập giá trị cho bINT 21H

SUB AL,30H ;Đổi b thành số và chứa trong BLMOV BL,AL

LEA DX,CRLFINT 21H

LEA DX,S3 ;In ra thông báo nhập c = INT 21H

Trang 23

INT 21H

SUB AL,30H ;Đổi c thành số

ADD BL,AL ;Thực hiện b + c và chứa kết quả trong BL

LEA DX,CRLFINT 21H

LEA DX,S4 ;In ra thông báo tổng của b và c làINT 21H

CMP BL,10 ;So sánh tổng với 10

JL NHO_HON_10 ;Nếu nhỏ hơn thì nhảy tới nhãn NHO_HON_10MOV AH,2 ;Nếu lớn hơn 10 thì

MOV DL,’1’ ;In ra số 1INT 21H

SUB BL,10 ;Và trừ tổng đi 10NHO_HON_10:

23

Trang 24

5 Viết chương trình hợp ngữ đầy đủ thực hiện công việc sau

- Thông báo để vào một từ bất kỳ.( Từ dài nhất cũng không quá 15 kí tự)- Vào một từ và lưu trong mảng có tên Name ( Đếm số chữ).

- Nếu chữ đầu là chữ thường đổi thành chữ hoa.- Nếu các chữ tiếp theo là hoa đổi thành thường.- Hiển thị từ đã sửa ở dòng tiếp theo.

S1 DB ‘Ban hay vao mot cai ten: $‘S2 DB ‘Ten da sua: $‘

CRLF DB 13,10,’$’.CODE

CMP AL,13 ;Xem có ấn phím Enter không?

JE TIEP1 ;Nếu là phím Enter, nhảy tới nhãn TIEP1MOV [SI],AL ;Lưu kí tự vừa nhập vào mảng

INC CX ;Tăng số chữ cái lên 1

Trang 25

LEA DX,CRLFINT 21H

LEA DX,S2 ;In ra thông báo “Tên đã sửa: “INT 21H

LEA SI,S3 ;SI trỏ vào đầu mảng S3MOV AL,[SI] ;Gán AL = [SI]

CMP AL,’a’ ;So sánh kí tự đầu với ‘a’

JL NOT_LOWER ;Nếu <’a’ thì nhảy tới nhãn NOT_LOWERCMP AL,’z’ ;Nếu >=’a’ thì so sánh với ‘z’

JG NOT_LOWER ;Nếu >’z’ thì nhảy tới nhãn NOT_LOWERSUB AL,20H ;Nếu <=’z’ thì đổi thành chữ hoa

MOV AH,2 ;In ra kí tự đầu tiên của xâu chứa trong ALMOV DL,AL

INT 21HDEC CXLAP2:

INC SI ;Tăng SI, trỏ tới kí tự tiếp theo trong xâuMOV AL,[SI] ;Gán AL = [SI]

CMP AL,’A’ ;So sánh AL với ‘A’

JL NOT_UPPER ;Nếu <’A’ thì nhảy đến nhãn NOT_UPPERCMP AL,’Z’ ;Nếu >=’A’ thì so sánh với ‘Z’

JG NOT_UPPER ;Nếu >’Z’ thì nhảy đến nhãn NOT_UPPERADD AL,20H ;Nếu <=’Z’ thì là chữ hoa, đổi thành chữ thườngNOT_UPPER:

MOV AH,2 ;In ra kí tự trong ALMOV DL,AL

INT 21H

LOOP LAP2 ;Lặp lại với các kí tự tiếp theoMOV AH,4CH ;Trả lại điều khiển cho hệ thốngINT 21H

MAIN ENDPEND MAIN

25

Trang 26

6 Viết chương trình hợp ngữ đầy đủ thực hiện công việc sau

- Hiển thị thông báo :’Hãy gõ vào một chuỗi chữ cái hoa, CR để thôi’- Nhận chuỗi chữ cái hoa.

- Xuống dòng về đầu dòng.

- Hiển thị thông báo :’Chữ cuối cùng đã đổi ra chữ thường’- Hiển thị chữ cuối đã đã đổi ra chữ thường.

- Về DOS.Giải:

.MODEL SMALL.STACK 100H.DATA

S1 DB ‘Hay go vao mot chuoi chu cai hoa, CR de thoi: $’S2 DB ‘Chu cuoi cung da doi ra chu thuong: $’

CRLF DB 13,10,’$’.CODE

CMP AL,13 ;Xem có ấn Enter không?

JE TIEP1 ;Nếu ấn Enter thì nhảy đến nhãn TIEP1MOV BL,AL ;Chứa kí tự vừa đọc trong BL

JMP LAP1 ;Đọc kí tự tiếp theoTIEP1:

LEA DX,CRLFINT 21H

LEA DX,S2 ;In ra thông báo chữ cuối cùng đổi ra chữ thườngINT 21H

MOV AH,2

MOV DL,BL ;Chuyển chữ cuối cùng chứa trong BL vào DLADD DL,20H ;Đổi ra chữ thường

Trang 27

MOV AH,4CH ;Trả lại điều khiển cho hệ thốngINT 21H

MAIN ENDPEND MAIN

27

Trang 28

7 Viết chương trình hợp ngữ đầy đủ thực hiện công việc sau

- Hiển thị thông báo :’Hãy gõ vào một chuỗi chữ cái, hai chữ giống nhau để thôi’- Nhận chuỗi chữ cái, lưu vào mảng, nếu là chữ thường đổi ra chữ hoa.

- Xuống dòng về đầu dòng.

- Hiển thị thông báo :’Chữ cuối cùng đã đổi ra chữ hoa’- Hiển thị chữ cuối đã đã đổi ra chữ hoa.

- Về DOS.Giải:

.MODEL SMALL.STACK 100H.DATA

S1 DB ‘Hay go vao mot chuoi chu cai, hai chu giong nhau de thoi: $’S2 DB ‘Chu cuoi cung da doi ra chu hoa: $’

CRLF DB 13,10,’$’.CODE

INT 21H ;Nhập kí tự đầu tiênMOV BL,AL ;Chứa trong BL

MOV [SI],AL ;Lưu kí tự đầu tiên vào mảng

INT 21H ;Đọc kí tự tiếp theo

CMP AL,BL ;So sánh với kí tự trước đấy

JE TIEP1 ;Nếu bằng nhau thì nhảy đến nhãn TIEP1MOV BL,AL ;Nếu khác thì lưu lại kí tự vừa nhập vào BLMOV [SI],AL ;Lưu kí tự vừa nhập vào mảng

Trang 29

JMP LAP1 ;Đọc kí tự tiếp theoTIEP1:

MOV [SI],AL ;Lưu kí tự cuối cùng vào mảng

LOOP LAP2 ;Xét phần tử tiếp theo trong mảng, lặp lại CX lần

LEA DX,CRLFINT 21H

LEA DX,S2 ;In ra thông báo chữ cuối cùng đã đổi thành chữ hoaINT 21H

29

Ngày đăng: 16/11/2012, 11:26

Tài liệu cùng người dùng

Tài liệu liên quan