Viết chương trình thực hiện 4 chức năng chức năng type more, chức năng tính giá trị biểu thức a

17 1 0
Viết chương trình thực hiện 4 chức năng chức năng type  more,  chức năng tính giá trị biểu thức a

Đ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

Cơ chế liên kết ngôn ngữ Assembly...2II... Ngôn ngữ Assembly- Ngôn ngữ Assembly là ngôn ngữ bậc thấp.- Ưu điểm:Chạy nhanh và tiết kiệm bộ nhớ.Dễ dàng thâm nhập trực tiếp vào các thiết bị

Trang 1

Hà N i - Năm 2023ộ Gi ng Viên Hả ướng Dẫẫn : Đ ng Thành Phuặ L p : AAS3132023.001ớ

Sinh Viên Th c Hi n : Nguyêẫn Nh t Long -17A10010223-17A01ự ệ ậ Toàn Ch& V' -17A10010275-17A01

1

Trang 2

MỤC LỤC

I Mở đầu về lập trình hệ thống 2

1 Ngôn ngữ Assembly 2

2 Cơ chế liên kết ngôn ngữ Assembly 2

II Nội dung đề tài bài tập lớn 3

Trang 3

I.Mở đầu về lập trình hệ thống 1 Ngôn ngữ Assembly

- Ngôn ngữ Assembly là ngôn ngữ bậc thấp.- Ưu điểm:

Chạy nhanh và tiết kiệm bộ nhớ.

Dễ dàng thâm nhập trực tiếp vào các thiết bị phần cứng như: vùng nhớ, các cổng, các thanh ghi,…

- Nhược điểm:

Khó viết vì phải am hiểu sâu về phần cứng Khó khăn trong việc kiểm tra lỗi.

Khó khăn trong việc chuyển giao chương trình lên các máy tính có cấu trúc khác nhau.

- Ứng dụng:

Các chương trình của ROM BIOS, Các chương trình trong các hệ thống nhúng, Các chương trình tạo và diệt VIRUS.

2 Cơ chế liên kết ngôn ngữ Assembly

- Cơ chế liên kết ngôn ngữ Assembly với bất kỳ một ngôn ngữ bậc cao

nào về cơ bản là giống nhau Do vậy, nếu nắm vững cơ chế liên kết giữa ngôn ngữ Assembly với một ngôn ngữ bậc cao nào đó thì sẽ dễ dàng hiểu được sự liên kết ngôn ngữ Assembly với một loại ngôn ngữ bậc cao khác

- Nhìn chung có hai cách thường dùng để liên kết ngôn ngữ Assembly

với ngôn ngữ bậc cao, đó là:

Inline Assembly với cơ chế chèn một khối lệnh Assembly vào chương trình được viết bằng ngôn ngữ bậc cao và

Viết tách biệt module (tệp) của ngôn ngữ bậc cao và module (tệp) của ngôn ngữ Assembly.

2

Trang 4

- Để phần nào hiểu được cơ chế liên kết ngôn ngữ Assembly với ngôn

ngữ bậc cao, trong phần này đề cập đến sự liên kết giữa ngôn ngữ Assembly với ngôn ngữ C/C ++

II.Nội dung đề tài bài tập lớn

- Viết chương trình thực hiện 4 chức năng:

Chức năng TYPE | more Chức năng tính giá trị biểu thức an Chức năng hiện địa chỉ cơ sở của videoram Chức năng thoát khỏi chương trình

III. Các công cụ hỗ trợ 1 Các macro hỗ trợ

- Macro hiện một xâu ký tự kết thúc bằng ‘$’ ra màn hình.

HienString MACRO xau push AX DX

mov DX,offset xau ; DX tro den dau xau mov AH,9 ; Chuc nang hien 1 xau ky tu int 21h ; (ket thuc bang '$') len man hinh

mov AH,0fh ; Chuc nang lay mode man hinh hien thoi int 10h ; va so mode nam o AL

mov AH,0 ; Chuc nang dat mode cho man hinh int 10h ; so mode can dat nam o AL pop AX

3

Trang 5

mov BX,10 ; Mot so hang nhan

xor CX,CX ; Phan so da vao truoc (luc dau bang 0) mov SI,CX ; Co dau cua so (luc dau coi nhu so duong)

cmp AL,'-' ; Ky tu vua vao la dai '-' jne VSN2 ; Khong phai dau '-' thi nhay inc SI ; con khong thi co dau len 1 jmp VSN1

sub AL,30h ; Chuyen ky tu vua vao tu ma ASCII sang dang so

xor AH,AH ; AH=0 (AX la so vua vao)

xchg AX,CX ; Doi cheo so vua vao va phan so da vao truoc mul BX ; Nhan phan so da vao truoc voi 10

add CX,AX ; Cong so vua vao voi phan so da vao sau khi nhan 10

jmp VSN1 VSN3:

and SI,SI ; Dung co ZF (Neu SI#0 thi so vao la am) jz VSN4 ; So vua vao la duong thi nhay

4

Trang 6

neg CX ; Bu 2 gia tri vua vao de duoc so am

mov BX,10 ; Mot so hang nhan

xor CX,CX ; Phan so da vao truoc (luc dau bang 0) mov SI,CX ; Co dau cua so (luc dau coi nhu so duong)

cmp AL,'-' ; Ky tu vua vao la dai '-' jne VSN2 ; Khong phai dau '-' thi nhay inc SI ; con khong thi co dau len 1 jmp VSN1

sub AL,30h ; Chuyen ky tu vua vao tu ma ASCII sang dang so xor AH,AH ; AH=0 (AX la so vua vao)

xchg AX,CX ; Doi cheo so vua vao va phan so da vao truoc mul BX ; Nhan phan so da vao truoc voi 10

add CX,AX ; Cong so vua vao voi phan so da vao sau khi nhan 10

jmp VSN1

5

Trang 7

and SI,SI ; Dung co ZF (Neu SI#0 thi so vao la am) jz VSN4 ; So vua vao la duong thi nhay

neg CX ; Bu 2 gia tri vua vao de duoc so am mov bx,16 ; BX=so chia

xor cx,cx ; CX=so lan cat vao stack (luc dau=0) HSH1:

xor dx,dx ; DX=0

div bx ; DX:AX chia cho 16 (DX luon=0) cmp dx,10 ; Lieu so du nho hon 10 (tu 0 den 9) ? jb HSH2 ; Dung thi nhay

add dx,7 ; Con khon thi dx=dx+7 HSH2:

add dx,30h ; Chuyen so du dang so ra dang ASCII push dx ; Cat vao stack

inc cx ; So lan cat vao stack tang len 1 and ax,ax ; Lieu thuong da bang 0 ?

jnz HSH1 ; Chua bang khong thi tiep tuc thuat toan chia HSH3: ; con khong thi tao vong lap lay tu stack cac gia

pop ax ; tri da cat va hien ra man hinh 6

Trang 8

mov ah,0ah ; Chuc nang nhan 1 xau tu int 21h ; ban phim va de vao buff mov bx,dx ; bx tro den dau buf

inc bx ; bx tro den byte chua so luong ky tu da vao mov cl,[bx] ; cl=so luong ky tu thuc te da vao

xor ch,ch ; ch=0 de cx=cl

inc bx ; bx tro den byte dau tien chua ky tu da vao add bx,cx ; bx tro den byte chua 0dh (Enter) mov [bx],ch ; Cho byte do bang 0 pop dx cx bx ax

GET_FILE_NAME ENDP

IV.Cách thực hiện

- Liên kết giữa ngôn ngữ C++ và Assembly với sự phân công nhiệm vụ như sau: Tệp ngôn ngữ C++ viết chương trình chính làm nhiệm vụ hiện màn hình giới thiệu và màn hình chức năng và Ngôn ngữ

7

Trang 9

Assembly thiết lập 4 hàm: HIENTEP(), LUYTHUA(), DCVRAM(),

cout<<"\n Truong Dai Hoc Mo Ha Noi"; cout<<"\n Khoa Cong Nghe Thong Tin"; cout<<"\n -o0o -"; cout<<"\n\n\n BAI TAP LON "; cout<<"\n\n\n Cac sinh vien thuc hien:"; cout<<"\n Nguyen Nhat Long Lop:17A01"; cout<<"\n Toan Chi Vi Lop:17A01"; cout<<"\n\n\n Co tiep tuc CT (c/k)?";

Trang 10

cout<<"\n -";

cout<<"\n\n\n 1 Chuc nang hien noi dung tep"; cout<<"\n 2 Tinh a luy thua n";

cout<<"\n 3 Dia chi co so videoram"; cout<<"\n 4 Ve DOS";

cout<<"\n\n\n Hay chon: "; cin>>cn;

switch(cn){

case : HIENTEP();1 break; case : LUYTHUA();2 break; case : DCVRAM();3 break; case : VeDOS();4 break;

default: cout<<"\n Khong co chuc nang nay";break;

Trang 11

Err_O db 13,10,' Khong mo duoc tep !$' Err_R db 13,10,' Khong doc duoc tep !$' Err_W db 13,10,' Khong ghi duoc tep !$' Err_C db 13,10,' Khong dong duoc tep !$' HienString hx ; Hien thong bao hx

lea dx,buff ; DX tro den byte dau cua buff call GET_FILE_NAME ; Vao ten tep can hien HienString kc

lea dx,file_name ; Mo tep da co de doc mov al,0 ; De doc

mov ah,3dh ; Chuc nang mo tep da co int 21h

jnc L_CT1 ; CF=0 (mo tep tot) thi nhay den L_CT1, HienString Err_O ; con neu co loi CF=1 thi bao loi jmp Exit_CT ; roi nhay ve Exit_CT

L_CT1:

mov the_tep,ax ; Neu mo tep tot thi dua the tep co trong AX->bien the_tep

10

Trang 12

L_CT2: ; Vong lap doc 512 byte cua tep -> vung dem mov bx,the_tep ; BX=the tep copy di

mov cx,512 ; So luong byte can doc lea dx,dem ; DX tro den dau vung dem mov ah,3fh ; Chuc nang doc

int 21h

jnc L_CT3 ; CF=0 (doc tot) thi nhay den L_CT3,

HienString Err_R ; con CF=1 (khong doc duoc) hien thong bao err_r neu doc tep bi loi (CF=1)

jmp DONG_TEP ; roi nhay ve DONG_TEP L_CT3:

and ax,ax ; Lieu so luong byte thuc te da doc duoc bang 0 ? jz DONG_TEP ; ZF=0 (dung bang 0 la het tep) thi nhay den dong cac tep va ket thuc

mov bx,1 ; con khong bang 0 thi tien hanh dua ra man hinh voi the tep=1

mov cx,ax ; Dua so luong byte doc duoc vao cx

lea dx,dem ; DX tro den vung dem chua so lieu can dua ra man hinh mov ah,40h ; Chuc nang hien(ghi tep voi the tep bang 1) int 21h

jnc L_CT ; CF=0 (ghi tep tot) thi nhay den L_CT,

HienString Err_W ; con CF=1 thi hien thong bao err_w (khong ghi duoc)

jmp DONG_TEP ; roi nhay ve DONG_TEP L_CT:

HienString more ; Hien chu More len man hinh mov ah,1 ; cho 1 ky tu tu ban phim int 21h

11

Trang 13

jmp L_CT2 ; Nhay ve tiep tuc doc va hien DONG_TEP:

mov bx,the_tep ; Chuc nang dong tep mov ah,3eh

int 21h

jnc Exit_CT ; CF=0 (dong tep tot) thi nhay ve Exit_CT, HienString Err_C ; con CF=1 (khong dong duoc) thi hien loi Exit_CT:

HienString tieptuc ; Hien thong bao tiep tuc mov ah,1 ; cho 1 ky tu tu ban phim int 21h

cmp al,'c' ; Ky tu vao co phai 'c'

jne Thoat_CT ; Khong phai 'c'thi nhay de Thoat_CT jmp L_CT0 ; con dung la 'c' thi nhay ve L_CT0

Trang 14

clrscr ; Xoa man hinh

HienString m1 ; Hien thong bao m1 call VAO_SO_N ; Nhan gia tri a mov bx,ax ; BX=gia tri cua a HienString m2 ; Hien thong bao m2 call VAO_SO_N ; Nhan gia tri n mov cx,ax ; CX=gia tri cua n

HienString crlf ; Hien xuong hang, quay dau dong mov ax,bx ; AX=gia tri a

call HIEN_SO_N ; Hien gia tri a

HienString m3 ; Hien thong bao ' luy thua ' mov ax,cx ; AX=gia tri n

call HIEN_SO_N ; Hien gia tri n HienString m4 ; Hien ' la: '

mov ax,1 ; AX=1 (tich ban dau bang 1)

Trang 15

call HIEN_SO_N ; Hien ket qua a luy thua n co trong AX HienString m5 ; Hien thong bao m5

mov ah,1 ; Cho an 1 phim int 21h

cmp al,'c' ; Lieu phim am la 'c'

jne EXIT ; Khong phai thi nhay ve EXIT de ket thuc CT, jmp L0 ; con dung la chu 'c' thi nhay ve L0 de tiep tuc CT db 13,10,13,10,' Dia chi co so VIDEORAM la: $' tieptuc db 13,10,' An phim bat ky de tiep tuc CT $' code

PUBLIC @DCVRAM$qv @DCVRAM$qv PROC clrscr ; Xoa man hinh

HienString m1 ; Hien thong bao m1

int 11h ; Noi dung o nho co dia chi 0:410h -> AL and al,00110000b ; Tach 2 bit chua thong tin ve loai dieu khien man hinh

14

Trang 16

cmp al,00110000b ; Kiem tra 2 bit 5,6 co bang 1 1 khong? je MONO ; Neu bang 1 1 thi nhay den MONO, mov ax,0B000h ; con khong thi gan d/c co so VIDEORAM

call HIEN_HEXA ; Hien dia chi co so VIDEORAM HienString tieptuc ; Hien thong bao tieptuc

mov ah,1 ; Cho an mot phim

Trang 17

- Kết luận: Các hàm chạy đúng chức năng Liên kết ngôn ngữ Assembly

với ngôn ngữ C hoặc C là giống nhau, chỉ khác có tên hàm của ngôn ++ ngữ Assembly

V.Tài liệu tham khảo

- Turbo Assembler Ver.4.0 (User Guide) Borland International, INC

1800 GREEN HILLS ROAD, 1993

- Turbo Assembler Ver.4.0 (Quick Reference Guide) Borland

International, INC 1800 GREEN HILLS ROAD, 1993

- Turbo Assembler và ứng dụng, Đặng Thành Phu, NXB Khoa học và

Kỹ thuật, 2007

- Lập trình trên môi trường Windows với MFC, Dương Thăng Long,

NXB Khoa học và Kỹ thuật, 2006

- PC System Programming – An in depth reference for DOS

programmer, Michael Tischer, Abacus, 1990.

- Công cụ phần mềm hỗ trợ THELP

16

Ngày đăng: 08/04/2024, 12:52

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

Tài liệu liên quan