Giới thiệu về Assembly Language (Hợp ngữ) potx

63 952 10
Giới thiệu về Assembly Language (Hợp ngữ) potx

Đ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ới thiệu về Assembly Language (Hợp ngữ) ……… , tháng … năm ……. BÀI 1 : MỞ ĐẦU I. Giới thiệu về Assembly Language (Hợp ngữ) 1. Giới thiệu về Assembly Language (Hợp ngữ) Việc lập trình bằng ngôn ngữ máy đòi hỏi người lập trình cần phải nhớ các mã lệnh bằng số, phải sắp đặt vị trí của mã lệnh và tất cả các số liệu trong bộ nhớ của máy tính, ngay cả các số liệu cũng phải viết dưới dạng số. Công việc này hết sức nặng nhọc và rất dễ gây nhầm lẫn. Chính vì vậy người ta cần đến Assembly Language, nó cho NSD các khả năng sau: • Cho phép dùng các ký hiệu gợi nhớ thay cho các mã lệnh bằng số của bộ VXL, ví dụ ADD thay cho 00000000; INT 13h thay cho 11001101 00010011 .v.v các ký hiệu loại này được gọi là mã lệnh (Op-Code). • Cho phép dùng các tên gọi (nhãn: Label) để chỉ các địa chỉ nhớ, NSD gọi đến các tên này như việc gọi các thủ tục hoặc như là việc truy nhập đến các biến hay hằng số trong các ngôn ngữ lập trình bậc cao. • Cho phép dùng các chỉ thị cho chính Assembler (Assembler Directive), để nó biết cần phải chuyển các mã của NSD như thế nào, chương trình bắt đầu ở đâu; dự trữ khoảng trống bao nhiêu cho dữ liệu; báo rằng không còn lệnh để chuyển mã ngữ tiếp nữa .v.v. Ví dụ ORG 100h: đoạn mã lệnh bắt đầu ở địa chỉ 100h,Code_seg: segment: tên Code_seg là đại diện cho 1 segment trong bộ nhớ end: hết mã ngữ. • Cho phép viết các chú thích trong chương trình, làm cho chương trình dễ đọc, dễ bảo trì. • Khi hợp dịch, các mã lệnh được chuyển trực tiếp thành các lệnh của bộ vxl để nó có thể thực hiện trực tiếp được. Các nhãn, các chỉ thị cho Assembler chỉ được chính Assembler sử dụng, không chuyển thành mã máy; còn các chú thích (comment) thì bị bỏ qua. Chính vì vậy mà các chương trình viết bằng Assembly rất ngắn gọn, chạy rất nhanh. • Chương trình được viết bằng các ký hiệu của ngôn ngữ Assembly được gọi là chương trình nguồn (Source Program). Chương trình ở dạng số tương tương với chương trình nguồn mà bộ VXL có thể hiểu được (microprocessor- compatible form) gọi là chương trình đích(Object Program). Assembler là chương trình thực hiện chuyển (convert) chương trình nguồn(Source Program) thành chương trình đích (Object Program). 2. Một số vấn đề về hệ đếm 2, số có dấu, số bù 2 2.1 Hệ đếm 2 Như ta đã biết, các phần tử nhớ cơ bản cấu tạo nên bộ nhớ cũng như các phần tử trong khối tính toán của máy tính đều là các phần tử có 2 trạng thái cân bằng ổn định 'on' và 'off' (ta có thể dùng để biểu diễn số 1 và 0) giống như trạng thái đóng mạch và cắt mạch của một cái công tắc điện. Tất cả chương trình và số liệu mà chương trình sử dụng đều đặt trong bộ nhớ trước khi được bộ VXL đọc. Như vậy sự kết hợp của một dãy các số 0 và 1 có thể biểu diễn bất cứ con số nào. Hệ đếm chỉ sử dụng các số 0 và 1 được gọi là hệ nhị phân (Binary numbering system) hay hệ đếm 2 , đó là hệ đếm cơ sở cho mọi loại MTĐT ngày nay. Một phần tử nhớ chỉ có 1 trong hai giá trị 0, 1 được gọi là 1 bit, đó là chữ viết tắt của Binary digit. Cũng tương tự như trong hệ thập phân, trong một số nhị phân giá trị của mỗi bit trong con số phụ thuộc vào vị trí của nó trong con số đó như được thể hiện sau đây: 7 6 5 4 3 2 1 0 vị trí bit trong con số x x x x x x x x 2 7 2 6 2 5 2 4 2 3 2 2 2 1 2 0 trọng số của bit 128 64 32 16 8 4 2 1 giá trị tương ứng trong hệ thập phân Để chuyển một số từ hệ thập phân sang hệ nhị phân ta thực hiện một loạt các phép MOD 2 đối với số đó cho tới khi số thập phân bằng 0: • Giá trị của phép tính MOD 2 đầu tiên là giá trị của bit 0 • Giá trị của phép tính MOD 2 tiếp theo là giá trị của bit 1.v.v Trong các lĩnh vực tin học, thường sử dụng một đơn vị lớn hơn, đó là byte, 1 byte gồm 8 bit, như vậy 1 byte có thể biểu diễn một con số có giá trị từ 00000000 đến 11111111 (0 - 255 trong hệ thập phân). Ngoài ra còn có các đơn vị 1KB = 210 byte, 1MB = 220 byte 2.2 Số có dấu Khi sử dụng 1 byte để biểu diễn số có dấu, người ta chỉ sử dụng 7 bit thấp để biểu diễn số, còn bit cao nhất (bit 7) để biểu diễn dấu của con số đó, nếu bit này = 0 thì con số là dương, nếu bit này = 1 thì con số là âm. Như vậy với 1 byte có thể biểu diễn các số từ -128 đến +127. Theo quy ước này số -1 có giá trị như sau: 10000001 nếu ta đem cộng với 1 thì kết quả lại = 10000010 = -2 D ! không như chúng ta chờ đợi là = 0; chính vì lý do này mà người ta phải dùng một dạng số đặc biệt - dạng bù 2 (two's complemented) để biểu diễn số âm. Để tìm dạng biểu diễn nhị phân của một số âm (nghĩa là tìm dạng bù 2 của nó), ta chỉ việc lấy số dương tương ứng rồi đảo giá trị các bit, sau đó cộng 1 vào kết quả là xong. Thí dụ tìm biểu diễn nhị phân của số -1: 0000 0001 đảo các bit thành 1111 1110, đem cộng thêm 1 trở thành 1111 1111.Nếu ta đem số -1 này cộng với +1 thì kết quả là 1 0000 0000, ta lờ số nhớ (1) đi thì được số 0000 0000 như mong muốn! đó là cách biểu diễn số âm trong máy tính! Nhìn vào số âm dạng bù 2 ta khó mà hiểu được số thập phân (âm) tương ứng bằng bao nhiêu, nếu muốn tính, ta vẫn áp dụng quy tắc trên để tính được số dương tương ứng.Thí dụ muốn biết 1101 0000 có giá trị thập phân tương ứng bằng bao nhiêu? • Đảo các bit 0010 1111 • Cộng thêm 1 = 0000 0001 • Kết quả = 0011 0000 = 32 + 16 = +48 , số thập phân tương ứng là -48 2.3. Hệ đếm thập lục phân (hệ 16) Biểu diễn số trong hệ cơ số 2 có nhiều điểm bất tiện cho người lập trình, vì vậy người ta tìm cách biểu diễn khác cho tiện lợi hơn, tuy vậy cần phải nhấn mạnh rằng bên trong máy tính tất cả lệnh và số liệu đều được biễu diễn dưới dạng nhị phân. Ngay từ khi máy tính điện tử mới ra đời, người lập trình cũng đã thường thao tác trên từng nhóm bit chứ không phải trên từng bit. Các bộ VXL đầu tiên là loại 4 bit, vì thế người ta có thể nhóm 4 bit lại và biểu diễn bằng một ký hiệu duy nhất. Với 4 bit có thể biểu diễn 16 giá trị khác nhau, người ta dùng các ký hiệu 0 9, A, B, C, D, E, F để biểu diễn các giá trị nhị phân từ 0000 đến 1111. Hệ đếm như vậy được gọi là hệ thập lục phân (hệ đếm cơ số 16) - hexadecimal numbering system. 3. Một số vấn đề cần nhắc lại (sau giáo trình CTMT) về bộ VXL Các Mode làm việc: Các bộ VXL 80286 (và các bộ VXL mới hơn của INTEL) có thể hoạt động trong 2 mode khác nhau: Real Address Mode và Protected Virtual Address Mode. • Real Address Mode : Trong Mode này 80286 hoạt động cũng giống như 8086, nhưng thực hiện các chương trình nhanh hơn từ 2 đến 5 lần, nó hỗ trợ tất cả các lệnh của 8086, thêm vào đó là các lệnh của riêng 80286. Khi chúng ta mới bật máy, 80286 bắt đầu ở Mode này, chỉ khi nào chương trình ra lệnh cho nó chuyển sang Mode kia (Protected Mode). • Protected Mode : Trong Mode này 80286 vẫn có mọi tính năng như ở Real Address Mode nhưng được thêm vào một số tính năng tinh vi để bảo vệ dữ liệu và quản lý bộ nhớ. Tính năng nổi bật nhất của Mode này là nó cho phép 80286 truy cập một bộ nhớ rất lớn (so với 8086) bằng cách sử dụng một kỹ thuật gọi là Virtual Addressing.Bằng kỹ thuật này 80286 có thể làm việc với 2 loại bộ nhớ: không gian địa chỉ vật lý (Physical address space) và không gian địa chỉ ảo (Virtual address space). 1. Không gian địa chỉ vật lý là miền bộ nhớ mà 80286 có thể làm việc với nó tại một thời điểm, bằng 2 24 = 16MB 2. Không gian địa chỉ ảo là miền bộ nhớ mà 80286 có thể đánh địa chỉ, bằng 2 30 = 1GB (1 Giga byte). Thuật ngữ ảo (Virtual) được sử dụng bởi vì nếu một chương trình cần truy cập bộ nhớ mà địa chỉ không thuộc không gian địa chỉ nhớ vật lý, hệ điều hành có thể sử dụng khả năng quản lý bộ nhớ của 80286 để chuyển đổi (swap) một phần thích hợp (applicable piece) của bộ nhớ ảo. Việc chuyển đổi bộ nhớ (swapping) này người lập trình không thấy được vì vậy anh ta có thể viết chương trình truy cập bất cứ địa chỉ nhớ nào trong toàn bộ không gian địa chỉ lớn đến 1GB. Virtual Disk từ Version 3.0 trở lên, DOS hỗ trợ việc sử dụng bộ nhớ trên 1MB, ta có thể sử dụng nó như 'Virtual Disk' (đĩa ảo hay RAM Disk). Để truy cập vùng nhớ cao này, bộ VXL tạm thời (momentarily) chuyển (switch) sang Protected Mode, thực hiện việc (vận) chuyển dữ liệu rồi lại chuyển trở về Real Mode như bình thường. Kết quả chung là ta có thể sử dụng một bộ nhớ RAM có kích thước lớn, tốc độ thao tác cực nhanh so với tốc độ thao tác trên đĩa. * Protected Mode được người thiết kế OS quan tâm, với người lập trình bình thường chỉ cần quan tâm tới Real Mode là đủ. II Tập lệnh của bộ vi xử lý 8088/8086 1. Bảng lệnh 8088/8086 (xem tài liệu chụp) 2. Phân loại các lệnh Căn cứ vào công việc mà lệnh thực hiện, có thể chia làm 5 nhóm lệnh như sau: 1/ Các lệnh số học: ADD dest,src cộng 2 toán hạng, đặt kết quả trong dest dest:= dest + src ADC dest, src cộng 2 toán hạng, cộng thêm số nhớ (Carry) từ lệnh ADD trước đó dest:= dest + src +Cf INC dest tăng destination lên 1 (dest có thể là thanh ghi hoặc địa chỉ) dest:= dest + 1 DEC dest giảm destination bớt 1 (dest có thể là thanh ghi hoặc địa chỉ) dest:= dest - 1 SUB dest,src lấy dest trừ đi src, để kết quả trong dest dest:= dest - src SBB dest,src lấy dest trừ đi src và trừ thêm số mượn từ lệnh SUB trước đó ,kết quả để trong dest dest:= dest - src - CF NEG dest đổi dấu của toán hạng dest:= 0-dest CMP dest, src so sánh (bằng cách trừ, nhưng không làm thay đổi dest và src) để đặt các cờ hiệu là nhớ, tràn, v.v MUL src nhân AL hay AX với một số dương (không có dấu) là src (src là reg/mem) AX:= (AL*src8); DX:AX:=(AX*Immed16) IMUL src nhân AL hay AX với một số nguyên có dấu DIV src chia AL hoặc AX cho giá trị trong reg/mem không dấu nếu chia cho 0 hoặc kết quả quá lớn sẽ gây ra INT 0 AL < (AX*src8); AH < (AX MOD src8) AX < (DX:AX*src16); DX < (DX:AX MOD src16) IDIV src chia AL hoặc AX cho giá trị trong reg/mem có dấu CBW đổi byte thành Word AL mở rộng theo dấu vào AH AH được điền đầy theo bit 7 của AL CWD đổi Word thành Word AX mở rộng theo dấu vào DX DX được điền đầy theo bit 15 của AX .v.v 2/ Các lệnh logic AND dest,src : nhân logic từng bit trong dest và src OR dest,src : OR logic từng bit trong dest và src XOR dest,src : XOR logic từng bit trong dest và src NOT dest : đảo từng bit trong dest (lấy bù 1) .v.v 3/ Các lệnh vận chuyển số liệu MOV dest,src : copy dữ liệu từ src (reg/mem) tới dest. Lưu ý rằng không thể MOV từ ô nhớ (mem) vào ô nhớ XCHG dest,src đổi (chỗ) giá trị giữa 2 thanh ghi hoặc giữa thanh ghi và bộ nhớ IN Port8 (or DX) nhận dữ liệu từ cổng vào AL hay AX byte : AL port word : AL [port] AH [port+1] OUT Port8 (or DX) gửi dữ liệu từ AL hay AX ra cổng byte : AL port word : AL [port] AH [port+1] LEA reg16, mem1 nạp địa chỉ vào thanh ghi, mem1 phải là một nhãn. reg16 được nạp địa chỉ của mem1 chứ không phải dữ liệu chứa trong mem1 ( nạp kết quả việc tính toán EA của địa chỉ tương đối vào reg16) PUSH src cất giá trị thanh ghi 16 bit (hoặc r/mem16) vào stack PUSH immed cất giá trị 16 bit (hoặc 8 bit mở rộng dấu) vào stack PUSHF cất giá trị của thanh ghi cờ vào stack POP dest chuyển giá trị từ stack vào dest (reg16 hoặc r/mem hoặc thanh ghi đoạn) POPF chuyển giá trị từ stack vào thanh ghi cờ .v.v 4/ Các lệnh thao tác trên xâu ký tự CLD Clear direction flag to UP (DF:=0) string Ops auto-increment STD set direction flag to Down (DF:=1) string Ops auto-decrement REP/REPE/REPZ lặp lại thao tác xâu ký tự (CX:= CX-1) cho đến khi C=0 REPNE/REPNZ lặp lại thao tác xâu ký tự ,sử dụng kết hợp với lệnh CMPS và SCAS .v.v 5/ Các lệnh điều khiển sự thực hiên chương trình JMP short/near/far target nhảy không điều kiện đến nhãn short : IP (IP + (target displacement sign-extended)) báo cho assembler là nhãn đích của lệnh nhảy JMP không xa hơn 127 bytes kể từ địa chỉ của lệnh tiếp theo. near : IP (IP + (target displacement) far : SS target_seg; IP target_offset indirect : IP (register or value in memory) JCXZ: nhảy tới nhãn khi CX=0, không kiểm tra cờ LOOP short_label CX CX-1 JA/JNBE JAE/JNB JB/JC JE/JZ JG/JNGE JGE/JNL .V.V INT TYPE thực hiện ngắt phần mềm (call a systen function) INTO type: if OF=OV=1 then perform INTO type IRET quay trở về từ lệnh gọi ngắt. Nó có ảnh hưởng như lệnh POP IP; POP CS; POPF 6/ Các lệnh điều khiển bộ VXL CLS xoá cờ CY thành NC (CF 0) CMC lấy phần bù (đảo giá trị của) cờ Carry) STC đặt cờ carry thành CY CLD clear direction flag (các lệnh với xâu ký tự tự động tăng) CLI cấm các ngắt (có thể che) STI bỏ mặt nạ ngắt (cho phép có thể ngắt) HLT ngừng xử lý (thực hiện các lệnh NOP cho đến khi một lời gọi ngắt xảy ra) .v.v 7/ Các lệnh điều khiển tính bảo vệ (80286/80386/80486) (chưa đưa vào chương trình phần này) 3. Phân tích một số mã lệnh - Trong hệ lệnh của 8088/8086 có nhiều lệnh tính chất giống nhau, chỉ khác nhau ở địa chỉ của các toán hạng. Chính vì vậy có những lệnh chỉ cần 1 byte mã lệnh là đủ để bộ VXL thực hiện, lại có những lệnh cần thêm một số thông tin nữa mới có thể thực hiện được, các thông tin này được chứa trong 1 byte, đi ngay sau byte mã lệnh thứ nhất. Việc xác định xem 1 lệnh nào đó có cần đọc thêm byte lệnh thứ 2 hay không được bộ giải mã lệnh quyết định. - Ta phân tích lệnh ADD làm ví dụ: Có các khả năng sau đối với việc cộng 2 toán hạng 1/ r/m r8 : cộng nội dung thanh ghi 8 bit vào một thanh ghi hay 1 ô nhớ 2/ r/m r16 : cộng nội dung một thanh ghi 16 bit và một thanh ghi 16 bit hoặc vào (2) ô nhớ 3/ r8 r/m cộng nội dung từ thanh ghi (8 bit) hoặc từ 1 ô nhớ (tất nhiên là 8 bit) vào 1 thanh ghi 8 bit 4/ r16 r/m cộng nội dung một thanh ghi hoặc ô nhớ vào 1 thanh ghi 16 bit 5/ AL im8 cộng trực tiếp 1 giá trị 8 bit vào AL 6/ AX im16 cộng trực tiếp 1 giá trị 16 bit vào AX 7/ r im8 hoặc im16; trường hợp này r # AX Cấu tạo của mã lệnh như sau: 1/ trường hợp 1 d: direction reg/memory with reg to either = 1: 'to' reg = 0 : 'from' reg 0 0 0 0 0 0 d w mod reg r/m w : word operation = 1 : with word = 0: with byte mã lệnh này chứa đựng các khả năng: nêu ở trên 2/ trường hợp 2 Immediate to reg/mem (not to AX) s: sign s= 1: signed value s= 0: unsigned value 1 0 0 0 0 0 s w mod 0 0 0 r/m data data byte 1 byte 2 nếu s:w = 01 mã lệnh này chứa đựng các khả năng: nêu ở trên 3/ trường hợp 3 Immediate to AX (Accumulator) 0 0 0 0 0 1 0 w data data byte 1 byte 2 nếu s:w = 01 mã lệnh này chứa đựng các khả năng: nêu ở trên III. Cấu tạo của lệnh, các Mode địa chỉ của Assembly Language Trên thị trường có một số Assembler, trong tài liệu này chúng ta sử dụng MACRO ASSEMBLER (MASM); về MASM sẽ được đề cập ở bài 2. 1. Cấu tạo của lệnh nhãn Mã lệnh các toán hạng ghi chú Data: MOV cx,ax ;nạp vào cx giá trị trong ax - Trường nhãn (label field), Nhãn dài tối đa 31 ký tự. ấn định một tên đại diện cho 1 lệnh assembly, để cho các lệnh khác có thể dùng tên này thay cho địa chỉ của lệnh đó trong bộ nhớ. Nhãn không được bắt đầu bằng 1 con số, không chứa dấu phân cách, nhãn kết thúc bằng dấu:; trong nhãn có thể có các ký tự '$', '?', '@','_' - Mã lệnh (Op-code) dài từ 2-7 ký tự, là những chữ viết tắt gợi trí nhớ, để chỉ các lệnh của bộ vxl. Mã lệnh có thể đứng liền sa dấu ': ' của nhãn hoặc phân cách bởi 1 số dấu cách (space). Giữa mã lệnh và các toán hạng phải có một số dấu cách. - Các toán hạng (operands): báo cho MPU biết phải tìm các toán hạng ở đâu - các ghi chú (comments) dùng để diễn giải dòng lệnh trong chương trình, để đọc lại cho dễ hiểu hơn. Trong các chương trình dài các chú thích rất quan trọng và cần thiết. ghi chú phải đi sau ký hiệu ';' và kết thúc bởi dấu xuống dòng (Enter) 2. Các Mode địa chỉ - Phương pháp xác định vị trí trong bộ nhớ của của 1 toán hạng được gọi là Mode địa chỉ (Addressing Mode). Mode địa chỉ của một toán hạng phụ thuộc vào vị trí trong bộ nhớ của dữ liệu ứng với toán hạng đó. Có một số cách phân loại Mode địa chỉ khác nhau, dưới đây nêu ra hai trong các cách đó: - Cách thứ nhất: chia làm 3 loại Mode địa chỉ: 1. Mode địa chỉ tức thời (Immediate Addressing Mode): sử dụng chính giá trị bằng số ở vị trí của toán hạng. ví dụ mov ax,0001h trong mode địa chỉ này phải có 1 vị trí nhớ hay thanh ghi làm destination.(số chu kỳ máy cần thiết tương ứng là 10 và 4) 2. Mode địa chỉ thanh ghi (register addressing mode) cả dest và src đều là thanh ghi. Vì cả hai đều ở bên trong MPU nên được thực hiện rất nhanh. ví dụ mov ax,cx cần 2 chu kỳ máy 3. Mode địa chỉ bộ nhớ (Memory Addressing Mode) dest hoặc src là địa chỉ nhớ (hay nhãn cũng vậy) có 2 loại mode địa chỉ bộ nhớ: 1. Địa chỉ trực tiếp (direct) 2. Địa chỉ gián tiếp (indirect) -direct: dest hoặc src là một địa chỉ nhớ được xác định bằng số địa chỉ hoặc nhãn. ví dụ: mov ax, mem1 thì nội dung ô nhớ có nhãn mem1 được chuyển vào ax. -indirect: địa chỉ nhớ không được nêu ra trực tiếp. có một thanh ghi dùng để chứa địa chỉ của ô nhớ chứa dữ liệu. Như vậy thanh ghi có tác dụng như là một địa chỉ gián tiếp để xác định vị trí dữ liệu. ví dụ: mov [bx],cx Có một số biến cách của mode gián tiếp này, tuy vậy ý nghĩa cơ bản không khác nhau. - Cách thứ 2: chia làm 7 Mode địa chỉ 1. Register addressing địa chỉ thanh ghi thí dụ MOV AX,BX 2. Immediate addressing địa chỉ tức thời MOV CL,-30; MOV CL, PI (PI EQU 3.14) 3. Direct addressing địa chỉ trực tiếp thí dụ MOV AX,TABLE (trong đó TABLE là một nhãn) 4. Register indirect addressing địa chỉ gián tiếp thanh ghi thí dụ MOV AX,[BX] 5. Base relative addressing địa chỉ tương đối cơ sở thí dụ MOV AX,[BX] + 4 6. Direct indexed addressing địa chỉ được chỉ số hoá trực tiếp (MOV DI,2) MOV AL, TABLE[DI] (trong đó TABLE là một tên của 1 byte (tên biến) 7. Base indexed addressing địa chỉ được chỉ số hoá cơ sở MOV AX, [BX][DI+2] IV. Các chỉ thị cho Assembler (Assembler Directives) (có khoảng 60) Các chỉ thị Assembler trông rất giống các mã lệnh ngôn ngữ Assembly, mỗi chỉ thị gồm có 4 trường (Fields) tên Chỉ thị đối số (argument) ghi chú PI EQU 3.14 ;xác định giá trị của PI - tên (name field) cũng giống như trường nhãn trong dòng lệnh có chỉ thị assembler cần trường tên, có chỉ thị không cần, tên bắt đầu bằng chữ cái, kết thúc bằng khoảng trống. - Chỉ dẫn Assembler (directive field) cũng tương tự như Op_code trong dòng lệnh. bắt đầu bằng khoảng trống và kết thúc bằng khoảng trống hoặc xuống dòng - argument field: chứa 1 địa chỉ nhớ hoặc 1 số để sử dụng cùng với chỉ thị và do chỉ thị xác định. bắt đầu bằng khoảng trống và kết thúc bằng xuống dòng *trong các chương trình đơn giản thường dùng các chỉ thị sau: ASSUME chỉ định các thanh ghi đoạn; giúp Assembler đổi các nhãn thành các địa chỉ bằng cách báo cho Assembler biết ta định dùng thanh ghi đoạn nào để đánh địa chỉ các nhãn này. format: ASSUME Seg-reg: Seg-name [, ] trong đó Seg-reg là một trong các thanh ghi đoạn sau DS, CS, ES, SS; Seg-name là tên sẽ đứng trước chỉ thị SEGMENT. thí dụ assume cs: cseg, ds: dseg SEGMENT Định nghĩa đoạn [...]... Offset hiện hành V các toán tử trong Assembly language ( Phần này sử dụng để tra cứu, TLTK số 1, trang 48 ) Toán tử là một sự sửa đổi (modifier) được sử dụng trong trường toán hạng (Operand Field) của một Op_code hay Pseudo_Op Có 5 loại toán tử: Số học, logic, quan hệ, trả lại giá trị, cho thuộc tính (An operator is a modifier used in the operand field of an assembly language or pseudo-op statement.)... MOV DL,10 INT 21H POP DX POP AX RET CR_LF ENDP ; CODE_SEG ENDS END START Bài giảng môn Assembly Language, Bài 3 - $ - Nguyễn Đình Việt, Khoa CNTT, ĐHQGVN,HN 1995 - Bài 5 Các thao với File TLTK: 1 Assembly Language for Pascal Programmers; Steven Holzner, Brady Page 71 2 PC Intern System Programming, Michael Tischer, Chapter 19... 21H 45 MOV BX, HANDLE_2 46 INT 21H 47 4 File có định kiểu trong ASSEMBLY LANGUAGE - File of Records Trong các version DOS trước đây khi các thao tác file sử dụng FCBs, NSD quy định kích thước Record và kích thước khối byte (đọc/ghi) Khi sử dụng file handle chúng ta chỉ phải chọn số byte cho thao tác đọc/ghi Như vậy, thực tế với assembly language chỉ có 1 kiểu file - file không định kiểu, trong đó mỗi... service 3Fh sẽ đọc số byte lớn nhất có thể đọc được (cho đến khi gặp dấu END OF FILE), sau khi đọc xong nó sẽ trả về AX số byte thực sự đọc Con số này ta sẽ sử dụng để báo cho service 40h (Write to file) số byte cần ghi Đây là cách chúng ta sẽ thường làm khi làm việc với File trong Assembly language Tất nhiên ta có thể tính toán ra kích thước file nhưng không nhất thiết phải làm như vậy 3.5 Việc ghi vào... giảng môn Assembly Language, Bài 2 - $ - Nguyễn Đình Việt, Khoa CNTT, ĐHQGVN,HN 1995 Bài 3 Dạng của 1 chương trình mẫu Bài này trình bày -các mô hình tổng quát để xây dựng nên 1 chương trình Mẫu chương trình này là chung nhất cho mọi chương trình Khi chúng ta viết chương trình của mình, ta chỉ cần điền số liệu và các chỉ thị cho chương trình cụ thể đó -về sự khác... 11000011 3 Đổi các số ở câu 2 sang dạng thập lục phân 4 Đổi sang dạng thập phân số 0D8H trong trường hợp: - 0D8H biểu diễn số không dấu - 0D8H biểu diễn số có dấu hết bài 1 -Bài giảng môn Assembly Language, Bài 1 - $ - Nguyễn Đình Việt, Khoa CNTT, ĐHQGVN,HN 1995 - Bài 2 Các bước trong quá trình tạo 1 chương trình chạy được Trên thị trường có khá nhiều Assembler,... CX:DX bytes from the beginng of the file 1 Move R/W pointer CX:DX bytes from where it is now 2 Set R/W pointer to CX:DX bytes from end of file Note: Vị trí mới của R/W pointer được trả về trong DX:AX if CF=CY=1, mã lỗi trả về trong AX 2 Chương trình thí dụ Program RUBOUT Đây là một chương trình đơn giản nhất - xoá một file, sử dụng Service 41h Service này không đòi hỏi 1 file handle để xoá file, nó chỉ... not_ok_message jmp print all_ok: mov dx, offset ok_message print: mov ah,09 int 21h exit: int 20h rubout endp end start 3 Chương trình minh hoạ: Program BACK.ASM Đây là chương trình minh hoạ cách thức mà Assembly language có thể làm việc với data của file Chương trinh này sẽ tạo một file lưu kiểu BAK của một file đã có trên đĩa do ta chỉ định tên của file đó ra Thí dụ, nếu ta chạy BACK.COM rồi chỉ ra tên 1... dữ liệu của một kiểu cụ thể, kiểu đó ta phải khai báo trước Các file không định kiểu là các file không có cấu trúc và có thể xem chúng như là bao gồm các byte không có liên hệ gì đến nhau cả Trong assembly language việc sử dụng tất cả các loại file đều giống như việc sử dụng file không định kiểu trong PASCAL - các dòng lệnh 34 38 (đọc từ file nguồn) MOV AH, 3FH 34 MOV CX, 60*1024 35 MOV DX, OFFSET DATA... báo Extrn ở modul chính trong 2 ví dụ này, nếu modul chính gọi modul phụ, thì ở modul chính phải có khai báo extrn pname: near III .com file DOS có thể chạy được 2 loại file chương trình viết bằng assembly language, đó là com file và exe file Nói chung người sử dụng dùng exe file khi cần tạo các chương trình lớn, dài hơn 64 KB, và dùng com file khi cần tạo các file chương trình . Giới thiệu về Assembly Language (Hợp ngữ) ……… , tháng … năm ……. BÀI 1 : MỞ ĐẦU I. Giới thiệu về Assembly Language (Hợp ngữ) 1. Giới thiệu về Assembly Language (Hợp ngữ) Việc lập. Cấu tạo của lệnh, các Mode địa chỉ của Assembly Language Trên thị trường có một số Assembler, trong tài liệu này chúng ta sử dụng MACRO ASSEMBLER (MASM); về MASM sẽ được đề cập ở bài 2. 1. Cấu. qua. Chính vì vậy mà các chương trình viết bằng Assembly rất ngắn gọn, chạy rất nhanh. • Chương trình được viết bằng các ký hiệu của ngôn ngữ Assembly được gọi là chương trình nguồn (Source

Ngày đăng: 07/07/2014, 21:21

Từ khóa liên quan

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

Tài liệu liên quan