[Ngôn Ngữ Máy] Đề Cương Bài Giảng Hợp Ngữ (assembly language) phần 2 doc

11 506 2
[Ngôn Ngữ Máy] Đề Cương Bài Giảng Hợp Ngữ (assembly language) phần 2 doc

Đ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ương giảng HP NGỮ 12 MODEL SMALL STACK 100H CODE MAIN PROC ; display dấu nhắc MOV AH,2 MOV DL,’?’ INT 21H ; nhập ký tự MOV AH,1 ; hàm đọc ký tự INT 21H ; ký tự đưa vào AL MOV BL,AL ; cất ký tự BL ; nhảy đến dòng MOV AH,2 ; hàm xuất ký tự MOV DL,0DH ; ký tự carriage return INT 21H , thực carriage return MOV DL,0AH ; ký tự line feed INT 21H ; thực line feed ; xuất ký tự MOV DL,BL ; đưa ký tự vào DL INT 21H ; xuất ký tự ; trở DOS MOV AH,4CH ; hàm thoát DOS INT 21H ; exit to DOS MAIN ENDP END MAIN 1.10 Tạo chạy chương trình hợp ngữ Có bước để tạo chạy chương trình hợp ngữ : • Dùng trình soạn thảo văn để tạo tập tin chương trình nguồn ( source program file ) • Dùng trình biên dịch (Assembler ) để tạo tập tin đối tượng (object file) ngôn ngữ máy • Dùng trình LINK để liên kết nhiều tập tin đối tượng tạo file thực thi • Cho thực tập tin EXE COM Bước : Tạo chương trình nguồn Đề cương giảng HP NGỮ 13 Dùng trình soạn thảo văn (NC chẳng hạn) để tạo chương trình nguồn Ví dụ lất tên PGM1.ASM Phần mở rộng ASM phần mở rộng quy ước để Assembler nhận chương trình nguồn Bước :Biên dịch chương trình Chúng ta dùng MASM ( Microsoft Macro Assembler ) để chuyển tập tin nguồn PGM1.ASM thành tập tin đối tượng ngôn ngữ máy g PGM1.OBJ lệnh sau : MASM PGM1; Sau in thông tin quyền MASM kiểm tra file nguồn để tìm lỗi cú pháp Nếu có lỗi MASM inra số dòng bị lỗi mộ tả ngắn lỗi Nếu lỗi MASM chuyển PGM1.ASM thành tậo tin đối tượng ngôn ngữ máy gọi PGM1.OBJ Dấu chấm phẩy sau lệnh MASM PGM1 có nghóa không muốn tạo tập tin đối tượ ng có tên khác với PGM1 Nếu dấu chấm phẩy sau lệnh MASM yêu cầu gõ vào tên số tập tin mà tạo hình : Object file name [ PGM1.OBJ]: Source listing [NUL.LIST] : PGM1 Cross-reference [NUL.CRF] : PGM1 Tên NUL có nghóa không tạo file tương ứng trừ lập trình viên gõ vào tên tập tin Tập tin danh sách nguồn ( source listing file) : tập tin Text có đánh số dòng , mã hợp ngữ mã nguồn nằm cạnh Tập tin thường dùng để gỡ rối chương trình nguồn MASM thông báo lỗi theo số dòng Tập tin tham chiếu chéo ( Cross -Reference File ) : tập tin chứa danh sách tên mà chúng xuất chương trình kèm theo số dòng mà tên xuất Tập tin đưọc dùng để tìm biến nhãn chương trình lớn Bước : Liên kết chương trình Tập tin đối tượng tạo bước tập tin ngôn ngữ máy không chạy chưa có dạng thích hợp file chạy Hơn chưa biết chương trình nạp vào vị trí nhớ để chạy Một số địa dạng mã máy bị thiếu Trình LINK liên kết nhiều file đói tượng thành file chạy ( *.EXE ) Tập tin nạp vào nhớ thi hành Đề cương giảng HP NGỮ 14 Để liên kết chương trình ta gõ : LINK PGM1; Nếu dấu chấm phẩy ASM yêu câù gõ vào tên tập tin thực thi Bước : Chạy chương trình Từ dấu nhắc lệnh chạy chương trình cách gõ tên nhấn ENTER 1.11 Xuất chuỗi ký tự Trong chương trình PGM1 dùng INT 21H hàm để đọc xuất ký tự Hàm ngắt 21H dùng để xuất chuỗi ký tự INT 21H , Function : Display a string Input : DX=offset address of string The string must end with a ‘$’ character Ký tự $ cuối chuỗi không in lên hình Nếu chuỗi có chứa ký tự điều khiển chức điều khiển tương ứng thực Chúng ta viết chương trình in lên hình chuỗi “HELLO!” Thông điệp HELLO định nghóa sau đoạn số liệu : MSG DB ‘HELLO!$’ Leänh LEA ( Load Effective Address ) LEA destnation , source Ngắt 21h , hàm số xuất chuỗi ký tự hình với điều kiện địa hiệu dụng biến chuỗi phải DX Có thể thực điều lệnh : LEA DX,MSG ; đưa địa offset biến MSG vaøo DX Program Segment Prefix ( PSP ) : Phần đầu đoạn chương trình Khi chương trình nạp vào nhớ máy tính , DOS dành 256 byte cho gọi PSP PSP chưá số thông tin chương trình nạp nhớ Để cho chương trình truy xuất tới PSP , DOS đặt số phân đoạn (PSP) DS ES trước thực thi chương trình Kết qủa ghi DS không chứa số đoạn đoạn số liệu chương trình Để khắc phục điều , chương trình có chứa đoạn số liệu phải bắt đầu lệnh sau : MOV AX,@DATA Đề cương giảng HP NGỮ 15 MOV DS,AX Ở @DATA tên đoạn số liệu định nghóa DATA Assembler chuyển @DATA thành số đoạn Sau chương trình hoàn chỉnh để xuất chuỗi ký tự HELLO! TITLE PGM2: PRINT STRING PROGRAM MODEL SMALL STACK 100H DATA MSG DB ‘HELLO!$’ CODE MAIN PROC ; initialize DS MOV AX,@DATA MOV DS,AX ; display message LEA DX,MSG MOV AH,9 INT 21H ; return to DOS MOV AH,4CH INT 21H MAIN ENDP END MAIN 1.12 Chương trình đổi chữ thường sang chữ hoa Chúng ta viết chương trình yêu cầu người dùng gõ vào ký tự chữ thường Chương trình đổi sang dạng chữ hoa in dòng TITLE MODEL STACK DATA CR LF MSG1 MSG2 PGM3: CASE COVERT PROGRAM SMALL 100H EQU EQU DB DB 0DH 0AH ‘ENTER A LOWER CASE LETTER:$’ 0DH,0AH,’IN UPPER CASE IT IS :’ Đề cương giảng HP NGỮ CHAR DB ?,’$’ 16 ; định nghóa biến CHAR có giá trị ban đầu chưa ;xác định CODE MAIN PROC ; INITIALIZE DS MOV AX,@DATA MOV DS,AX ;PRINT PROMPT USER LEA DX,MSG1 ; lấy thông điệp số MOV AH,9 INT 21H ; xuất hình ;nhập vào ký tự thường đổi thành ký tự hoa MOV AH,1 ; nhập vào ký tự INT 21H ; cất AL SUB AL,20H ; đổi thành chữ hoa cất AL MOV CHAR, AL ; cất ký tự biến CHAR ; xuất ký tự dòng LEA DX, MSG2 ; lấy thông điệp thứ MOV AH,9 INT 21H ; xuất chuỗi ký tự thứ hai , MSG2 không kết ;thúc ký tự $ nên tiếp tục xuất ký tự có biến CHAR ;dos exit MOV AH,4CH INT 21H ; dos exit MAIN ENDP END MAIN Đề cương bà i giả n g Hợ p ngữ 17 Chương : Trạng thái vi xử lý ghi cờ Trong chương xem xét ghi cờ vi xử lý ảnh hưởng lệnh máy đến ghi cờ Trạng thái ghi để chương trình thực lệnh nhảy , rẻ nhánh lặp Một phần chương giới thiệu chương trình DEBUG DOS 2.1 Các ghi cờ ( Flags register) Điểm khác biệt quan trọng máy tính so với thiết bị điện tử khác khả cho định Một mạch đặc biệt CPU làm định cách vào trạng thái hành CPU Có ghi đặc biệt cho biết trạng thái CPU ghi cờ Bảng 2.1 cho thấy ghi cờ 16 bit cuûa 8086 11 10 O D IF T F F F S F Z F A F P F C F Bảng 2.1 :Thanh ghi cờ 8086 Đề cương bà i giả n g Hợ p ngữ 18 Mục đích ghi cờ trạng thái CPU Có hai loại cờ cờ trạng thái ( status flags) cờ điều khiển (control flags) Cờ trạng thái phản ánh kết qủa thực lệnh CPU Bảng 2.2 tên ký hiệu ghi cờ 8086 Bit 11 10 Name Carry flag Parity flag Auxiliary carry flag Zero flag Sign flag Overflow flag Trap flag Interrrupt flag Direction flag Symbol CF PF AF ZF SF OF TF IF DF Bảng 2.2 : Các cờ 8086 Mỗi bit ghi cờ phản ánh trạng thái CPU Các cờ trạng thái ( status flags) Đề cương bà i giả n g Hợ p ngữ 19 Các cờ trạng thái phản ánh kết phép toán Ví dụ sau thực lệnh SUB AX,AX cờ ZF =1 , nghóa kết qủa phép trừ zero Cờ nhớ ( Carry Flag - CF) : CF=1 xuất bit nhớ (carry) từ vị trí MSB thực phép cộng có bit mượn ( borrow ) MSB thực phép trừ Trong trường hợp khác CF=0 Cờ CF bị ảnh hưởng lệnh dịch ( Shift) quay ( Rotate) số liệu Cờ chẳn lẻ ( Parity Flag - PF) : PF=1 byte thấp kết qủa có tổng số số số chẳn ( even parity) PF=0 byte thấp chẳn lẻ lẻ (old parity ) Ví dụ kết qủa FFFEh PF=0 Cờ nhớ phụ ( Auxiliary Carry Flag - AF ) :AF =1 có nhớ ( mượn) từ bit thứ phép cộng ( trừ) Cờ Zero ( Zero Flag -ZF) : ZF=1 kết qủa số Cờ dấu ( Sign Flag - SF ) : SF=1 MSB kết qủa ( kết qủa số âm ) SF=0 MSB=0 Cờ tràn ( Overflow Flag - OF ) : OF=1 xảy tràn số thực phép toán Sau phân tích trường hợp xảy tràn thực tính toán Hiện tượng tràn số liên quan đến việc biễu diễn số máy tính với số hữu hạn bit Các số thập phân có dấu biễu diễn byte 128 đến +127 Nếu biễu diễn từ (16 bit) số thập phân biễu diễn -32768 đến +32767 Đối với số không dấu , dải số biễu diễn Đề cương bà i giả n g Hợ p ngữ 20 từ đến 65535 , byte đến 255 Nếu kết qủa phép toán vượt dãi số biễu diễn xảy tràn số Khi có tràn số kết qủa thu bị sai 2.2 Tràn ( overflow) Có loại tràn số : Tràn có dấu ( signed overflow) tràn không dấu ( unsigned overflow) Khi thực phép cộng số học chẳng hạn phép cộng , xảy khả sau : 1) không tràn 2) tràn dấu 3) tràn không dấu 4) tràn dấu không dấu Ví dụ tràn không dấu phép cộng ADD AX,BX với AX=0FFFFh , BX=0001h Kết qủa dạng nhị phân : 1111 1111 1111 1111 0000 0000 0000 0001 10000 0000 0000 0000 Nếu diễn giải kết qủa dạng không dấu kết qủa ( 10000h=65536) Nhưng kết qủa vượt độ lớn từ nhớ Bit ( bit nhớ từ vị trí Đề cương bà i giả n g Hợ p ngữ 21 MSB ) xảy kết qủa AX =0000h sai Sự tràn tràn không dấu Nếu xem phép cộng phép cộng hai số có dấu kết qủa AX = 0000h , FFFFh = -1 , 0001h = +1 , kết qủa phép cộng Vậy trường hợp tràn dấu không xảy Ví dụ tràn dấu : giả sử AX = BX = 7FFFh , lệnh ADD AX,BX cho kết qủa sau : 0111 1111 1111 1111 0111 1111 1111 1111 1111 1111 1111 1110 = FFFE h Biễu diễn có dấu không dấu 7FFFh 3276710 Như phép cộng có dấu không dấu kết qủa 32767 + 32767 = 65534 Số này(65534) vượt dãi giá trị mà số 16 bit có dấu biễu diễn Hơn nửa FFFEh = -2 Do tràn dấu xảy Trong trường hợp xảy tràn , CPU biểu thị tràn sau : • CPU set OF =1 xảy tràn dấu • CPU set CF = xảy tràn không dấu Sau có tràn , chương trình hợp lý thực để sửa sai kết qủa Các lập trình viên phải quan tâm tới cờ OF CF biễu Đề cương bà i giả n g Hợ p ngữ 22 diễn số họ có dấu hay không dấu cách tương ứng Vậy làm để CPU biết có tràn ? • Tràn không dấu xảy có bit nhớ ( mượn ) từ MSB • Tràn dấu xảy trường hợp sau : a) Khi cộng hai số dấu , tràn dấu xảy tổng có dấu khác với hai toán hạng ban đầu Trong ví dụ , cộng hai số 7FFFh +7FFFh ( hai số dương ) kết qủa FFFFh ( số âm) b) Khi trừ hai số khác dấu ( giống cộng hai số dấu) kết qủa phải có dấu hợp lý Nếu kết qủa cho dấu không mong đợi có nghóa xảy tràn dấu Ví dụ 8000h - 0001h = 7FFFh ( số dương ) Do OF=1 Vậy làm để CPU có tràn ? • OF=1 tràn dấu • CF=1 tràn không dấu Làm để CPU biết có tràn ? • Tràn không dấu xảy có số nhớ ( carry) mượn ( borrow) từ MSB • Tràn dấu xảy cộng hai số dấu ( trừ số khác dấu ) mà kết qủa với dấu khác với dấu mong đợi Phép cộng hai số có dấu khác xảy tràn Trên thực tế CPU dùng phương pháp sau : cờ OF=1 số nhớ vào số nhớ từ MSB không phù hợp : ... byte 128 đến + 127 Nếu biễu diễn từ (16 bit) số thập phân biễu diễn - 327 68 đến + 327 67 Đối với số không dấu , dải số biễu diễn Đề cương bà i giả n g Hợ p ngữ 20 từ đến 65535 , byte đến 25 5 Nếu... dòng LEA DX, MSG2 ; lấy thông điệp thứ MOV AH,9 INT 21 H ; xuất chuỗi ký tự thứ hai , MSG2 không kết ;thúc ký tự $ nên tiếp tục xuất ký tự có biến CHAR ;dos exit MOV AH,4CH INT 21 H ; dos exit MAIN... dấu không dấu 7FFFh 327 6710 Như phép cộng có dấu không dấu kết qủa 327 67 + 327 67 = 65534 Số này(65534) vượt dãi giá trị mà số 16 bit có dấu biễu diễn Hơn nửa FFFEh = -2 Do tràn dấu xảy Trong

Ngày đăng: 14/07/2014, 01:20

Từ khóa liên quan

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

Tài liệu liên quan