Giáo trình Hợp ngữ - Đại học Đà Lạt

110 37 0
Giáo trình Hợp ngữ - Đại học Đà Lạt

Đ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

Giáo trình Hợp ngữ với nội dung gồm 8 chương đem tới cho các bạn nội dung sau: Gọi ngắt và trình debug; hợp ngữ dùng trong PC; phương pháp lập trình, ngăn xếp và thủ tục, mođun chương trình và các kiểu định vị địa chỉ, sử dụng phân đoạn toàn phần, chương trình ứng dụng... Mời các bạn cùng tham khảo giáo trình.

TRƯỜNG ĐẠI HỌC ĐÀ LẠT F7G GIÁO TRÌNH HP NGỮ NGUYỄN HỮU LỘC 2002 Hợp Ngữ -2- MỤC LỤC LỜI MỞ ĐẦU CHƯƠNG 1: GIỚI THIỆU CHUNG I CAÙC THANH GHI TRONG VI XỬ LÝ HỌ INTEL: Các ghi thông dụng: Các ghi phân đoạn Các ghi mục trỏ: Thanh ghi trạng thái (FLAG) II ĐỊA CHỈ Ô NHỚ: III MỘT SỐ LỆNH CƠ BẢN: CHƯƠNG 2: GỌI NGẮT VÀ TRÌNH DEBUG 11 I CÁC LỆNH GỌI NGẮT: 11 II TRÌNH DEBUG: 12 III VÀI CHƯƠNG TRÌNH ỨNG DỤNG : 15 CHƯƠNG 3: HP NGỮ DÙNG TRONG PC 19 I DÒNG LỆNH: 19 II DỮ LIỆU: 20 Haèng: 20 Bieán: .21 III CẤU TRÚC CHƯƠNG TRÌNH: .22 CHƯƠNG 4: PHƯƠNG PHÁP LẬP TRÌNH 27 I TOÅNG QUAN: 27 II CÁC LỆNH LIÊN QUAN ĐẾN RẼ NHÁNH: 27 Các lệnh rẽ nhánh có điều kiện: 28 Các lệnh rẽ nhánh không điều kiện: 29 III CÁC CẤU TRÚC ĐIỀU KHIỂN: 29 CHƯƠNG 5: NGĂN XẾP VÀ THỦ TỤC 38 I NGĂN XẾP: 38 II THỦ TỤC: 38 III SỬ DỤNG PTR VÀ LABEL: 40 IV VÀI CHƯƠNG TRÌNH ỨNG DỤNG: 41 Hiện số thập phân: 41 Hiện số nhị phân thập lục phân 44 Đọc từ bàn phím 46 Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ -3- CHƯƠNG 6: MUN CHƯƠNG TRÌNH & CÁC KIỂU ĐỊNH VỊ ĐỊA CHỈ .51 I MUN CHƯƠNG TRÌNH .51 Định hướng biên dịch extrn 51 Định hướng biên dịch public 52 Lập thư viện - tạo vó lệnh (macro) 54 II CAÙC KIỂU ĐỊNH VỊ ĐỊA CHỈ 56 III CHƯƠNG TRÌNH ỨNG DUÏNG .60 IV TẠO TẬP TIN COM .67 1- Daïng chương trình COM 68 2- ng dụng tập tin com 69 CHƯƠNG 7: SỬ DỤNG PHÂN ĐOẠN TOÀN PHẦN .76 I- SỬ DỤNG CÁC ĐỊNH HƯỚNG BIÊN DỊCH 76 Segment 76 Định hướng biên dịch assume 79 II - DẠNG CỦA CHƯƠNG TRÌNH EXE SỬ DỤNG TRONG CÁC PHƯƠNG PHÁP CŨ: 79 III- VÍ DỤ CHƯƠNG TRÌNH COM 83 CHƯƠNG 8: CHƯƠNG TRÌNH ỨNG DUÏNG 85 I IN NỘI DUNG VĂN BẢN RA MÁY IN: 85 Sử dụng hàm 40h ngắt 21h (DOS) để thực 85 Sử dụng hàm 01h ngaét 17h (ROMBIOS) 85 II ĐẾM SỐ TỪ TRONG MỘT TẬP TIN 86 III- ĐỔI NGƯC CHUỖI 89 IV CHƯƠNG TRÌNH HIỂN THỊ THỜI GIAN .90 V CHƯƠNG TRÌNH THƯỜNG TRÚ BỘ NHỚ 97 Phụ lục A: MỘT SỐ CHƯƠNG TRÌNH PHỤC VỤ CỦA DOS .105 Phụ lục B: MỘT SỐ CHƯƠNG TRÌNH PHỤC VỤ CỦA ROM-BIOS 108 TÀI LIỆU THAM KHAÛO 110 Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ -4- LỜI MỞ ĐẦU Hợp ngữ môn học dành cho sinh viên chuyên ngành kỹ thuật Là ngôn ngữ can thiệp sâu vào hệ thống máy tính, hợp ngữ thường sử dụng phần việc tương đối tinh tế điều khiển hệ thống, vi điều khiển Tuy với người lần làm quen với ngôn ngữ này, việc tiếp thu thật khó khăn lẽ ngôn ngữ gần với ngôn ngữ máy sử dụng ký tự gợi nhớ nên khó hiểu sử dụng ngôn ngữ cấp cao Pascal, C v.v Ngoài ra, người học phải biết phần mềm mà phải hiểu phần cứng mức độ Điều tạo áp lực lớn gây khó khăn cho người học Trong nhiều năm giảng dạy môn này, nhận thấy có nhiều sách, tài liệu tham khảo viết hợp ngữ song để có tài liệu đáp ứng yêu cầu sinh viên việc tiếp thu môn hợp ngữ từ dễ đến khó có phương pháp thật Do thực giáo trình với mong ước có tài liệu đáp ứng yêu cầu Trong giáo trình, có đưa vào nhiều ví dụ ứng dụng từ thấp đến cao để sinh viên tiếp thu dễ dàng môn học Tuy tài liệu không tránh khỏi sai sót, mong đồng nghiệp, sinh viên bạn đọc góp ý Hoàn thành giáo trình này, xin chân thành cám ơn đến đồng nghiệp Khoa Vật lý Trường Đại học Dalat động viên, góp ý tạo điều kiện cho trình thực Tôi xin ghi nhận đóng góp nhiều hệ sinh viên khoa vật lý, khoa toán - tin để giáo trình xếp ngày dễ hiểu hợp lý Nguyễn Hữu Lộc Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ -5- CHƯƠNG 1: GIỚI THIỆU CHUNG Tại phải học lập trình với hợp ngữ có nhiều ngôn ngữ cấp cao C Pascal dùng để lập trình dễ dàng hơn? Có thể nói có nhiều câu trả lời cho câu hỏi Nhưng ban đầu, xét hợp ngữ lệnh tương ứng với lệnh ngôn ngữ máy Nói cách khác, dòng lệnh chương trình lệnh hợp ngữ từ máy tương ứng với lệnh máy n dòng chương trình tạo chương trình máy gồm n từ Như hợp ngữ xem ngôn ngữ gần với ngôn ngữ máy, tiếp cận đến tất ngóc ngách máy quan trọng thực chương trình viết hợp ngữ nhanh so với viết ngôn ngữ cấp cao khác Tuy cần thấy nhiều ngôn ngữ cấp cao hổ trợ giao diện với hợp ngữ, nói cách khác viết đoạn hợp ngữ chương trình viết ngôn ngữ cấp cao C Pascal Điều cho phép lập trình hiệu với phần việc sát với hệ thống đòi hỏi thời gian nhanh Trong kiến trúc máy tính nhiều cấp, việc chuyển chương trình người sử dụng từ ngôn ngữ sang chương trình dùng ngôn ngữ khác gọi chương trình dịch Ngôn ngữ sử dụng để viết chương trình ban đầu gọi ngôn ngữ nguồn ngôn ngữ sau dịch gọi ngôn ngữ đích Người ta phân biệt chương trình dịch làm hai loại tùy theo mối quan hệ ngôn ngữ nguồn ngôn ngữ đích Khi ngôn ngữ nguồn gồm ký tự gợi nhớ lệnh ngôn ngữ máy chương trình dịch gọi hợp dịch (assembler) ngôn ngữ nguồn hợp ngữ (assembly language) Trong ngôn ngữ nguồn ngôn ngữ cấp cao C Pascal chương trình dịch gọi biên dịch I CÁC THANH GHI TRONG VI XỬ LÝ HỌ INTEL: Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ -6- Bộ vi xử lý 8088 địa hóa đến 220 byte địa Những lệnh 8088 thực với từ bit hay byte với từ 16 bits 8088 sử dụng địa 20 bits để truy cập đến 220 byte ô nhớ Vì ghi có chiều dài 16 bits nên địa dùng 20 bits có khó khăn thực Để giải vấn đề này, nhà sản xuất vi xử lý sử dụng ghi phân đoạn (một dùng cho lệnh, cho liệu, cho ngăn xếp dự trữ) Những ghi xem ô nhớ nằm bên vi xử lý có thời gian truy xuất cao, với 8088, có 14 ghi chia làm loại: - Các ghi làm việc; - Các phân đoạn; - Các ghi bước nhảy (offset); - Thanh ghi trạng thái (Cờ: FLAG) Các ghi thông dụng: Bao gồm ghi Mỗi ghi có chức riêng chúng nơi lưu trữ kết trung gian: AX ghi 16 bit gọi ghi tích lũy (Accumulator) sử dụng thực phép tính số học BX ghi 16 bit gọi ghi (Base register) CX ghi 16 bit gọi ghi đếm (Counter) DX ghi 16 bit gọi ghi liệu (Data) Nên biết ghi phân làm hai ghi bit sử dụng riêng rẽ được: AX BX CX DX = = = = AH BH CH DH vaø vaø và AL; BL; CL; DL Cũng nên nhớ phép toán thực với ghi nhanh chúng thực với ô nhớ nhớ Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ -7- Các ghi phân đoạn Gồm ghi: CS viết tắt từ "Code Segment", nơi lưu trữ địa phân đoạn nhớ lệnh chương trình nạp vào (mã máy) DS viết tắt từ "Data Segment", nơi lưu trữ địa phân đoạn nhớ đặt liệu (data) chương trình SS viết tắt từ "Stack Segment", nơi lưu trữ địa phân đoạn ngăn xếp ES viết tắt từ "Extra Segment", nơi lưu trữ địa phân đoạn dự trữ thường dùng ghi giữ liệu Các ghi mục trỏ: Các ghi giữ giá trị bước nhảy (offset ) kết hợp với địa phân đoạn Tổng cộng có ghi: SI viết tắt từ "Source Index" Thanh ghi ghi 16 bit sử dụng thực phép toán với chuỗi (dãy ký tự); thường dùng kết hợp với ghi phân đoạn DS DI viết tắt từ "Destination Index" Thanh ghi ghi 16 bit sử dụng thực phép toán với chuỗi (dãy ký tự); thường dùng kết hợp với ghi phân đoạn DS Tuy nhiên trường hợp chuyển chuỗi kết hợp với ghi phân đoạn ES BP "Base Pointer" Thanh ghi 16 bit kết hợp với ghi phân đoạn SS (SS:BP) để đưa liệu vào ngăn xếp gọi chương trình (CALL) SP "Stack Pointer" Thanh ghi 16 bit kết hợp với ghi phân đoạn SS (SS:SP) để phần tử cuối ngăn xếp IP gọi trỏ lệnh (Instruction Pointer) Thanh ghi 16 bit kết hợp với ghi phân đoạn CS (CS:IP) để đến lệnh thực Nội dung Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ -8- ghi thay đổi trực tiếp; bị thay đổi cách gián tiếp thông qua lệnh nhảy bước, qua chương trình qua ngắt Thanh ghi trạng thái (FLAG) Thanh ghi trang thái ghi gồm 16 bit (Cờ) Giá trị bit ghi độc lập với bit khác ghi Người ta thường xử lý bit số bit có ảnh hưởng đến hoạt động chương trình Những bit gọi báo (indicator) chia làm loại: Các báo trạng thái: bit ý nghóa Nhớ (Carry) Chẵn lẻ (Parity) Nhớ phụ (Auxiliairy carry) Không (Zero) Dấu (Sign) 11 Tràn (Overflow) Các báo điều khiển bit 10 ý nghóa Bẩy (Trap) Ngắt (Interrupt) Hướng (Direction) viết tắt CF PF AF ZF SF OF viết tắt TF IF DF Caùc bit 1, 5, 12, 13, 14, 15 ghi trạng thái 16 bit không sử dụng II ĐỊA CHỈ Ô NHỚ: Bộ nhớ máy tính bao gồm dãy ô nhớ đánh số lưu giữõ giá trị số Số tương ứng ô nhớ gọi địa chỉ, ô nhớ giữ bit Trên máy tính IBM PC, nhớ chia thành vùng 65536 byte gọi phân đoạn, địa ô nhớ bao gồm phần: số phân đoạn bước nhảy (offset) tính từ vị trí ban đầu phân đoạn; có dạng: Phân đoạn: bước nhảy (Segment:Offset) Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ -9- Các lệnh chiếm nhiều ô nhớ nhớ, điều phụ thuộc vào độ phức tạp lệnh III MỘT SỐ LỆNH CƠ BẢN: MOV: lệnh hợp ngữ Nội dung toán hạng bên phải chuyển sang toán hạng bên trái Ví dụ: MOV AX, 10 MOV AX, BX MOV AX, [BX] LEA:(Load Effective Address) tương tự MOV ,OFFSET Ví dụ:LEA DX,MSG thay MOV DX, OFSET MSG ADD: cộng số bit 16 bit, kết đưa vào nhớ ghi Ví dụ: ADD AX, BX ADD AH, AL INC: thêm đơn vị vào ghi cho trước, kết nhận tương tự CỘNG với Ví dụ: INC AX INC BL ADC: thực lệnh cộng ADD sau thêm giá trị có báo CARRY vào kết nhận Ví dụ: ADC DL,30 SUB: thực trừ lượng từ số, kết đặt vào nhớ ghi Ví dụ: SUB AL, BL MUL: nhân toán hạng cho trước với lượng đặt AX AL (accumulator) Kết đặt vào AH AL toán hạng byte đặt DX AX toán hạng từ (word) Ví dụ: MUL BH MUL BX DIV: chia từ (số bị chia AX) toán hạng bit (số chia) chia từ đôi - double word (trong DX, AX) toán hạng 16 bit Thương số đặt AL số dư đặt AH toán hạng byte thương số đặt AX số dư đặt DX sử dụng từ-word Ví dụ: DIV BX DIV BH Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 10 - CMP: cho phép so sánh nội dung hai ghi ô nhớ So sánh thực phép trừ nhiên mục đích đạt kết phép trư ø mà chủ yếu so sánh hai toán hạng sau lệnh so sánh thường thấy lệnh nhảy bước có điều kiện phụ thuộc vào báo trình so sánh Ví dụ: CMP DL, 3A JNZ: nhảy bước đến nhãn (label) cho trước báo zero làø Ví dụ: JNZ Tiep JLE: nhảy bước đến nhãn (label) cho trước kết nhỏù Ví dụ: JLE Lap LOOP: lặp lại lúc ghi CX giảm đơn vị thực rẽ nhánh đến nhãn cho trước CX Ví dụ: LOOP Lap RCL: dịch chuyển tất bit phía trái vị trí nhiều vị trí Những bit khỏi bên TRÁI vào báo CARRY trước đưa lại vào bên phải toán hạng Ví dụ: RCL AH,1 SHR: dịch chuyển tất bit phía phải vị trí nhiều vị trí Ví dụ: SHR AH,1 Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 96 - MOV AL,1CH CALL SETUP_INT ;trở DOS MOV AH,4CH INT 21H MAIN ENDP ; TIME_INT PROC ;thủ tục ngắt ;kích hoạt mạch thời gian PUSH DS; cất giá trị tức thời DS MOV AX,@DATA MOV DS,AX ;DS trỏ đến đoạn liệu ;lấy thời gian LEA BX, TIME_BUF ; BX trỏ đến đệm ;thời gian CALL GET_TIME ; cất thời gian bộđệm ;hiển thị thời gian LEA DX,TIME_BUF MOV AH,09H INT 21H ;phục hồi vị trí troû MOV AH,2 MOV BH,0 MOV DX,CURSOR_POS INT 10H IRET TIME_INT ENDP ; END MAIN Lệnh LINK gồm mun PGM2_1.ASM, PGM1_2.ASM, PGM2_2.ASM Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 97 - V CHƯƠNG TRÌNH THƯỜNG TRÚ BỘ NHỚ Cũng hiển thị thường trú nhớ (terminate and stay resident) Thông thường kết thúc chương trình, nhớ mà chiếm giữ DOS sử dụng để nạp chương trình khác Tuy nhiên chương trình TSR kết thúc, nhớ không bị thu hồi lại Chính chương trình TSR gọi chương trình thường trú nhớ (memory resident program) Để trở DOS, chương trình TSR kết thúc cách sử dụng ngắt 27h hay ngắt 21h (hàm 31h) Chúng ta tạo chương trình COM để sử dụng ngắt 27h cần xác định số byte lại thường trú nhớ Cấu trúc chương trình COM khiến việc tính toán dễ dàng có phân đoạn chương trình Một muốn kết thúc hoàn toàn nghóa chương trình TSR không hoạt động Chương trình phải kích hoạt tác động tổ hợp phím (Ví dụ:Ctrl+Shift) Ưu điểm chương trình thường trú chúng kích hoạt chạy chương trình khác Chương trình gồm phần: Phần khởi tạo thiết lập vectơ ngắt phục vụ ngắt Tập tin PGM3_1.ASM EXTRN EXTRN PUBLIC Nguyễn Hữu Lộc MAIN:NEAR, SETUP_INT:NEAR NEW_VEC:DWORD, OLD_VEC:DWORD INITIALIZE Khoa Vật Lý Hợp Ngữ - 98 - C_SEG SEGMENT PUBLIC ASSUME CS:C_SEG INITIALIZE PROC ;thiết lập vectơ ngắt MOV NEW_VEC,OFFSET MAIN; lưu địa MOV NEW_VEC+2,CS LEA DI, OLD_VEC ; DI trỏ vectơ cũ LEA SI, NEW_VEC ; SI trỏ vectơ MOV AL,09H ;ngắt bàn phím CALL SETUP_INT ; thiết lập vectơ ngắt ;trở DOS LEA DX, INITIALIZE INT 27H ; Kết thúc lại thường trú INITIALIZE ENDP C_SEG ENDS END INITIALIZE Cách đơn giản để nhận biết phím điều khiển kiểm tra cờ phím (hàm 2- ngắt 16h) Chúng ta sử dụng tổ hợp phím Ctrl Shift phải để kích hoạt kết thúc hiển thị đồng hồ Khi kích hoạt, thời gian hiển thị góc phải hình Đầu tiên phải chép lại liệu hình để sau kết thúc hiển thị đồng hồ ta phục hồi lại hình cũ Thủ tục SET_CURSOR thiết lập vị trí trỏ hàng cột DL Thủ tục SAVE_SCREEN chép liệu hình vào đệm Thủ tục RESTOR_SCREEN trả lại liệu cho đệm hình Tập tin PGM3_2.ASM EXTRN SS_BUF:BYTE PUBLIC SAVE_SCREEN,RESTOR_SCREEN, SET_CURSOR C_SEG SEGMENT PUBLIC ASSUME CS:C_SEG Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 99 - ; SAVE_SCREEN PROC ;lưu giữ ký tự góc phải hình LEA DI,SS_BUF ; Bộ đệm hình MOV CX,8 MOV DL,72 ;cột 72 CLD ; xoá DF cho thao tác chuỗi SS_LOOP: CALL SET_CURSOR;thiết lập trỏ MOV AH,08H ; đọc ký tự hình INT 10H ;AH=thuộc tính/AL=ký tự STOSW ; cất ký tự thuộc tính INC DL ; cột LOOP SS_LOOP RET SAVE_SCREEN ENDP ; RESTOR_SCREEN PROC ;phuïc hồi hình cất LEA SI,SS_BUF ;SI trỏ đến đệm MOV DI,8 ;lặp lần MOV DL,72 ;cột 72 MOV CX,1 ; lần ký tự RS_LOOP: CALL SET_CURSOR ;di chuyển trỏ LODSW ;AL=ký tự/AH=thuộc tính MOV BL,AH MOV AH,9 ; viết ký tự thuộc tính MOV BH,0 ;trang INT 10h INC DL ;vị trí ký tự DEC DI JG RS_LOOP RET Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 100 - RESTOR_SCREEN END ; SET_CURSOR PROC ;chuyển trỏ đến hàng 0, cột DL ; vào DL=số hiệu cột MOV AH,2 MOV BH,0 MOV DH,0 INT 10H SET_CURSOR END ; C_SEG ENDS END Bây sẵn sàng để viết thường trình ngắt Để xác định xem hiển thị thời gian có kích hoạt hay không ta sử dụng cờ biến đổi ON_FLAG Cờ thiết lập thời gian hiển thị MAIN thủ tục ngắt Tập tin PGM3_3.ASM ;chương trình thường trú nhớ thời gian ; kích hoạt tổ hợp phím Ctrl+Shift phải EXTRN INITIALIZE:NEAR,SAVE_SCREEN:NEAR EXTRN RESTOR_SCREEN:NEAR,SET_CURSOR:NEAR EXTRN GET_TIME:NEAR PUBLIC MAIN PUBLIC NEW_VEC,OLD_VEC,CURSOR_POS C_SEG SEGMENT ASSUME CS:C_SEG, DS:C_SEG, SS:C_SEG ORG 100H START: JMP MAIN ; Nguyeãn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 101 - SS_BUF DB 16DUP(?) ;bộ đệm lưu giữ hình TIME_BUF DB '00:00:00$' CURSOR_POS DW ? ;vị trí trỏ ON_FLAG DB ;1=chạy thủ tục ngắt NEW_VEC DW ?,? ; chứa vectơ OLD_VEC DW ?,? ;chứa vectơ cũ ; MAIN PROC ;thủ tục ngắt ; cất ghi PUSH DS PUSH ES PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI MOV AX,CS ;thiết lập DS MOV DS,AX MOV ES,AX ;Gọi thủ tục ngắt bàn phím cũ PUSHF CALL INITIALIZE ;lấy cờ bàn phím MOV AX,CS ;thiết lập lại DS MOV DS,AX MOV ES,AX ;ES cho phân đoạn hành MOV AH,02 ; xem cờ bàn phím INT 16H ;AL chứa cờ bàn phím TEST AL,1 ; Shift phải? JE I_DONE ; không, thoát TEST AL,100B ;Ctrl? JE I_DONE ;không, thoát Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ ;đúng, xử lý - 102 - CMP JE MOV ON_FLAG,1;thủ tục kích hoạt? RESTOR ;đúng, khử kích hoạt ON_FLAG,1 ;không, kích hoạt ;cất vị trí trỏ thông tin hình MOV MOV INT MOV CALL AH,03 ;lấy vị trí trỏ BH,0 ;trang 10H ;DH=hàng,DL=cột CURSOR_POS,DX ;lưu vị trí trỏ SAVE_SCREEN ;lưu hình ; hiển thị thời gian ; định vị trỏ đến góc bên phải MOV DL,72 ; cột 72 CALL SET_CURSOR LEA BX,TIME_BUF CALL GET_TIME ; lấy thời gian ;hiển thị thời gian LEA SI,TIME_BUF MOV CX,8 ; 8ký tự MOV BH,0 ; trang MOV AH,0EH ; viết ký tự M1: LODSB ;ký tự AL INT 10H ;con trỏ chuyển ; đến hàng LOOP M1 ; lặp lại lần JMP RES_CURSOR RESTOR: ;phục hồi hình MOV CALL ON_FLAG,0 RESTOR_SCREEN ;xoá cờ ;phục hồi vị trí trỏ lưu trữ RES_CURSOR: MOV Nguyễn Hữu Lộc AH,02 ;thiết lập trỏ Khoa Vật Lý Hợp Ngữ - 103 - MOV MOV INT BH,0 DX,CURSOR_POS 10H ;phuïc hồi ghi I_DONE: MAIN C_SEG PUBLIC C_SEG ; GET_TIME Nguyễn Hữu Lộc POP DI POP SI POP DX POP CX POP BX POP AX POP ES POP DS IRET ;trở từ ngắt ENDP ENDS END START Tập tin PGM3_4.ASM GET_TIME,SETUP_INT SEGMENT PUBLIC ASSUME CS:C_SEG PROC MOV INT MOV CALL MOV MOV CALL MOV MOV CALL MOV AH,2CH 21H AL,CH CONVERT [BX],AX AL,CL CONVERT [BX+3],AX AL,DH CONVERT [BX+6],AX Khoa Vật Lý Hợp Ngữ GET_TIME ; CONVERT - 104 - RET ENDP PROC MOV MOV DIV OR RET ENDP CONVERT ; SETUP_INT PROC MOV INT MOV MOV MOV PUSH MOV MOV INT POP RET SETUP_INT ENDP ; C_SEG ENDS END AH,0 DL,10 DL AX,0303H AH,35H 21H [DI],BX [DI+2],ES DX,[SI] DS DS,[SI+2] AH,25H 21H DS LINK PGM3_3+PGM3_2+PGM3_4+PGM3_1 Chú ý PGM3_1 liên kết cuối để thủ tục INITIALIZE đưa vào cuối chương trình Viết chương trình TSR phức tạp, có chương trình TSR khác hệ thống, chương trình có không thực Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 105 - PHỤ LỤC A: MỘT SỐ CHƯƠNG TRÌNH PHỤC VỤ CỦA DOS Chức Kết thúc chương trình Kết thúc nằm thường trực (max 64KB) Ngắt (Hex) 20 27 TG vào DS:DX=địachỉ byte sau vùng giữ lại thường trú CÁC CHƯƠNG TRÌNH PHỤC VỤ CỦA DOS (NGẮT 21h) Chức Đưa vào từ bàn phím Đưa hình ký tự Đưa máy in Số (Hex) 01 02 05 Đưa vào trực tiếp từ bàn phím không Đưa hình chuỗi 07 Đưa vào đệm bàn phím 0A Thiết lập vectơ ngắt 25 Lấy ngày tháng năm 2A Nguyễn Hữu Lộc 09 TG vào TG AH=01 AL=ký tự vào bit AH=02 DL=ký tự bit AH=05 DL=ký tự AH=07 AL=ký tự vào bit AH=09 DS:DX = trỏ đến chuỗi kết thúc '$' AH=0A DS:DX=trỏ đến đệm bàn phím AH=25 AL= số hiệu ngắt DS:DX= trỏ tới chương trình xử lý ngắt AH=2A AL=thứ tuần CX=năm (1980-2099 DH=tháng DL=ngày Khoa Vật Lý Hợp Ngữ Chức Đặt ngày tháng năm - 106 - Số (Hex) 2B TG vào TG AH=2B CX=năm (1980-2099 DH=tháng DL=ngày AL=mã trả CL=phút CH=giờ DL=phần trăm giây DH=giây Lấy thời gian 2C AH=2C Đặt thời gian 2D Kết thúc chương trình thường trú 31 AH=2D CL=phút CH=giờ DL=phần trăm giây DH=giây AX=mã trả AH=31 AL=mã trả DX=địa đoạn chương trình nhớ để giải phóng Lấy vectơ ngắt 35 AH=35 AL=số hiệu ngắt Tạo thư mục 39 Xoá thư mục 3A Đổi thư mục thời 3B Tạo file 3C AH=39 DS:DX = trỏ chuỗi ASCII đường AH=3A DS:DX = trỏ chuỗi ASCII đường AH=3B DS:DX = trỏ chuỗi ASCII đường AH=3C CX=đặc tính file DS:DX= trỏ Nguyễn Hữu Lộc ES:BX=vectơ ngắt AX=mã trả Nếu sai CF=01, đến AX= mã lỗi tên Nếu tốt: CF=00 Nếu sai CF=01, đến AX= mã lỗi tên Nếu sai CF=01, đến AX= mã lỗi tên AX=thẻ file mã trả đến CF=00 (tốt), 01 (sai) Khoa Vật Lý Hợp Ngữ Chức - 107 - Số (Hex) Mở thẻ 3D Đóng thẻ 3E Đọc file từ thiết bị 3F Ghi file thiết bị 40 Xoá file 41 Kết thúc trình 4C Đổi tên file 56 Nguyễn Hữu Lộc TG vào chuỗi ASCII tên file AH=3D CX=mã truy nhập DS:DX = trỏ đến chuỗi ASCII tên file AH=3E BX=thẻ file AH=3F BX=thẻ file CX=số byte cần đọc DS:DX= trỏ đến vùng đệm liệu AH=40 BX=thẻ file CX=số byte cần ghi DS:DX= trỏ đến vùng đệm liệu AH=41 DS:DX = trỏ đến chuỗi ASCII tên file AH=4C AL= mã trả AH=56 DS:DX = trỏ đến chuỗi ASCII tên cũ ES:DI = trỏ đến chuỗi ASCII tên TG AX=thẻ file mã trả AX=thẻ file mã trả AX=số byte đọc mã trả AX=số byte ghi mã trả Nếu sai CF=01, AX= mã trả Nếu sai CF=01, AX= mã trả Khoa Vật Lý Hợp Ngữ - 108 - PHỤ LỤC B: MỘT SỐ CHƯƠNG TRÌNH PHỤC VỤ CỦA ROMBIOS Chức Di chuyển trỏ Ngắt (Hex) 10 Lấy vị trí trỏ 10 Đọc ký tự thuộc tính Ghi ký tự 10 AH=8 BH=trang hình 10 Đọc cung 13 Ghi cung 13 AH=0E AL=ký tự BL=màu kiểu đồ thị CF=báo kết AH=02 tốt/hỏng AL= số cung AH=mã trạng thái CH=rãnh AL=số cung CL=cung đọc DL=ổ đóa ES:BX=con trỏ đến đệm CF=báo kết AH=03 tốt/hỏng AL= số cung AH=mã trạng thái CH=rãnh AL=số cung ghi CL=cung DL=ổ đóa ES:BX=con trỏ đến đệm Nguyễn Hữu Lộc TG vào AH=2 BH=số hiệu trang DH=số hiệu dòng DL=số hiệu cột AH=3 BH=số hiệu trang TG DH=số hiệu cột DL=số hiệu dòng CH=dòng quét đầu trỏ CL=dòng quét cuối trỏ AH=thuộc tính AL=ký tự Khoa Vật Lý Hợp Ngữ Chức Lấy tham số thời ổ đóa - 109 - Ngắt (Hex) 13 TG vào AH=08 DL=số hiệu đóa Đọc ký tự tiếp từ bàn phím 16 AH=00 Lấy cờ bàn phím 16 AH=02 Gửi byte máy in 17 AH=00 AL=ký tự DX=số máy in Nguyễn Hữu Lộc TG DL=số ổ đóa DH=số lượng mặt max CL[0,5]=số hiệu cung max CL[6,7]=2 bit cao số lượng từ trụ max CH=ca'c bit thấp số lượng từ trụ max CF=cờ báo kết tốt/hỏng AH=mã trạng thái AH=mã quét bàn phím AL=mã ASCII AL=cờ phím bit 0=1: Shift phải bit 1=1: Shift trái bit 2=1: Ctrl bit 3=1: Alt bit 4=1: Scroll lock bit 5=1: Num Lock bit 6=1:Caps lock bit 7=1: Chế độ chèn Giá trị bit: 0: thời gian 1: không sử dụng 2: không sử dụng 3=1:lối vào/ra 4=1: chọn 5=1:hết giấy 6=1:xác nhận 7=1:không bận Khoa Vật Lý Hợp Ngữ - 110 - TÀI LIỆU THAM KHẢO Ngôn ngữ lập trình Assembly máy vi tính IBM-PC - Ytha Yu Charles Marut (Quách Tuấn Ngọc-Đỗ Tiến Dũng- Nguyễn Quang Khải biên dịch) - Nhà xuất Giáo dục Lập trình Hợp ngữ Turbo Assembler 2.0 - Phan Trương Dần - Nhà xuất Giáo dục Cẩm nang lập trình - Peter Norton (Nguyễn Minh San dịch) - Nhà xuất Giáo Dục Cẩm nang cho người lập trình máy vi tính IBM- Peter Norton Nhà xuất Thống kê - Viện Điện tử - Tin hoïc Assembleur facile - PhMercier- Marabout Hardware Reference Manual 8088 - Intel Macro Assembler Programmer's Guide 5.0 - Microsoft Nguyễn Hữu Lộc Khoa Vật Lý ... RET Nguyễn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 17 -N HIEN.COM -R CX -R BX -W -G (=F) (=0) DEBUG -N HIEN.COM -L -U Chương trình 5: Thực phép toán + , - , x , / byte: -A xxxx:0100 MOV MOV ADD MOV SUB... AX,CX CX AX,A034 -U -T word = byte -A Nguyeãn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 18 MOV MOV DIV INT DX,0001 BX,1002 BX 20 -U -T Nguyeãn Hữu Lộc Khoa Vật Lý Hợp Ngữ - 19 - CHƯƠNG 3: HP NGỮ DÙNG TRONG... MOV MOV INT INT -G -U -N DIAMOND.COM -R CX (=8) -R BX (=0) -W -Q DL,4; mãASCII AH,2; ký tự ♦ 21 20 Chương trình 2: Hiện chuỗi (Chao cac ban) lên hình Cách 1: -E 120 43 62 -A -U -G Nguyễn Hữu Lộc

Ngày đăng: 08/05/2021, 16:32

Mục lục

    CHƯƠNG 1: GIỚI THIỆU CHUNG

    I. CÁC THANH GHI TRONG VI XỬ LÝ HỌ INTEL:

    1. Các thanh ghi thông dụng:

    2. Các thanh ghi phân đoạn

    3. Các thanh ghi chỉ mục và con trỏ:

    4. Thanh ghi trạng thái (FLAG)

    II. ĐỊA CHỈ Ô NHỚ:

    III. MỘT SỐ LỆNH CƠ BẢN:

    CHƯƠNG 2: GỌI NGẮT VÀ TRÌNH DEBUG

    I. CÁC LỆNH GỌI NGẮT

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

Tài liệu liên quan