1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Chng 3 nhp mon ASM ngon ng assembly

17 13 0

Đ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

Nội dung

Chương Nhập môn ASM Khoat Nguyen Ngôn ngữ Assembly { { { { Chương trình Assembly dịch mã máy trình biên dịch, chúng cần viết cho phù hợp với khuôn mẫu trình biên dịch Trong chương sử dụng trình biên dịch Microsoft Marco Assembler(MASM) Mã lệnh Assembly không phân biệt chữ hoa hay chữ thường ngơn ngữ C(C++) Các dịng lệnh: Cũng giống ngơn ngữ lập trình bậc cao khác, chương trình bao gồm dịng lệnh, nhiên ngơn ngữ dịng lệnh viết dịng Một dịng lệnh lệnh mà trình biên dịch dịch mã máy, hướng dẫn biên dịch để trình biên dịch thực số thao tác đặc biệt Mỗi lệnh Assembly bao gồm trường Tên Toán tử Toán hạng Chú thích { { { { Các trường phải phân cách ký tự trống hay TAB Vd: DCH MOV AH,2 ;Hàm hiển thị ký tự MAIN PROC Trong Vd trên, trường tên nhãn DCH, toán tử MOV, toán hạng AH 2, thích “Hàm hiển thị ký tự” MAIN tên, toán hạng PROC Dẫn hướng biên dịch khai báo chương trình có tên PROC Trường tên z Trường tên sử dụng làm nhãn lệnh, tên hàm, thủ tục, tên biến.Trình biên dịch chuyển tên thành địa nhớ z Các tên có chiều dài 1÷ 31 ký tự bao gồm chữ số, chữ ký tự đặc biệt (Các tên không bắt đầu chữ số) { { { Trường toán tử z Chứa mã lệnh dạng tượng trưng (symbolic) Trình biên dịch chuyển mã lệnh tượng trưng sang mã lệnh ngôn ngữ máy Trường toán hạng z Trường toán hạng xác định liệu thao tác động đến lệnh có tốn hạng, lệnh hai toán hạng, toán hạng ghi nhớ, nơi lưu trữ liệu, toán hạng thứ hai toán hạng nguồn, tốn hạng khơng bị thay đổi nội dung Trường thích z sử dụng để giải thích xem dịng lệnh người viết chương trình định làm Mở đầu trường phải dấu “;”, trình biên dịch bỏ qua thứ viết đằng sau dấu “;” Dữ liệu { { Bộ VXL làm việc với liệu nhị phân, trình biên dịch chuyển tất dạng liệu khác thành liệu nhị phân Các cách biểu diễn số liệu MASM: z Một số nhị phân biểu diễn chuỗi bit kết thúc chữ “b” (01010b) z Một số thập phân biểu diễn chuỗi chữ số thập phân kết thúc chữ “d” z Một số hexa biểu diễn bắt đầu chữ số thập phân kết thúc chữ “h” z Các ký tự chuỗi biểu diễn dấu nháy đơn ‘ ‘ nháy kép “” { Một số toán tử giả định nghĩa kiểu số liệu: Toán tử Biểu diễn kiểu số liệu DB Định nghĩa byte DW Định nghĩa word DD Định nghĩa từ kép DQ Định nghĩa word DT Định nghĩa 10 byte Các biến { { { Các biến ngôn ngữ Assembly có vai trị giống biến sử dụng ngơn ngữ lập trình bậc cao khác (C,C++, Pascal…) Mỗi biến có kiểu liệu, gán địa nhớ Các biến kiểu byte Khai báo có dạng: Tên DB giá trị khởi tạo Vd: Count_1 DB 10 ; Sẽ báo cho trình biên dịch gán cho tên Count_1 nhớ có độ dài byte, với giá trị thiết lập ban đầu 10 Nếu không muốn thiết lập giá trị ban đầu ta khai báo: Count_1 DB ? z { { Các biến kiểu word Khai báo có dạng: Tên DW giá trị khởi tạo Vd: Count_2 DW 10 ; Sẽ báo cho trình biên dịch gán cho tên Count_2 nhớ có độ dài word , với giá trị thiết lập ban đầu 10 Nếu không muốn thiết lập giá trị ban đầu ta khai báo: Count_2 DW ? Mảng z Là chuỗi byte, hay word nhớ Khai báo có dạng: Tên DB arr1, arr2,… , arrn Vd: String_b DB 12h, 13h, 14h ; Sẽ báo cho trình biên dịch gán cho tên String_b byte nhớ đầu tiên, String_b+1 byte nhớ thứ hai, String_b+2 byte nhớ thứ ba Khai báo có dạng: Tên DW arr1, arr2,…… arrn Vd: String_ w DW 12Ah, 13Bh, 14Ch ; Sẽ báo cho trình biên dịch gán cho tên String_ w word nhớ đầu tiên, String_ w+2 word nhớ thứ hai, String_ w+4 word nhớ thứ ba Phần tử Sring_b String_b+1 String_b+2 Địa 112h 113h 114h String_w String_w+2 String_w+4 112h 114h 116h { { Nôi dung 12h 13h 14h 12Ah 13Bh 14Ch Khai báo z Khai báo có dạng: Tên EQU const ; EQU= EQUATES Vd: First equ 0Dh ; Gán tên First cho 0Dh, mã Ascii ký tự trở đầu dòng, tên First sử dụng chương trình MOV DL, First Cấu trúc chương trình { { Các chương trình ngơn ngữ máy gồm có mã , liệu, ngăn xếp Mỗi phần chiếm đoạn nhớ, tổ chức chương trình ngơn ngữ Assembly Mã,dữ liệu, ngăn xếp cấu trúc đoạn chương trình Mỗi đoạn chương trình dịch thành đoạn nhớ trình biên dịch Các chế độ nhớ z Kích thước mã liệu chương trình xác định cách chế độ nhớ nhờ sử dụng cú pháp: { MODEL z kiểu nhớ Các kiểu nhớ thường dùng: Kiểu Mô tả SMALL Mã lệnh đoạn, liệu đoạn MEDIUM Mã lệnh chiếm nhiều đoạn, liệu đoạn COMPACT Mã lệnh đoạn, liệu chiếm nhiều đoạn LARGE Mã lệnh chiếm nhiều đoạn, liệu chiếm nhiều đoạn Các mảng 64K { { Các chế độ nhớ thường sử dụng là: SMALL, MEDIUM, COMPACT, LARGE Trừ có nhiều mã lệnh hay số liệu, kiểu thích hợp SMALL Chú ý: MODEL phải khai báo vào trước định nghĩa đoạn Đoạn liệu { Đoạn liệu chương trình chứa định nghĩa biến, Cú pháp: DATA Vd: Mess_1 Mess_2 DW MSG DB Portb EQU { DW ‘This is a Message’ 0x85h Đoạn ngăn xếp z Dùng để tạo khối nhớ để chứa ngăn xếp z z Cú pháp: STACK kích thước Kích thước: số tuỳ ý xác định vùng kích thước ngăn xếp tính theo byte.Chú ý: Trình biên dịch mặc định kích thước khơng khai báo là: 1Kb Vd: STACK z 100h ;Tạo 100h byte vùng ngăn xếp 10 { Đoạn mã z Chứa lệnh chương trình z Cú pháp: CODE z Tên: Đây tên đoạn, có khơng z z Bên đoạn mã, lệnh tổ chức thủ tục: Khai báo thủ tục ngôn ngữ Assembly là: Tên_thủ_tục { z z tên PROC ; thân thủ tục Tên_thủ_tục ENDP Vd: CODE MAIN PROC ; Các lệnh chương trình MAIN ENDP ;Các thủ tục khác 11 { { Khn mẫu chương trình MODEL SMALL STACK 100h DATA ; Các định nghĩa có biến CODE MAIN PROC ;Các lệnh người dùng MAIN ENDP ; Các thủ tục khác END ; Kết thúc chương trình ln ln phải có END Xây dựng chương trình { z Tìm hiểu số lệnh vào Lệnh INT: Lệnh đựơc dùng để gọi hàm DOS BIOS { Cú pháp: INT Số_hiệu_ngắt ;Số hiệu ngắt xác định hàm mà DOS, BIOS cung cấp, phần xem qua ngắt 21 DOS { Ngắt 21: dùng để gọi nhiều hàm DOS, hàm gọi cách đặt số hàm vào ghi AH, ta sử dụng hàm có số hiệu: 1, 2, 9.Trong hàm có số hiệu hàm vào ký tự từ bàn phím, số hiệu hàm đưa ký tự hình, số hiệu hàm đưa chuỗi ký tự hình 12 Hàm Vào Ra AH=1 AL=0: phím điều khiển =1;Mã Ascii z z Hàm Hàm Vào Ra Vào AH=2 DL=Mã Ascii ký tự hiển thị hay ký tự điều khiển AL= Mã Ascii ký tự hiển thị hay ký tự điều khiển AH=9 DX: địa tương đối chuỗi Kết thúc chuỗi ‘$’ Ra Khi kết thúc chương trình cần trả lại quyền điều khiển cho DOS, thực điều cách gọi hàm 4Ch ngắt 21 Chương trình { Xây dựng chương trình để đọc ký tự từ bàn phím hiển thị 13 .MODEL SMALL ;Xuống dòng STACK 100h MOV AH, CODE MOV DL, 0Dh ;Ký tự điều MAIN PROC khiển ;Hiển thị dấu ‘?’ INT 21h MOV AH, MOV DL, 0Ah ;Ký tự điều ;Hàm hiển thị ký tự khiển MOV DL, ’?’ INT 21h ;Ký tự hiển thị ‘?’ ;Hiển thị ký tự INT 21h MOV AX,BL ;Hiển thị ký tự INT 21h ; Đọc ký tự từ bàn phím ;Trả quyền điều khiển DOS MOV AH,1 ;Hàm đọc ký tự MOV AX, 4C00h INT 21h INT 21h MOV BL, AL MAIN ENDP ;Cất ký tự vào BL END MAIN { Biên dịch chạy chương trình z Sau dùng chương trình soạn thảo văn bẳn tạo tệp (File) chương trình nguồn với tên *.asm (Phần mở rộng phải asm, quy ước trình biên dịch Assembly), với ví dụ giả sử sau soạn thảo ta đặt tên Prog_in.asm z Sử dụng trình biên dịch MASM để dịch tệp nguồn Prog_in asm sang tệp ngôn ngữ máy Prog_in.obj Cú pháp biên dịch là: C:\ MASM Prog_in asm; ↵, dấu ‘;’ theo sau câu lệnh có nghĩa ta muốn trình biên dịch tạo tệp biên dịch Nếu khơng có dấu ‘;’, trình biên dịch tạo thêm tệp có tên *.lst, tệp *.crf MASM kiểm tra lỗi cú pháp tệp *.asm, tìm thấy lỗi hiển thị dịng lệnh hay cú pháp gây lỗi nguyên nhân gây lỗi, không thấy lỗi nào, MASM dịch mã ngôn ngữ Assembly thành tệp đối tượng ngôn ngữ máy với tên *.obj mà cụ thể Prog_in.obj 14 z z Sau có tệp Prog_in.obj ta cần dịch chúng tệp Prog_in.exe để thực chương trình Cú pháp: C:\Link Prog_in.obj;↵ Sau chạy tệp *.exe vừa dịch, cụ thể là: C:\Prog_in.exe Soạn thảo Tệp *.asm Trình biên dịch Tệp *.obj Trình liên kết Tệp *.exe 15 Ví dụ { { { Hiển thị chuỗi ký tự “Chao mưng ban den voi ngon ngu Assembly” Trong chương trình ta sử dụng hàm ngắt 21 Hàm ngắt 21: Hàm yêu cầu địa tương đối chuỗi ký tự chứa DX Sử dụng lệnh LEA(Load Effective Adress, nạp địa thực) z { Cú pháp : LEA dest, source Trong z dest:là ghi công dụng chung z source ô nhớ z lệnh thực copy địa tương đối source(nguồn) sang dest(đích) z ta lại phải sử dụng câu lệnh này? Do ví dụ sử dụng đoạn liệu chuỗi ký tự mà chương trình nạp vào nhớ, DOS dành 256 byte đoạn mở đầu chương trình (Program Segment Prefix, PSP), PSP chứa thơng tin chương trình chương trình truy nhập vùng nhớ DOS đưa địa PSP vào DS lẫn ES trước chạy chương trình DS khơng chứa địa đoạn liệu mà ta viết chương trình ví dụ 16 .MODEL SMALL STACK DATA String_in Assembly” CODE MAIN ;Khỏi tạo DS MOV AX, @DATA MOV DS, AX ;Hiển thị thông báo LEA DS, String_in MOV AH, INT 21h ;Trở DOS MOV AH, 4Ch INT 21h MAIN ENDP END MAIN 100h DB “Chao mưng ban den voi ngon ngu PROC ;Tên đoạn liệu định nghĩa ; DATA, trình biên dịch dịch @DATA ; thành địa ;Lấy chuỗi ký tự ;Hàm hiển thị Bài tập { { { Viết chương trình thực cơng việc sau: z Hiển thị ký tự “!” z Đọc hai số thập phân có tổng nhỏ 10 z Hiển thị số thơng báo tổng hai số Viết chương trình thực cơng việc sau: z Hiển thị thông báo nhập số liệu z Nhập vào chữ đầu tương ứng với :Họ, Tên đệm, Tên z Hiển thị lên hình Viết chương trình đọc chữ số Hex hiển thị chúng dạng nhị phân 17 ... lệnh ng? ?n ng? ?? máy Trư? ?ng tốn h? ?ng z Trư? ?ng toán h? ?ng xác định liệu thao tác đ? ?ng đến lệnh có toán h? ?ng, lệnh hai toán h? ?ng, toán h? ?ng ghi ô nhớ, nơi lưu trữ liệu, toán h? ?ng thứ hai toán h? ?ng nguồn,... trúc chư? ?ng trình { { Các chư? ?ng trình ng? ?n ng? ?? máy gồm có mã , liệu, ng? ?n xếp Mỗi phần chiếm đoạn nhớ, tổ chức chư? ?ng trình ng? ?n ng? ?? Assembly Mã,dữ liệu, ng? ?n xếp cấu trúc đoạn chư? ?ng trình... Prog_in .asm z Sử d? ?ng trình biên dịch MASM để dịch tệp nguồn Prog_in asm sang tệp ng? ?n ng? ?? máy Prog_in.obj Cú pháp biên dịch là: C: MASM Prog_in asm; ↵, dấu ‘;’ theo sau câu lệnh có nghĩa ta

Ngày đăng: 28/12/2021, 09:37

HÌNH ẢNH LIÊN QUAN

hiệu 2 là hàm đưa một ký tự ra màn hình, và sốhiệu 9  là hàmđưa một chuỗi ký tự ra màn hình. - Chng 3 nhp mon ASM ngon ng assembly
hi ệu 2 là hàm đưa một ký tự ra màn hình, và sốhiệu 9 là hàmđưa một chuỗi ký tự ra màn hình (Trang 12)
Xây dựng chương trình - Chng 3 nhp mon ASM ngon ng assembly
y dựng chương trình (Trang 12)
z Hiển thị lên màn hình - Chng 3 nhp mon ASM ngon ng assembly
z Hiển thị lên màn hình (Trang 17)
.MODEL SMALL .STACK 100h - Chng 3 nhp mon ASM ngon ng assembly
100h (Trang 17)
w