1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài tập lập trình hệ thống

19 3,7K 12

Đ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

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 175,56 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đồ Án Lập Trình Hệ Thống Bài Tập 1 (Assembly) 1. Viết chương trình sử dụng hàm 7, ngắt 21h để nhận 1 ký tự từ bàn phím, dùng 1 biến để lưu trữ ký tự nhận được (do sinh viên tự đặt tên biến), sau đó sử dụng hàm 2, ngắt 21h để in ra màn hình ký tự nhận được đang lưu trong biến ấy. Chương trình phải có đủ các câu thông báo nhập và xuất. Ví dụ: Hay go 1 phim: B Ky tu nhan duoc la: B 2. Làm lại chương trình bài 1 sao cho không cần sử dụng biến để lưu trữ ký tự mà kết quả chạy chương trình vẫn không thay đổi.

Trang 1

Đồ Án Lập Trình Hệ Thống Bài Tập 1 (Assembly)

1 Viết chương trình sử dụng hàm 7, ngắt 21h để nhận 1 ký tự từ bàn phím, dùng 1 biến để lưu trữ ký tự nhận được (do sinh viên tự đặt tên biến), sau đó sử dụng hàm

2, ngắt 21h để in ra màn hình ký tự nhận được đang lưu trong biến ấy Chương trình phải có đủ các câu thông báo nhập và xuất

Ví dụ: Hay go 1 phim: B

Ky tu nhan duoc la: B

2 Làm lại chương trình bài 1 sao cho không cần sử dụng biến để lưu trữ ký tự mà kết quả chạy chương trình vẫn không thay đổi

3 Viết chương trình nhận 1 ký tự từ bàn phím, sau đó in ra màn hình ký tự kế

trước và kế sau của ký tự vừa nhập

Ví dụ: Hay go 1 phim: B

Ky tu ke truoc : A

Ky tu ke sau : C

4 Viết chương trình cho phép nhập từ bàn phím tên của 1 người, sao đó in ra màn hình chuỗi có dạng như sau:

Xin chao <tên_đã_nhập>

Ví dụ: Khi chạy chương trình, nhập vào là: Nguyen Van A

Chuỗi in ra màn hình sẽ là: Xin chao Nguyen Van A

5 Viết chương trình cho nhập 1 ký tự từ màn hình và xuất câu thông báo tương ứng sau:

- Nếu ký tự nhập là ‘S’ hay ‘s’ thì in ra “Good morning!”

- Nếu ký tự nhập là ‘T’ hay ‘t’ thì in ra “Good Afternoon!”

- Nếu ký tự nhập là ‘C’ hay ‘c’ thì in ra “Good everning!”

6 Viết chương trình nhập từ bàn phím 1 ký tự thường Sau đó in ra màn hình lần lượt

các ký tự từ ký tự nhận được đến 'z' sao cho giữa các ký tự có 1 khoảng trống

.model small

.stack 100h

.data

tb1 db 'nhap vao 1 ki tu

thuong: $'

tb2 db ' $'

tb3 db 10,13,'nhap lai 1 ki

tu $'

tb4 db 10,13, 'chuoi ki tu

theo yeu cau la: $'

kitu db 0

.code

main proc

mov ax,@data

mov ds,ax

lea dx,tb1 mov ah,9 int 21h nhap:

mov ah,1 int 21h cmp al,'a'

jl nhaplai cmp al,'z'

jg nhaplai jmp hienthi

nhaplai:

lea dx,tb3 mov ah,9 int 21h

jmp nhap

hienthi: mov kitu,al lea dx,tb4 mov ah,9 int 21h lap:

mov dl,kitu mov ah,2 int 21h lea dx,tb2 mov ah,9 int 21h inc kitu cmp kitu,'z'

jg ketthuc

Trang 2

jmp lap

ketthuc:

mov ah,4ch

int 21h main endp end main

7 Không dùng hàm 0Ah/21h, hãy dùng lệnh lặp để viết chương trình nhập vào 1

chuỗi ký tự Sau khi nhập xong đếm xem chuỗi có bao nhiêu ký tự In ra màn hình

chuỗi nhận được và số ký tự có trong chuỗi

Ví dụ: S = "Hello world !" ==> Số kí tự trong chuỗi là 13

.MODEL SMALL

.STACK 100

.DATA

DEM DW 0

MANG DB 100

DUP(?)

TB1 DB "NHAP

CHUOI: $"

TB2 DB 10,13,"IN

CHUOI: $"

TB3 DB 10,13,"SO KT

TRONG CHUOI: $"

SO_KT DW 0

CHIA10 DW 10

.CODE

MAIN PROC

MOV AX,@DATA

MOV DS,AX

MOV AH,9

LEA DX,TB1

INT 21H

XOR BX,BX

NHAP:

MOV AH,1

INT 21H

CMP AL,0DH

JE XU_LY MOV MANG[BX],AL INC BX LOOP NHAP XU_LY:

MOV CX,BX MOV SO_KT,BX

MOV AH,9 LEA DX,TB2 INT 21H MOV AH,2

XOR BX,BX HIEN_THI:

MOV DL,MANG[BX]

INC BX INT 21H LOOP HIEN_THI

MOV AH,9

LEA DX,TB3 INT 21H

XOR AX,AX MOV AX,SO_KT XOR CX,CX KI_TU:

XOR DX,DX DIV CHIA10 PUSH DX INC CX CMP AX,0 JNE KI_TU MOV AH,2

HIEN_SO:

POP DX ADD DL,30H INT 21H LOOP HIEN_SO MOV AH,4CH INT 21H MAIN ENDP END MAIN

8 Viết chương trình cho phép nhập vào một chuỗi bất kỳ Sau đó:

- Đổi tất cả ký tự thường thành ký tự hoa và in ra màn hình

- Đổi tất cả ký tự hoa thành ký tự thường và in ra màn hình

Ví dụ: S = ‘weLcOme To AssEmblY’

In ra: welcome to assembly - WELCOME TO ASSEMBLY

.MODEL SMALL

.STACK 100

.DATA

TB1 DB 'NHAP CHUOI:

$'

TB2 DB 10,13, 'CHUOI

KI TU HOA: $'

TB3 DB 10,13, 'CHUOI

KI TU THUONG: $'

MANGNHAP DB 100 DUP (?)

MANGTHUONG DB

100 DUP (?) MANGHOA DB 100 DUP (?)

KITU DW 0

.CODE

MAIN PROC

MOV AX,@DATA MOV DS,AX

LEA DX,TB1 MOV AH,9 INT 21H ;NHAP CHUOI LEA DI,MANGNHAP

Trang 3

MOV CX,0

LAPNHAP:

MOV AH,1

INT 21H

CMP AL,13

JE DUNGNHAP

MOV [DI],AL

INC DI

INC CX

JMP LAPNHAP

DUNGNHAP:

MOV KITU,CX

;NHAP MANG CHU

THUONG

LEA DI,MANGNHAP

LEA

SI,MANGTHUONG

MOV CX,KITU

LAMLAI:

CMP [DI],5AH

JLE SSTIEP

JMP

KHONGCHUYEN

SSTIEP:

CMP [DI],41H

JGE CVTHUONG

JMP

KHONGCHUYEN

CVTHUONG:

MOV AX,[DI]

ADD AX,20H

MOV [SI],AX

INC SI

INC DI

JMP FINI

KHONGCHUYEN:

MOV AX,[DI]

MOV [SI],AX INC DI INC SI FINI:

LOOP LAMLAI ;NHAP MANG CHU HOA

LEA DI,MANGNHAP LEA SI,MANGHOA MOV CX,KITU LAMLAI1:

CMP [DI],61H JGE CVHOA JMP

KHONGCHUYEN1 CVHOA:

MOV AX,[DI]

SUB AX,20H MOV [SI],AX INC SI INC DI JMP FINI1 KHONGCHUYEN1:

MOV AX,[DI]

MOV [SI],AX INC SI INC DI FINI1:

LOOP LAMLAI1

;IN XAU HOA LEA DX,TB2

MOV AH,9 INT 21H

LEA DI,MANGHOA MOV CX,KITU LAPIN:

MOV DL,[DI] MOV AH,2 INT 21H INC DI LOOP LAPIN ;IN XAU THUONG LEA DX,TB3 MOV AH,9 INT 21H

LEA DI,MANGTHUONG MOV CX,KITU LAPIN1:

MOV DL,[DI] MOV AH,2 INT 21H INC DI LOOP LAPIN1

EXIT:

MOV AH,4CH INT 21H MAIN ENDP END MAIN

9 Nhập vào 2 chuỗi số, đổi 2 chuỗi thành số, sau đó cộng hai số, đổi ra chuỗi và xuất chuỗi tổng

Ví dụ: S1 = "123" => N1 = 123

S2 = "456" => N2 = 456

N = N1 + N2 = 123 + 456 = 579 => S = "579" (xuất S ra màn hình)

10 Nhập 2 số nguyên dương A, B Tính A/B, A*B (không dùng lệnh DIV, MUL) và

in ra màn hình kết quả

Ví dụ: A=18, B=3

Tính A/B: 18 - 3 - 3 - 3 - 3 - 3 - 3 = 0, vậy A/B = 6 (tổng trừ B cho đến khi A = 0)

Tính A*B = 18 + 18 + 18 = 54

;CHUA CO KIEM TRA

SO A>B OR B>A

Trang 4

;CHUA CO KIEM TRA

CHIA HET HAY

KHONG CHIA HET

.MODEL SMALL

.STACK 100

.DATA

TB1 DB 'SO THU

NHAT: $'

TB2 DB 10,13,'SO THU

HAI : $'

TB3 DB 10,13, 'TICH

HAI SO: $'

TB4 DB 10,13,

'THUONG HAI SO: $'

TICH DW 0

THUONG DW 0

SOTG DW 0

SO1 DW 0

SO2 DW 0

.CODE

MAIN PROC

MOV AX,@DATA

MOV DS,AX

MOV AH,9

LEA DX,TB1

INT 21H

CALL NHAPSO

MOV SO1,AX

MOV AH,9 LEA DX,TB2 INT 21H

CALL NHAPSO MOV SO2,AX

TICH2SO:

MOV CX,SO1 MOV BX,SO2 DEC CX LAPTICH:

ADD BX,SO2

MOV TICH,BX LOOP LAPTICH

THUONG2SO:

MOV CX,0 MOV AX,SO1 MOV BX,SO2 LAPTHUONG:

SUB AX,BX INC CX

CMP AX,BX JGE LAPTHUONG MOV THUONG,CX

LEA DX,TB3 MOV AH,9 INT 21H MOV AX,TICH CALL HIENTHI

LEA DX,TB4 MOV AH,9 INT 21H MOV AX,THUONG CALL HIENTHI

MOV AH,4CH INT 21H

NHAPSO PROC MOV CX,10 START:

MOV AH,1 INT 21H CMP AL,13

JE THOATCTC SUB AL,30H

Trang 5

MOV AH,0

MOV BX,AX

MOV AX,SOTG

MUL CX

ADD AX,BX

MOV SOTG,AX

JMP START

THOATCTC:

MOV AX,SOTG

MOV SOTG,0

RET

NHAPSO ENDP HIENTHI PROC

XOR CX,CX MOV BX,10 LAPHT:

XOR DX,DX INC CX DIV BX PUSH DX CMP AX,0

JNE LAPHT MOV AH,02H INRA:

POP DX ADD DL,30H INT 21H LOOP INRA RET

HIENTHI ENDP END MAIN

11 Viết chương trình nhập 2 số nhị phân 16 bit A và B Sau đó in ra màn hình các kết quả ở dạng nhị phân: A + B, A – B, A and B, A or B

Ví dụ: Nhập số nhị phân A: 10101010

Nhập số nhị phân B: 01010101

A + B = 11111111 A – B

= 01010101

A and B = 00000000 A or

B = 11111111

.MODEL SMALL

.STACK 100H

.DATA

SOA DW 0

SOB DW 0

LUU DW 0

TB1 DB "NHAP SO

A: $"

TB2 DB 10,13,"NHAP

SO B: $"

TB3 DB 10,13,"A+B=

$"

TB4 DB 10,13,"A-B=

$"

TB5 DB 10,13,"A

AND B= $"

TB6 DB 10,13,"A OR

B= $"

KQ DW 0

.CODE

MAIN PROC

MOV AX,@DATA

MOV DS,AX

MOV AH,9 LEA DX,TB1 INT 21H

CALL NHAPSO

MOV SOA,DX

MOV AH,9 LEA DX,TB2 INT 21H

CALL NHAPSO MOV SOB,DX

;

_

MOV AX,SOA AADDB:

ADD AX,SOB MOV KQ,AX

MOV AH,9 LEA DX,TB3 INT 21H

CALL INSO

MOV AX,SOA ASUBB:

SUB AX,SOB MOV KQ,AX

MOV AH,9 LEA DX,TB4 INT 21H

CALL INSO

MOV AX,SOA

AANDB:

AND AX,SOB MOV KQ,AX

MOV AH,9 LEA DX,TB5 INT 21H

Trang 6

CALL INSO

MOV AX,SOA

AORB:

OR AX,SOB

MOV KQ,AX

MOV AH,9

LEA DX,TB6

INT 21H

CALL INSO

MOV AH,4CH

INT 21H

MAIN ENDP

INSO PROC MOV CX, 16 MOV AH,2 HIEN_THI:

XOR DX,DX SHL KQ,1 ADC DL,30H INT 21H LOOP HIEN_THI RET

INSO ENDP

PROC NHAPSO XOR DX,DX XOR BX,BX NHAP:

MOV AH,1 INT 21H CMP AL,"0"

JL NHAP CMP AL,"1"

JG NHAP AND AL,0FH SHL DX, 1

OR DL,AL INC BX CMP BX,16 JNE NHAP RET

NHAPSO ENDP

END MAIN

12 Viết chương trình nhập 1 ký tự từ bàn phím, sau đó in ra màn hình mã ASCII của

ký tự nhận được ở dạng thập lục phân, thập phân và nhị phân

Ví dụ: Nhập 1 ký tự: A

Mã ASCII dạng Hex: 41h

Mã ASCII dạng Dec: 65

Mã ASCII dạng Bin: 01000001b

.MODEL SMALL

.STACK 100

.DATA

TB1 DB "VUI LONG

NHAP KI TU: $"

TB2 DB 10,13,"Ma

ASCII dang DEC: $"

TB3 DB 10,13,"Ma

ASCII dang BIN: $"

TB4 DB 10,13,"Ma

ASCII dang HEX: $"

KITU DB 0

sochia dw 10

.CODE

MAIN PROC

MOV AX,@DATA

MOV DS,AX

MOV AH,09H LEA DX,TB1 INT 21H

MOV AH,01H INT 21H

MOV KITU,AL

MOV AH,09H LEA DX,TB2 INT 21H

HT_THAPPHAN:

XOR DX, DX XOR CX,CX XOR AX,AX

MOV AL,KITU chia:

DIV sochia PUSH DX INC CX XOR DX, DX CMP AX, 0 JNE chia

MOV AH, 2 HT:

pop DX ADD DL, 30H int 21h

Trang 7

LOOP HT

MOV AH,09H

LEA DX,TB3

INT 21H

MOV CX,8

XOR BX,BX

MOV BH,KITU

HT_NHIPHAN:

XOR DX,DX

MOV AH, 2

SHL BH, 1

ADC DL, 30h

;ADD DL, 30H

int 21h

;MOV [SI], DL

;INC SI

LOOP HT_NHIPHAN

MOV AH,9 LEA DX,TB4 INT 21H

XOR BX,BX MOV BH,KITU MOV CX,2

IN_HEX:

MOV DL,BH SHR DL,4 CMP DL,10

JB IN_SO ADD DL,37H

JMP IN_CHU

IN_SO:

ADD DL,30H IN_CHU:

MOV AH,2 INT 21H SHL BX,4

LOOP IN_HEX

mov ah, 4ch int 21h main endp end main

13 Viết lại chương trình bài 11 nhưng 2 số A và B được nhập theo dạng thập lục

phân Các kết quả được in ra màn hình ở dạng nhị phân

.MODEL SMALL

.STACK 100

.DATA

SOA DW 0

SOB DW 0

LUU DW 0

TB1 DB "NHAP SO

A: $"

TB2 DB 10,13,"NHAP

SO B: $"

TB3 DB 10,13,"A+B=

$"

TB4 DB 10,13,"A-B=

$"

TB5 DB 10,13,"A

AND B= $"

TB6 DB 10,13,"A OR

B= $"

KQ DW 0

.CODE

MAIN PROC

MOV AX,@DATA

MOV DS,AX

MOV AH,9

LEA DX,TB1 INT 21H

CALL NHAPSO

MOV SOA,BX

MOV AH,9 LEA DX,TB2 INT 21H

CALL NHAPSO MOV SOB,BX

;

_

MOV AX,SOA AADDB:

ADD AX,SOB MOV KQ,AX

MOV AH,9 LEA DX,TB3

INT 21H

CALL INSO

MOV AX,SOA ASUBB:

SUB AX,SOB MOV KQ,AX

MOV AH,9 LEA DX,TB4 INT 21H

CALL INSO

MOV AX,SOA

AANDB:

AND AX,SOB MOV KQ,AX

MOV AH,9 LEA DX,TB5 INT 21H

Trang 8

CALL INSO

MOV AX,SOA

AORB:

OR AX,SOB

MOV KQ,AX

MOV AH,9

LEA DX,TB6

INT 21H

CALL INSO

MOV AH,4CH

INT 21H

MAIN ENDP

INSO PROC MOV CX, 16 MOV AH,2 HIEN_THI:

XOR DX,DX SHL KQ,1 ADC DL,30H INT 21H LOOP HIEN_THI RET

INSO ENDP

NHAPSO PROC MOV CX,4 XOR BX,BX NHAP:

MOV AH,1 INT 21H

CMP AL,"0"

JL NHAP CMP AL,"9"

JG CHU_CAI JMP SO CHU_CAI:

CMP AL,"A"

JL NHAP CMP AL,"F"

JG NHAP SUB AL,7H SO:

SUB AL,30H XOR AH,AH SHL BX,4

OR BL,AL LOOP NHAP RET

NHAPSO ENDP

14 Viết lại chương trình bài 11 nhưng 2 số A và B được nhập theo dạng thập phân

In các kết quả ở dạng thập phân: A + B, A – B

.MODEL SMALL

.STACK 100

.DATA

SOA DW 0

SOB DW 0

CHIA10 DW 10

TB1 DB "NHAP SO

A: $"

TB2 DB 10,13,"NHAP

SO B: $"

TB3 DB 10,13,"A+B=

$"

TB4 DB 10,13,"A-B=

$"

KQ DW 0

TONG DW 0

NHAN10 DW 10

.CODE

MAIN PROC

MOV AX,@DATA

MOV DS,AX

MOV AH,9

LEA DX,TB1

INT 21H

CALL NHAPSO

MOV AX,TONG MOV SOA,AX

MOV AH,9 LEA DX,TB2 INT 21H

CALL NHAPSO

MOV AX,TONG MOV SOB,AX

;

_

MOV AX,SOA AADDB:

ADD AX,SOB

MOV KQ,AX

MOV AH,9 LEA DX,TB3 INT 21H

CALL INSO

MOV AX,SOA ASUBB:

SUB AX,SOB MOV KQ,AX

MOV AH,9 LEA DX,TB4 INT 21H

CALL INSO

MOV AH,4CH INT 21H

MAIN ENDP

Trang 9

INSO PROC

XOR DX, DX

XOR CX,CX

MOV AX,KQ

CHIA:

DIV CHIA10

PUSH DX

INC CX

XOR DX, DX

CMP AX,0

JNE CHIA

MOV AH, 2

HT:

POP DX ADD DL,30H INT 21H LOOP HT RET INSO ENDP

NHAPSO PROC MOV CX,4 MOV TONG,0 NHAP:

MOV AH,1 INT 21H SUB AL,30H XOR BX,BX MOV BL,AL MOV AX,TONG MUL NHAN10 ADD AX,BX MOV TONG,AX LOOP NHAP RET

NHAPSO ENDP

15 Viết chương trình tính giai thừa n! Với n là số nguyên dương nhập từ bàn phím In kết quả ra màn hình ở dạng thập phân Cho biết, khả năng của 8086 tính được n

lớn nhất là bao nhiêu?

.MODEL SMALL

.STACK 100

.DATA

SO DW 0

NHAN10 DW 10

TB DB "NHAP SO: $"

TINH DW 0

.CODE

MAIN PROC

MOV AX,@DATA

MOV DS,AX

MOV AH,9

LEA DX,TB

INT 21H

MOV CX,4

NHAP:

MOV AH,1 INT 21H

AND AL,0FH

XOR BX,BX MOV BL,AL

MOV AX,SO MUL NHAN10 ADD AX,BX

MOV SO,AX LOOP NHAP

MOV CX,SO MOV AX,1

GT:

MUL CX

LOOP GT MOV TINH,AX

MOV AH,4CH

Trang 10

INT 21H

MAIN ENDP END MAIN

16 Viết chương trình tính ước số chung lớn nhất của 2 số a và b! Với a, b là số nguyên dương nhập từ bàn phím In kết quả ra màn hình ở dạng thập phân

;CHUA KIEM TRA GIA SU A>B; CHUA KIEM TRA NHAP VAO LA SO 0

.MODEL SMALL

.STACK 100

.DATA

SOA DW 0

SOB DW 0

TB1 DB "NHAP SO

A: $"

TB2 DB 10,13,"NHAP

SO B: $"

TB3 DB

10,13,"USCLN CUA

HAI SO: $"

BIEN DW 0

NHAN10 DW 10

CHIA10 DW 10

TONG DW 0

UOC_CHUNG DW 0

.CODE

MAIN PROC

MOV AX,@DATA

MOV DS,AX

MOV AH,9 LEA DX,TB1 INT 21H

CALL NHAPSO

MOV AX,TONG MOV SOA,AX

MOV AH,9 LEA DX,TB2 INT 21H

CALL NHAPSO

MOV AX,TONG MOV SOB,AX

;287/91 du 14

;91/14 du 7

;14/7 du 0

;->>> UCLN=7

XOR BX,BX XOR AX,AX MOV AX,SOA MOV BX,SOB MOV BIEN,BX

UCLN:

XOR DX,DX DIV BIEN MOV AX,BIEN XOR BX,BX MOV BX,BIEN MOV BIEN,DX CMP DX,0 JNE UCLN

Ngày đăng: 07/01/2016, 16:04

TỪ KHÓA LIÊN QUAN

w