Ngày nay, với sự nhảy vọt của khoa học công nghệ nói chung và ngành công nghệ thông tin nói riêng, với những tính năng ưu việt, sự tiện dụng và ứng dụng rộng rãi trong mọi lĩnh vực, hoạt động của tin học trong đời sống, yêu cầu chúng ta phải nắm vững các kiến thức cơ bản về máy vi tính, tuy nhiên việc hiểu các ngôn ngữ bậc thấp để có thể dễ dàng làm việc và tiếp xúc gần hơn với ngôn ngữ máy là một điều rất quan trọng với những người đã, đang và sẽ trở thành Lập trình viên, đặc biệt là những người hoạt động trong các lĩnh vực đo lường, điều khiển và những người ứng dụng tin học vào các quá trình công nghệ.
                
              
                                            
                                
            
 
            
                 22 trang
22 trang | 
Chia sẻ: tuandn | Lượt xem: 3024 | Lượt tải: 4 
              
            Bạn đang xem trước 20 trang tài liệu Đề tài Lập trình hệ thống và Assembly, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BÁO CÁO
LẬP TRÌNH HỆ THỐNG VÀ ASSEMBLY
ĐỀ 15 : 
 Giáo viên Hướng Dẫn : Đặng Thành Phu
Nhóm 16 : 	Ninh Văn Bình
Nguyễn Sỹ Danh
Đào Hoàng Nam
Vũ Đức Tuấn
 Lớp :	09B2
Hà Nội, ngày 26 tháng 10 năm 2011
Giới thiệu
Ngày nay, với sự nhảy vọt của khoa học công nghệ nói chung và ngành công nghệ thông tin nói riêng, với những tính năng ưu việt, sự tiện dụng và ứng dụng rộng rãi trong mọi lĩnh vực, hoạt động của tin học trong đời sống, yêu cầu chúng ta phải nắm vững các kiến thức cơ bản về máy vi tính, tuy nhiên việc hiểu các ngôn ngữ bậc thấp để có thể dễ dàng làm việc và tiếp xúc gần hơn với ngôn ngữ máy là một điều rất quan trọng với những người đã, đang và sẽ trở thành Lập trình viên, đặc biệt là những người hoạt động trong các lĩnh vực đo lường, điều khiển và những người ứng dụng tin học vào các quá trình công nghệ.
Ngôn ngữ Assembler là một ngôn ngữ bậc thấp, rất gần với ngôn ngữ máy và tất nhiên rất gần với phần cứng máy tính. Với đặc điểm như vậy nên lập trình bằng ngôn ngữ Assembler có những đặc thù riêng có phần khác so với ngôn ngữ bậc cao.
Sau một thời gian được thầy dẫn dắt và hướng dẫn hết sức nhiệt tình, nhóm 6 lớp 09B2 đã hiểu được cách viết một MACRO, một chương trình con, các mô-đun liên kết,…để viết được một chương trình hoàn thiện. Sau đây, nhóm 6 lớp 09B2 xin được gửi tới thầy bản báo cáo bài tập lớn, được nhóm thực hiện trong thời gian qua.
Mô tả
Yêu cầu: Viết chương trình thiết lập 1 màn hình giới thiệu(mode 40*25), màn hình các chức năng và màn hình từng chức năng (mode 80*25) thực hiện 4 chức năng:
1 .... Hiện một số nguyên ra dạng binary
2 .... Sắp xếp dãy số theo chiều giảm dần
3 .... Máy tính có kRAM nào trên mainboard không?
4 ....Trở về màn hình giới thiệu.
Để giải quyết bài tập với yêu cầu trên ta sử dụng các MACRO, các chương trình con, các mô-đun liên kết, các biến nhớ,…
Mô tả phần thiết kế
Chương trình khi chạy gồm: 
* Màn hình giới thiệu: gồm 3 xâu:
+ Xâu 1: Chữ màu trắng, kết thúc bằng “$”
“ Vien Dai hoc Mo Ha Noi
	 Khoa cong nghe thong tin
	 ------------o0o-------------$ ” 
+ Xâu 2: Sử dụng BLINK, hiển thị chữ có màu đỏ, nền xanh, nhấp nháy lên màn hình:	“BAI TAP LON”
+ Xâu 3: Chữ màu trắng, kết thúc bằng “$”
	“Sinh viên thực hiện:
	Ninh Van Binh
	Nguyen Sy Danh
	Dao Hoang Nam
	Vu Duc Tuan
Lop:09B2
An Phim bat ki de tiep tuc
Con an ESC thi tro ve DOS $!”
* Màn hình chức năng:
Chỉ chứa 1 xâu: Chữ màu trắng, kết thúc bằng “$”
 CAC CHUC NANG HIEN DANG BINARY,
SAP XEP DAY SO THEO CHIEU GIAM DAN
 VA kRAM TREN MAINBOARD
------------------------------------------------------------
	1 ... Hien mot so nguyen ra dang binary 16 bit
	2 ... Sap xep day so theo chieu giam dan	
3 ... May tinh co kRAM tren mainboard khong?
	4 ... Tro ve man hinh gioi thieu
	Hay chon: $”
Dùng cmp để vào các chức năng
Dùng HienString để hiện chương trình con.
Lập trình các mô-đun
INCLUDE lib1.asm 
.MODEL small ;code<64k, data<64k
.STACK 100h ;tinh theo byte
.DATA
GT1 db 13,10,' Vien Dai hoc Mo Ha Noi'
 db 13,10,' Khoa cong nghe thong tin'
 db 13,10,' ------------o0o-----------$'
GT2 db 'BAI TAP LON',0
GT3 db 13,10,13,10,13,10,' Cac sinh vien thuc hien:'
db 13,10,' 1. Ninh Van Binh'
 db 13,10,' 2. Nguyen Sy Danh'
 db 13,10,' 3. Dao Hoang Nam'
 db 13,10,' 4. Vu Duc Tuan'
 db 13,10,' Lop : 09b2'
 db 13,10,13,10,13,10,' An phim bat ki de tiep tuc'
 db 13,10,' Con ESC thi ve DOS$'
 mode_cu db ?
;Khai bao bien cho man hinh chuc nang
 cn db 13,10,' CAC CHUC NANG HIEN DANG BINARY,'
 db 13,10,' SAP XEP DAY SO THEO CHIEU GIAM DAN'
 db 13,10,' VA kRAM TREN MAINBOARD'
 db 13,10,' ---------------***----------------'
 db 13,10,13,10,' 1 ... Hien mot so nguyen ra dang binary 16 bit'
 db 13,10,' 2 ... Sap xep day so theo chieu giam dan'
 db 13,10,' 3 ... May tinh co kRAM tren mainboard khong?'
 db 13,10,' 4 ... Tro ve man hinh gioi thieu'
 db 13,10,13,10,' HAY CHON : $'
;Khai bao bien cho chuc nang hien 1 so nguyen sang dang binary
 hb1 db 13,10,' Chuc nang hien dang binary'
 db 13,10,' --------------------------'
 db 13,10,13,10,' Vao so nguyen : $ '
 hb2 db 13,10,13,10,' Dang binary la : $ '
 tieptuc db 13,10,' Co tiep tuc CT (c/k) ? $'
;Khai bao bien cho chuc nang sap xep 1 day so theo chieu giam dan
 M1 db 13,10,' Chuc nang sap xep day so theo chieu giam dan'
 db 13,10,' --------------------------------------------'
 db 13,10,13,10,' Hay vao so luong chu so : $ '
 M2 db 13,10,' Hay vao day so : $'
 M3 db 13,10,' a[$'
 M4 db ']=$'
 M5 db 13,10,' Cac so vua vao la : $'
 M6 db ' $'
 M7 db 13,10,' Day so da sap xep la : $'
 M8 db 13,10,' Co tiep tuc CT (c/k) ? $'
 i dw ?
 slcs dw ?
 index dw ?
 a dw 100 dup (?)
;Khai bao bien cho chuc nang MT co bao nhieu kRAM tren mainboard
 kR1 db 13,10,' MAY TINH CO kRAM TREN MAINBOARD KHONG ?'
 db 13,10,' ----------------------------------------'
 db 13,10,13,10,' So luong kRAM co them tren mainboard la : $'
 kR2 db ' 0 k$'
 kR3 db ' 16 k$'
 kR4 db '32 k$'
 kR5 db '64 k$'
 kR6 db 13,10,' An phim bat ky de ve man hinh chuc nang $'
.CODE
 PS:
 mov ax,@data
 mov ds,ax
 mov ah,0fh ; lay mode cu 80*25
 int 10h
 mov mode_cu,al; cat mode cu(al)->bien mode_cu
 mov al,0 ; dat mode 40*25
 mov ah,0
 int 10h
 HienString GT1
 lea si,GT2
 BLINK 8,7,10101100b
 HienString GT3
 mov ah,1 ; cho an 1 phim
 int 21h 
 cmp al,27 ; ESC 27
 jne CONTINUE
 mov al,mode_cu; hoi phuc lai mode 80*25
 mov ah,0
 int 10h
 mov ah,4ch ; ve DOS
 int 21h
 CONTINUE:
 mov al,mode_cu; hoi phung mode 80*25
 mov ah,0
 int 10h
 HienString cn
 mov ah,1 ; cho 1 ky tu tu ban phim
 int 21h
 cmp al,'1'
 jne Test_2
 call HIENBNR
 jmp CONTINUE
 Test_2:
 cmp al,'2'
 jne Test_3
 call SXG
 jmp CONTINUE
 Test_3:
 cmp al,'3'
 jne Test_4
 call KRAM
 jmp CONTINUE
 Test_4:
 cmp al,'4'
 jne Test_5
 call PS
 Test_5:
 jmp CONTINUE
; Chuong trinh con hien 1 so ra dang binary
 HIENBNR PROC
 push ax bx cx 
 L_HB1: 
 clrscr
 HienString hb1
 call VAO_SO_N
 mov bx,ax
 HienString hb2
 mov cl,16
 L_HB2: 
 xor al,al
 shl bx,1
 adc al,30h
 mov ah,0eh
 int 10h
 loop L_HB2
 mov al,'B'
 mov ah,0eh
 int 10h
 HienString tieptuc
 mov ah,1
 int 21h
 cmp al,'c'
 jne Thoat_HB
 jmp L_HB1
 Thoat_HB:
 pop cx bx ax
 ret
 HIENBNR ENDP
;Chuong trinh con sap xep day so theo thu tu giam dan
 SXG PROC
 push ax bx cx dx
 T1:
 clrscr
 HienString M1
 call VAO_SO_N
 mov slcs,ax
 mov index,ax
 mov cx,ax
 mov bx,offset a
 HienString M2
 mov i,0
 T2:
 HienString M3
 mov ax,i
 call HIEN_SO_N
 HienString M4
 call VAO_SO_N
 mov [bx],ax
 inc i
 add bx,2
 loop T2
 HienString M5
 call HIEN_DAY
 dec index
 T3:
 mov cx,slcs
 mov bx,offset a
 dec cx
 T4:
 mov ax,[bx]
 mov dx,[bx+2]
 cmp ax,dx
 jg T5
 mov [bx],dx
 mov [bx+2],ax
 T5:
 add bx,2
 loop T4
 dec index
 jnz T3
 HienString M7
 call HIEN_DAY
 HienString M8
 mov ah,1
 int 21h
 cmp al,'c'
 jne Thoat
 jmp T1
 Thoat:
 pop dx cx bx ax
 ret
 SXG ENDP
 HIEN_DAY PROC
 push ax bx cx
 mov cx,slcs
 mov bx,offset a
 HD:
 mov ax,[bx]
 call HIEN_SO_N
 HienString M6
 add bx,2
 loop HD
 pop cx bx ax
 ret
 HIEN_DAY ENDP
 KRAM PROC
 push ax 
 L_kRAM1:
 clrscr
 HienString kR1
 int 11h
 and al,0ch
 shr al,1
 shr al,1
 jnz L_kRAM2
 HienString kR2
 jmp Exit_kRAM
 L_kRAM2:
 cmp al,1
 jne L_kRAM3
 HienString kR3
 jmp Exit_kRAM
 L_kRAM3:
 cmp al,2
 jne L_kRAM4
 HienString kR4
 jmp Exit_kRAM
 L_kRAM4:
 HienString kR5
 Exit_kRAM:
 HienString kR6
 mov ah,1
 int 21h
 pop ax
 ret
 KRAM ENDP
INCLUDE lib2.asm
 END PS
;-----------------------------------------------------
; MACRO HIỆN MỘT XÂU KÍ TỰ |
; KẾT THÚC BẰNG “$” RA MAN HINH |
;-----------------------------------------------------
HienString MACRO xau
	push AX DX
	mov DX,offset xau	; DX trỏ đến đầu xâu
	mov AH,9	; Chức năng hiện 1 xâu kí tự
	int 21h	; (kết thúc bằng “$”) lên MH
	pop DX AX
	ENDM
;-----------------------------------------
; MACRO HIỆN 1 XÂU KÍ TỰ |
; CÓ MÀU SẮC, NHẤP NHÁY |
;------------------------------------------
BLINK MACRO x,y,tt 
local B1,Exit_B
push si ax bx cx dx
 mov dl,x
 mov dh,y
 mov ah,2
 int 10h
 B1:
 mov al,[si]
 and al,al
 jz Exit_B
 mov cx,1
 mov bl,tt
 mov ah,9
 int 10h
 inc dl
 mov ah,2
 int 10h
 inc si
 jmp B1
 Exit_B
 pop dx cx bx ax si
 ENDM
Kết quả chạy
Màn hình giới thiệu
Ở màn hình giới thiệu được đặt mode 40*25, và bao gồm 3 xâu kí tự.
Xâu thứ nhất và thứ ba kết thúc bằng “$” và sử dụng MACRO “Hienstring” để hiện xâu kí tự ra màn hình.
Xâu thứ hai sử dụng MACRO “BLINK” để hiện xâu “BAI TAP LON” ra màn hình có màu sắc với nền màu xanh, chữ màu đỏ, nhấp nháy.
Sau đó, màn hình dừng để chờ 1 kí tự được nhập vào từ bàn phím.
Sau khi nhập 1 kí tự bất kì từ bàn phím khác ESC (nếu nhấn ESC thì thoát ra màn hình DOS) thì màn hình 40*25 được phục hồi về màn hình 80*25 và hiển thị màn hình chức năng.
Màn hình chức năng
Màn hình chức năng chỉ có 1 xâu kết thúc bằng ‘$’, sử dụng MACRO “HienString” để hiện xâu đó ra màn hình.
Sau đó chờ 1 kí tự được nhập từ bàn phím, sử dụng lệnh “cmp” để so sánh phím nhập vào với các số 1,2,3,4 và theo thứ tự đó để nhảy tới các chương trình con tương ứng.
MH thực hiện chức năng hiện 1 số ra dạng binary 16 bit
Nếu phím nhập vào bằng 1 thì gọi chương trình con “HIENBNR” để thực hiện.
Ở chương trình con “HIENBNR” ta thực hiện nhập một số nguyên bất kì thông qua chương trình con “VAO_SO_N” và MACRO “HienString” để hiện kết quả ra màn hình.
MH thực hiện chức năng sắp xếp dãy số theo chiều giảm dần
Khi cmp al bằng số 2 thì chương trình con “SXG” được gọi để thực hiện. Ban đầu sử dụng chương trình con “VAO_SO_N” và “HIEN_SO_N” để nhập vào số lượng chữ số và giá trị từng số. Chương trình con “HIEN_DAY” hiện dãy số vừa vào và hiện dãy số đã sắp xếp.
MH thực hiện chức năng máy tính có kRAM trên mainboard không?
Nếu cmp al bằng 3 thì chương trình con “KRAM” được gọi để thực hiện.
Bit thứ ba và thứ tư của byte có địa chỉ 40h:10h của vùng nhớ biến BIOS cho biết số lượng kRAM trên mainboard máy tính chúng ta đang dùng. Để biết được số lượng kRAM trên mainboard ta phải tách 2 bit cho biết số lượng kRAM qua lệnh and “al,0ch” và 2 lần lệnh “shr al,1” để chuyển 2 bit thứ ba và thứ tư này về vị trí 0 và 1.
Thông qua lệnh nhảy jnz và jne để biết giá trị các bit cờ qua đó biết được số lượng kRAM trên mainboard.
Sau mỗi chương trình con, nhấn phím “c” để tiếp tục chương trình, còn nhấn phím bất kì để quay về màn hình chức năng bằng cách sử dụng lệnh cmp al với chữ “c”.
LỜI CẢM ƠN
	Lời cảm ơn đầu tiên và quan trọng nhất chúng em xin gửi tới thầy Đặng Thành Phu, giáo viên giảng dạy môn LẬP TRÌNH HỆ THỐNG VÀ ASSEMBLY của Viện Đại học Mở Hà Nội đã tận tình chỉ bảo, hướng dẫn chúng em trong quá trình học tập bộ môn và quá trình hoàn thành bài tập lớn.Nếu không có thầy tận tâm chỉ bảo thì chúng em sẽ khó có thể hoàn thành được bào tập này.
	Lời cảm ơn thứ hai chúng con xin gửi tới bố mẹ, những người đã hàng ngày quan tâm, chăm sóc và lo lắng cho chúng con.
	Cảm ơn những người bạn lớp 09B2 và những người bạn đồng trang lứa, những người đã không ngần ngại chia sẻ cho chúng tôi kiến thức, đóng góp ý kiến giúp chúng tôi hoàn thiện hơn trong quá trình hoàn thành bài tập của mình.
Hà Nội, ngày 30 tháng 11 năm 2011
Nhóm thực hiện: Nhóm 6_Lớp 09B2
Ninh Văn Bình
Nguyễn Sỹ Danh
Đào Hoàng Nam
Vũ Đức Tuấn
MỤC LỤC