TỔNG QUAN VỀ LẬP TRÌNH HỢP NGỮ doc

42 841 9
TỔNG QUAN VỀ LẬP TRÌNH HỢP NGỮ 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

Tên: Từ gợi nhớ mã lệnh Toán hạn Chú thích TỔNG QUAN VỀ LẬP TRÌNH HỢP NGỮ CPU 8086 là CPU 16 bít (bus số liệu ngoại có 16 dây). Nó được dùng để chế tạo các máy vi tính đầu tiên của hảng IBM vào năm 1981. Cho đến nay, dòng CPU này không ngừng phát triển, chảy qua nhiều thế hệ như: 80X86, Pentium X 1. ĐẶC TÍNH TỔNG QUÁT CỦA HỢP NGỮ : 1.1. Cấu trúc của một dòng lệnh hợp ngữ - Trên một dòng văn bản chỉ cho phép viết duy nhất một dòng lệnh - Một lệnh của hợp ngữ gồm các phần: Ví dụ: LENH: MOV DX, 3F8H ; 3F8H là địa chỉ cổng vào ra nối tiếp - Tên - Từ gợi nhớ mã lệnh Một số lệnh giả thường gặp: ORG (origin: điểm gốc): Chỉ định điểm bắt đầu của một đoạn chương trình hay dữ liệu EQU (equate: bằng) DEFINE (định nghĩa): cho phép đặt tên cho một dữ liệu nào đó DS (define storage: định nghĩa vùng ô nhớ lưu trữ số liệu) RM (reserve memory: để dành vùng ô nhớ): dùng khai báo biến DATA, DB (define byte), DW (define word) cũng để khai báo biến END: Xác định điểm chấm dứt chương trình - Toán hạng 1 mov ax, bx add dx, cx 010101010 110101010 Chương trình dịch Từ gợi nhớ mã lệnh Hợp ngữ Mã máy nhị phân Chứa các toán hạng mà lệnh cần - Chú thích Dùng để ghi chú giải thích cho dòng lệnh 1.2 Macro Macro là một nhóm lệnh nào đó được dung nhiều lần trong cùng một chương trình nên ta gán cho nó một tên. Mỗi khi sử dụng nhóm lệnh ấy chỉ cần gọi tên đã gán cho nhóm lệnh đó. 1.3 Chương trình con Hợp ngữ thường cho phép dịch riêng biệt các chương trình con. Nó sẽ đánh dấu các tham khảo đến chương trình con trong chương trình chính và chương trình liên kết sẽ gán các địa chỉ của các chương trình con. Một số hợp ngữ còn cho phép làm một thư viện chương trình con để sử dụng chung cho nhiều chương trình khác nhau. Muốn sử dụng chương trình con thì phải dùng lệnh CALL hay lệnh JUMP để chuyển điều khiển đến chương trình con đó. Do đó phải lưu địa chỉ trở về chương trình chính ở ngăn xếp và làm chậm đi việc thực hiện chương trình chính. 1.4 Biến toàn cục (global), biến địa phương (local) Các biến được khai báo trong chương trình chính được gọi là biến toàn cục, các biến này được dùng cho chương trình chính, chương trình con và macro. Các biến được khai báo bên trong macro hay chương trình con gọi là biến địa phương, các biến này chỉ được dùng cho nội bộ tại macro hay chương trình con có khai báo biến đó. 1.5 Các bảng, thông báo Đa số các chương trình hợp ngữ khi tiến hành hợp dịch có thể cung cấp các bảng và các thông báo cho người lập trình. Các bảng thông báo được cung cấp dưới dạng tập tin văn bản bao gồm: - Bảng liệt kê chương trình hợp ngữ và mã máy tương ứng - Bảng liệt kê các lỗi trong chương trình gốc - Bảng các tên được dùng trong chương trình gốc 2 - Danh sách các tham khảo ở chương trình khác, bên ngoài chương trình (các chương trình con, các biến dùng bên ngoài) - Danh sách các macro, chương trình con và độ dài của chúng 1.6 Hợp ngữ chéo (cross assembler) Một hợp ngữ chạy trên một máy tính nào đó để dịch ra mã máy cho chương trình viết phục vụ một CPU khác chủng loại với CPU của máy mà hợp ngữ đó đang dùng thì được gọi là hợp ngữ chéo. Ví dụ: Hiện nay rất khó tìm được một máy tính dùng CPU – Z80. Muốn dịch một chương trình hợp ngữ P1 thành chương trình mã máy P2 dùng cho CPU – Z80, người ta phải dùng hợp ngữ chéo chạy trên máy IBM- PC (có CPU 8086) thông dụng. Chương trình P2 không chạy được trên máy IBM-PC mà chỉ chạy được trên máy tính hoặc hệ vi xử lý do CPU – Z80 điều khiển. 2. HỢP NGỮ MASM (HỢP NGỮ CỦA CPU-8086) MASM (MicroSoft Macro Assembler) là trình hợp ngữ do hãng phần mềm Microsoft phát hành cùng với phiên bản hệ điều hành DOS. 2.1. Cấu trúc của một hàng lệnh Một hàng lệnh gồm có 4 vùng: Tên Từ gợi nhớ mã lệnh hoặc lệnh giả Toán hạng hoặc biểu thức Ghi chú 2.2 . Tên Tên có thể là nhản, biến hay ký hiệu Tên có chiều dài tối đa là 31 ký tự và phải bắt đầu bằng một chữ cái. Các khoảng trống và các ký hiệu toán học không được dùng để đặt tên - Nhản: Nhản dùng để đánh dấu một địa chỉ mà các lệnh như JUMP, CALL, LOOP cần đến. Nó cũng được dùng cho các lệnh giả LABEL hoặc PROC hoặc EXTRN Ví dụ: NH: MOV AX ; DS ; NH là nhản đánh dấu một địa chỉ ô nhớ FOO LABEL Near ; đặt tên cho địa chỉ ô nhớ sau lệnh giả này CTCON PROC FAR ; địa chỉ bắt đầu của chương trình con 3 EXTRN NH Near ; NH là nhản ngoài chương trình gốc này - Biến: Biến dùng làm toán hạng cho lệnh hoặc biểu thức. Biến tượng trưng cho một địa chỉ nơi đó có giá trị mà ta cần. Ví dụ: T DB 2 ; Biến T có giá trị là 2 - Ký hiệu: Ký hiệu là một tên được định nghĩa để thay cho một biểu thức, một từ gợi nhớ lệnh. Ký hiệu có thể dùng làm toán hạng trong biểu thức, trong lệnh hay trong lệnh giả. Ví dụ: FOO EQU 7h TOTO = 0Fh 2.3 Từ gợi nhớ mã lệnh, lệnh giả Từ gợi nhớ mã lệnh đã được trình bài ở chương I về tập lệnh của bộ xử lý 8086. Lệnh giả được chia thành 4 nhóm sau: 2.3.1 Nhóm liên quan đến bộ nhớ - SEGMENT và ENDS : Khai báo đoạn Cú pháp: <Tên đoạn> SEGMENT [align] [combine] [‘class’] ; nội dung của đoạn <Tên đoạn> ENDS [align] xác định nơi bắt đầu của đoạn như sau, gồm các giá trị: Byte : Đoạn có thể bắt đầu ở địa chỉ bất kỳ Word : Đoạn phải bắt đầu ở địa chỉ chẳn Para : Đoạn phải bắt đầu ở địa chỉ là bội số của 16 Page : Đoạn phải bắt đầu ở địa chỉ là bội số của 256 [combine] xác định cách phân đoạn này kết hợp với các phân đoạn khác như sau: Public : các đoạn cùng tên và cùng class được ghép nối tiếp nhau khi liên kết Common : các đoạn cùng tên và cùng class được ghép phủ lấp lên nhau khi liên kết AT <biểu thức> : Đoạn được đặt tại một địa chỉ là bội số của 16 và được ghi trong biểu thức 4 Stack : Giống như Public, tuy nhiên con trỏ ngăn xếp SP chỉ vào địa chỉ đầu tiên của ngăn xếp đầu tiên Private : các đoạn cùng tên và cùng class không được ghép vào nhau 4. CÁC THANH GHI CỦA BỘ XỬ LÝ 8086 : - Thanh ghi đa dụng: CPU 8086 có 4 thanh ghi đa dụng 16 bít có thể chia đôi thành 8 thanh, mỗi thanh 8 bít + AX (accumulator + BX (base register) + CX (count register) + DX (data register) - Thanh ghi con trỏ: Dùng để thâm nhập số liệu trên ngăn xếp + SP (Stack pointer): Thanh ghi con trỏ ngăn xếp + BP (bace pionter): Thanh ghi con trỏ nền dùng để lấy số liệu từ ngăn xếp. - Thanh ghi chỉ số: + SI (source index): Thanh ghi chỉ số nguồn. + DI (destination index): Thanh ghi chỉ số đích. - Thanh ghi đoạn: Được dùng trong mọi tính toán địa chỉ ô nhớ. Mỗi thanh ghi đoạn xác định 64K ô nhớ trong bộ nhớ trong. + CS (code segment) + DS (data segment) + ES (extra segment) + SS (stack segment) - Thanh ghi cờ: Phản ánh kết quả của phép tính số học và luận lý, xác định trạng thái hoạt động của CPU. Các bít của thanh ghi cờ có ý nghĩa như sau: + CF: thể hiện có số giữ thoát ra từ bít cao nhất của thanh ghi kết quả sau một phép tính. + OF: thể hiện việc tính toán vượt quá khả năng của CPU + SF: bằng bít cao nhất của thanh ghi kết quả sau một phép tính + AF: thể hiện số giữ thoát ra từ bít thứ 4 của thanh ghi kết quả. 5 PUSH NGUỒN ; POP ĐÍCH ; LEA reg 16, Mem 16 ; + PF: bằng 1 nếu 8 bít thấp của thanh ghi kết quả một phép tính có số con số 1 chẳn. + ZF: bằng 1 khi kết quả của 1 phép tính bằng 0 + DF: bằng 1 thì SI và DI giảm 1 cho mỗi vòng lặp + IF: bằng 1 khi cho phép ngắt + TF: bằng 1 khi cho phép chương trình chạy từng bước để phục vụ sửa sai một chương trình 5. CÁC LỆNH THƯỜNG DÙNG CỦA BỘ XỬ LÝ 8086 Bộ xử lý 8086 có tập lệnh gồm 111 lệnh với chiều dài của lệnh từ 1 byte đến vài byte 5.1. Nhóm lệnh di chuyển số liệu - MOV MOV ĐÍCH, NGUỒN ; Ví dụ: MOV CX, BX ; chuyển nội dung thanh ghi BX vào thanh ghi CX. Nội dung thanh ghi BX vẫn giữ nguyên. Sau khi thực hiện lệnh này thì BX và CX có cùng nội dung. - PUSH: đưa số liệu vào ngăn xếp Ví dụ: PUSH AX ; Đưa nội dung thanh ghi AX vào ngăn xếp. Con trỏ ngăn xếp SP giảm đi 2 đơn vị - POP: lấy số liệu ra từ ngăn xếp Ví dụ: POP BX ; Lấy nội dung của 2 byte ô nhớ mà SP trỏ tới để đưa vào BX, byte có địa chỉ thấp đưa vào BL và byte có địa chỉ cao đưa vào BH. Con trỏ ngăn xếp SP tăng lên 2 đơn vị 5.2. Nhóm lệnh chuyển địa chỉ - LEA (load effective address): Nạp địa chỉ hiệu dụng 5.3. Nhóm lệnh chuyển cờ hiệu 6 IN AL, địa chỉ cổng 8 bít ; OUT địa chỉ cổng 8 bít, AL JMP đích ; - PUSHF (push flag: lưu giữ cờ): Đây là lệnh lưu giữ thanh ghi trạng thái vào ngăn xếp. - POPF (pop flag: lấy cờ ra): Đây là lệnh lấy 2 byte từ ngăn xếp đưa vào thanh ghi cờ trạng thái (thanh ghi trạng thái) 5.4. Nhóm lệnh vào ra ngoại vi - IN (in: vào): Lấy số liệu từ ngoại vi Ví dụ: IN AL, 3FH ; 3FH là địa chỉ cổng 8 bít MOV DX, 3F8H ; 3F8H là địa chỉ cổng 16 bít IN AL, DX - OUT (out: ra): Đưa số liệu ra ngoại vi Ví dụ: MOV DX, địa chỉ cổng 16 bít OUT DX, AL 5.5. Nhóm lệnh chuyển điều khiển (các lệnh nhảy) - Lệnh nhảy vô điều kiện JMP : nhảy đến một địa chỉ khác Cú pháp: Tuỳ theo khoảng cách của đích đến lệnh JMP hiện tại mà ta có 3 kiểu: + JMP near đích : nhảy đến địa chỉ đích nằm trong đoạn CS hiện tại + JMP short đích : nhảy đến địa chỉ đích trong khoảng từ -128 đến +128 tính từ vị trí lệnh JMP hiện tại + JMP far đích : nhảy đến vị trí đích nằm ngoài đoạn CS hiện tại - Lệnh nhảy có điều kiện Cú pháp chung : lệnh đích + JA (jump if above: nhảy nếu lớn hơn). Nếu cờ CF=ZF=0 thì nhảy + JB (jump if below: nhảy nếu nhỏ hơn). Nếu cờ CF=1 thì nhảy 7 CMP trái, phải ; LOOP nhãn ; + JZ (jump if zero: nhảy nếu bằng không). Nếu cờ ZF=1, nghĩa là kết quả của phép tính (hoặc so sánh) trước đó bằng 0 (hoặc 2 số được so sánh bằng nhau) thì nhảy. + JNZ (jump if not zero: nhảy nếu khác 0). Nếu cờ ZF=0, nghĩa là kết quả phép tính trước đó khác 0 thì nhảy. - Lệnh so sánh CMP (compare) Cú pháp: Nếu trái > phải thì ZF=0 và CF=0 Nếu trái = phải thì ZF=1 và CF=0 Nếu trái < phải thì ZF=0 và CF=1 Ví dụ: MOV AX, 1000h ; AX=1000h CMP AX, 200h ; so sánh AX với 200h JZ NH ; Nếu AX=200h thì nhảy đến nhãn NH MOV CX, BX ; Nếu AX <> 200h thì lệnh được thi hành … ; Các lệnh khác NH : ADD AX, BX ; Vị trí nhảy đến được gán nhãn NH 5.6. Nhóm lệnh vòng lặp LOOP : nhảy vòng Cú pháp: Khi lệnh LOOP được thực hiện xong, thanh ghi CX được giảm xuống 1 và nếu CX <> 0 thì nhảy tới một nhãn (trong vòng từ -128 đến +128 kể từ lệnh LOOP) . Ví dụ: MOV CX, 10 ; nhảy 10 vòng 8 ADD đích, nguồn ; INC đích ; SUB đích, nguồn ; DEC đích ; NH : ADD AX, CX MOV BL, AL LOOP NH … + LOOPZ (loop if zero): nhảy vòng nếu cờ ZF=1 + LOOPNZ (loop if not zero): nhảy vòng nếu cờ ZF=0 5.7. Nhóm lệnh gọi chương trình con - CALL : lệnh gọi chương trình con Cú pháp: - RET (return): Kết thúc chương trình con và trở về Khi gặp lệnh RET thì 8086 lấy địa chỉ trở về ở ngăn xếp để trở về tiếp tục thi hành chương trình chính. 5.8. Nhóm lệnh tính toán số học - ADD : cộng số nguyên Cú pháp: Ví dụ: ADD AL, 15 ; cộng 15 vào nội dung AL, kết quả được lưu trong AL - INC (Increment): tăng lên một đơn vị Cú pháp: - SUB (subtract): trừ 2 số nguyên Cú pháp: - DEC (Decrment): Giảm xuống 1 đơn vị Cú pháp: 9 CALL nhản ; MUL nguồn ; DIV nguồn ; SHL đích, 1 ; SHR đích, 1 ; SHR đích, CL ; ROL đích, 1 ; - MUL (mutiplication): nhân số nguyên Cú pháp: - DIV (division): chia số nguyên Cú pháp: 5.9. Nhóm lệnh dịch chuyển và quay - SHL (logical shift left) : dịch trái logic Cú pháp: Dịch trái toán hạng đích 1 bít SHL đích, CL ; - SHR (logical shift right): dịch phải logic Cú pháp: Dịch phải toán hạng đích 1 bit Dịch phải toán hạng đích một số lần bằng nội dung của CL - SAL (Shift arithmetic left): dịch trái số học Lệnh này giống SHL nhưng bít thứ 0 được giữ nguyên - SAR (Shift arithmetic right): dịch phải số học Giống như SHR nhưng bit cao nhất của toán hạng đích được giữ nguyên - ROL (Rotate left): quay vòng sang trái 1 bít Cú pháp: Quay vòng sang trái 1 bít 10 [...]... NOT: trả về TRUE nếu hai toán hạng bên trái và phải khác nhau + AND: trả về TRUE nếu cả hai toán hạng logic đều là TRUE + OR: trả về TRUE nếu một trong hai toán hạng là TRUE + XOR: trả về TRUE nếu hai toán hạng khác nhau 10 LẬP TRÌNH DÙNG HỢP NGỮ MASM Trong lập trình dùng hợp ngữ MASM, ta thường sử dụng các ngắt có sẵn trong Rom-Bios (Basic input output system: hệ thống vào ra cơ bản) hoặc trong DOS 22... thúc chương trình và trở về DOS (cho cả hai loại tập tin có đuôi COM và EXE) + Hàm 56H: Đổi tên tập tin DS:DX chứa địa chỉ chuỗi tên file cũ ES:DI chứa địa chỉ chuỗi tên file mới 10.2 Cấu trúc của chương trình hợp ngữ dùng MASM Một chương trình hợp ngữ có thể dùng nhiều module Các module có thể viết riêng lẽ bằng một chương trình xử lý văn bản và dịch riêng lẽ bằng MASM để cho các chương trình đích... Nếu = 0 thì đoạn chương trình sau IFE được dịch Nếu 0 thì đoạn chương trình sau ELSE được dịch nếu có lệnh giả ELSE IF1: Nếu một hợp ngữ đang dịch lần 1 thì đoạn chương trình sau IF1 được dịch IF2: Nếu một hợp ngữ đang dịch lần 2 thì đoạn chương trình sau IF2 được dịch IFDEF : Nếu ký hiệu đã được định nghĩa thì dịch đoạn chương trình sau IFDEF IFNDEF : Nếu... 10.1 Các ngắt thường dùng trong DOS Các ngắt của Dos được đánh số từ 20H đến 27H Ngắt quan trọng nhất là ngắt 21H gồm nhiều chức năng của Dos - INT 20h: Chấm dứt chương trình và trở về Dos từ một chương trình có đuôi COM - INT 23h: Chận tổ hợp phím Ctrl-Break Ta có thể chấm dứt sớm một chương trình bằng cách ấn tổ hợp phím Ctrl+Break - INT 21h: Ngắt 21h có nhiều hàm chức năng của Dos như sau: + Hàm... DSEG MOV DS, AX ; khởi động DS : ; (chương trình chính) : CTC PROC NEAR ; (nếu có) ; (chương trình con) CTC ENDP CSEG ENDS END BATDAU ; chấm dứt chương trình và chọn địa chỉ bắt đầu 10.3 Tập tin đuôi COM và tập tin đuôi EXE Hợp ngữ MASM cho phép tại hai loại tập tin có đuôi COM dùng cho các chương trình nhỏ còn tập tin có đuôi EXE dùng để xây dựng các chương trình lớn 10.3.1 Đặc điểm tập tin có đuôi... chương trình Sử dụng thanh công cụ chuẩn: Các thao tác trên thanh công cụ chuẩn cũng có thể thực hiện thông qua menu File và menu Emulator � Tạo và thực thi chương trình: - Nhấn New trên thanh công cụ sẽ xuất hiện cửa sổ chọn loại file: 35 Nhấn Cancel để bỏ qua, cửa sổ soạn thảo của chương trình sẽ xuất hiện - Soạn chương trình hợp ngữ và nhấn vào nút Emulate để biên dịch và mô phỏng chương trình Sau... chương trình sau IFNDEF IFB : Nếu đối số là khoảng trống hoặc không có đối số thì dịch đoạn chương trình sau IFB IFNB : Nếu có đối số thì dịch đoạn chương trình sau IFNB IFIDN , : Nếu = thì dịch đoạn chương trình sau IFIDN IFDIF , : Nếu thì dịch đoạn chương trình sau IFDIF 7 Nhóm lệnh giả về Macro... về Macro Lệnh giả Macro giúp ta viết một đoạn chương trình mà ta có thể xen vào ở bất cứ nơi nào trong chương trình hợp ngữ bằng cách viết ra tên của Macro mà ta muốn gọi Ta định nghĩa một Macro như sau: MACRO [tham số] ; (đoạn chương trình) ENDM ; (chấm dứt Macro) Ví dụ: Gan MACRO X, Y, Z 17 MOV AX, X MOV BX, Y MOV CX, Z ENDM Trong một chương trình nào đó ta có thể gọi MACRO Gen như sau: Gen 10,... số để chỉ đó là số âm: -5, -20 - Toán tử quan hệ Toán tử quan hệ dùng so sánh 2 toán hạng và thường được dùng trong việc dịch chương trình có điều kiện Cú pháp: EQ Nếu toán hạng 1 bằng toán hạng 2 thì biểu thức đúng (true) Một số toán tử quan hệ khác: + NE (not equal): trả về TRUE nếu 2 toán hạng không bằng nhau + LT (less than): trả về TRUE nếu toán hạng bên trái nhỏ hơn... giả về dịch (compile) có điều kiện Các lệnh giả về dịch có điều kiện nhằm báo cho hợp ngữ tiến hành dịch một nhóm lệnh nếu một điều kiện được thỏa mãn (đúng) Ngược lại sẽ không dịch khi điều kiện không thỏa mãn (sai) IF xxxx [đối số] có thể có những hình thức như sau: Cú pháp IF xxxx [đối số] ; đặt điều kiện dịch chương trình ; Nhóm lệnh [ELSE] 16 ; Nhóm lệnh ENDIF ; đánh dấu hết đoạn chương trình . Tên: Từ gợi nhớ mã lệnh Toán hạn Chú thích TỔNG QUAN VỀ LẬP TRÌNH HỢP NGỮ CPU 8086 là CPU 16 bít (bus số liệu ngoại có 16 dây). Nó được dùng để chế tạo. Pentium X 1. ĐẶC TÍNH TỔNG QUÁT CỦA HỢP NGỮ : 1.1. Cấu trúc của một dòng lệnh hợp ngữ - Trên một dòng văn bản chỉ cho phép viết duy nhất một dòng lệnh - Một lệnh của hợp ngữ gồm các phần: Ví dụ: LENH:. khảo đến chương trình con trong chương trình chính và chương trình liên kết sẽ gán các địa chỉ của các chương trình con. Một số hợp ngữ còn cho phép làm một thư viện chương trình con để sử dụng

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

Từ khóa liên quan

Mục lục

  • CALL nhản ;

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

  • Đang cập nhật ...

Tài liệu liên quan