560 likes | 685 Views
Requirement for Coding in Assembly Language. SCC : Suthida Chaichomchuen std@kmitnb.ac.th. Contents. The basic requirements for developing an assembly program: The use of comments The general coding format The directives for controlling the assembled program listing
E N D
Requirement for Coding in Assembly Language SCC : Suthida Chaichomchuen std@kmitnb.ac.th
Contents • The basic requirements for developing an assembly program: • The use of comments • The general coding format • The directives for controlling the assembled program listing • The requirements for defining segments and procedures
Contents... • The general organization of the program: • Initializing the program • Ending its execution • The requirements for defining data items.
Assemblers & Compilers • Two main classes of computer language • high-level language • C • BASIC • low-level language • Assembly
High-Level Language • Uses powerful command • generate many machine language instructions • More productive • Uses a compiler program to translate the source code into machine code (object code).
Low-Level Language • Uses code symbolic instructions • generates one machine instructions • Advantages: • Provides more control over handling particular hardware requirements. • May generate smaller, more compact executable modules. • Often results in faster execution.
Low-Level Language... • Uses an assembler program to perform the translation.
Steps in Assembly, Link & Execute • Create an AssemblerSource program (.ASM) • Assembler the Source Program, Create an Object Program (.OBJ) • Link the Object Program, Create an Executable Program (.EXE) • Load and Execute the .EXE Program
Prog.ASM Prog.OBJ Prog.EXE Create Source Code Assembler Link Execute MASM.EXE LINK.EXE ML.EXE Steps in Assembly, Link & Execute
ไฟล์ที่ได้จากกระบวนการแปลงไฟล์ไฟล์ที่ได้จากกระบวนการแปลงไฟล์ • Object File (*.OBJ) • จะประกอบด้วยภาษาเครื่องที่ใช้สำหรับแปลงเป็นไฟล์ .EXE โดยโปรแกรม LINK • List File (*.LST) • จะบรรจุภาษาเครื่อง และโปรแกรมต้นฉบับ รวมทั้งอธิบายข้อผิดพลาดที่เกิดขึ้น • Cross-Reference File (*.CRF) • จะรวบรวมชื่อต่าง ๆ ที่ใช้ในโปรแกรมทั้งหมด
ไฟล์ที่ได้จากโปรแกรม Link • Run File (*.EXE) • สามารถโหลดลงหน่วยความจำและทำงานได้ • Loadmap File (*.MAP) • จะบอกความสัมพันธ์ของเซกเมนต์ต่าง ๆ ในโปรแกรม
[identifier] operation [operand(s)] [;comment] Statements... General format
Identifiers • คือชื่อที่ใช้แทนสิ่งต่าง ๆ ในโปรแกรมที่คาดว่าจะอ้างถึง • แบ่งได้เป็น 2 ชนิด • Name : อ้างถึงตำแหน่งของข้อมูลต่างๆ • Label : อ้างถึงตำแหน่งของคำสั่ง โพรซีเยอร์ หรือเซกเมนต์
Identifiers... • กฎการตั้งชื่อ • สามารถใช้ตัวอักษร A-Z, a-z, 0-9, ?, _, $, @, (.) • ห้ามใช้ตัวเลข 0-9 และ (.) ขึ้นต้นชื่อ • ตัวอักษรเล็ก/ใหญ่ถือเป็นตัวเดียวกัน • สูงสุดที่ 31 ตัวอักษร
Reserved Words • ชื่อต่าง ๆ ในภาษาแอสเซมบลีที่ถูกจองไว้เพื่อวัตถุประสงค์ของแต่ละตัว • ประเภท • Instructions • Directives • Operators • Predefined symbols
Statements... • operation : code ต่าง ๆ • defining data areas • coding instructions • operand : เตรียมข้อมูลไว้เพื่อกระทำ operation นั้น ๆ
Program Comments • ใช้เพื่อเพิ่มความกระจ่างให้กับโปรแกรมและง่ายต่อการปรับปรุงและพัฒนา • การใส่หมายเหตุจะไม่มีผลต่อขนาดของโปรแกรม • เขียนขึ้นต้นด้วยเครื่องหมาย ; (semicolon) • เช่น ; Calculate productivity ratio
Statements • Two types of statements: • Instructions : สิ่งที่แอสเซมเบลอร์จะต้องแปลไปเป็น object code • Directives : สิ่งที่บอกให้แอสเซมเบลอร์ดำเนินการปฏิบัติตามที่ระบุ
Directives • Statements that enable you to control the way in which a program assembles and lists. • Act only during the assembly of a program and generate no machine-executable code.
Directives... • Most common directives: • PAGE & TITLE • SEGMENT • PROC • ASSUME • END
PAGE Directive • กำหนดไว้ที่จุดเริ่มต้นของโปรแกรม เพื่อกำหนดจำนวนบรรทัดในแต่ละหน้าและจำนวนตัวอักษรในแต่ละบรรทัด
PAGE [length] [,width] PAGE Directive... General format length จำนวนบรรทัด/หน้า width จำนวนตัวอักษร/บรรทัด ex. PAGE 60,132
TITLE Directive • Use to cause a title for a program to print on line 2 of each page of the program listing. • Code at the start of the program.
TITLE text [comment] TITLE Directive... General format text ใช้หลักการเดียวกับการตั้งชื่อ กำหนดความยาวได้ถึง 60 ตัวอักษร comment ไม่ต้องใส่ ; นำหน้าข้อความ ex. TITLE ASMSORT Assembly program
SEGMENT Directive • For defining a segment: • SEGMENT • ENDS • The maximum size of a segment in real mode is 64K.
NAME OPERATION OPERAND COMMENT name SEGMENT [options] ;Begin segment . . name ENDS ;End segment SEGMENT Directive... General format
SEGMENT Directive... • SEGMENT statement • defines the start of a segment • segment name must be • present • unique • follow assembler naming conventions
SEGMENT Directive... • The operand of a SEGMENT statement may contain three types of options: • alignment • combine • class
name SEGMENT align combine ‘class’ SEGMENT Directive... General format of SEGMENT statement ex. name SEGMENT PARA STACK ‘stack’
SEGMENT Directive... • Alignment type • align : indicates the boundary on which the segment is to begin. • PARA : segment aligns on a paragraph boundary
SEGMENT Directive... • Combine type • combine : indicates whether to combine the segment with other segments when they are linked after assembly. • STACK, COMMON, PUBLIC, AT, NONE
SEGMENT Directive... • Class type • class : used to group related segment when linking. • Enclosed in apostrophes.
SEGMENT Directive... • ENDS statement • indicates the end of the segment • contains the same name as the SEGMENT statement
NAME OPERATION OPERAND COMMENT segname SEGMENT PARA procname PROC FAR procname ENDP segname ENDS PROC Directive • ใช้ในการกำหนด procedure ในโปรแกรม • General format
OPERATION OPERAND ASSUME SS:stackname,DS:datasegname,CS:codesegname,... ASSUME Directive • เพื่อกำหนดวัตถุประสงค์การใช้งานของแต่ละเซกเมนต์ในโปรแกรม • General format
OPERATION OPERAND END [procname] END Directive • เพื่อบอกการสิ้นสุดของโปรแกรม • วางไว้ที่บรรทัดสุดท้ายของโปรแกรมเสมอ • General Format
Instructions for initializing a program • เพื่อกำหนดตำแหน่งเริ่มต้นของ data segment • General format MOV AX,DATASG ;Get address of data segment MOV DS,AX ;Store address in DS
Instructions for ending program execution • เพื่อจบปฏิบัติการของ code segment • General Format MOV AH,4CH ;Request end processing MOV AL,retcode ;Optional return code INT 21H ;Call interrupt service MOV AX,4C00H ;Request normal exit INT 21H ;Call interrupt service
Simplified Segment Directives เป็นคำสั่งที่ใช้ในการกำหนด Segment แบบรวดเร็ว โดยสามารถเลือกรูปแบบของ Segment ตาม Memory Model แบบต่าง ๆ โดยมีรูปแบบคือ .MODEL memory-model
Model Number of Number of Code Segment Data Segments TINY * * SMALL 1 1 MEDIUM >1 1 COMPACT 1 >1 LARGE >1 >1 Memory Model
Simplified Segment Directives General format .STACK [size] .DATA .CODE [name]
Data definition คำสั่งการให้นิยามข้อมูล เป็นคำสั่งที่กำหนดเนื้อที่ในหน่วยความจำสำหรับเก็บค่าของตัวแปร บางครั้งก็มีการให้ค่าเริ่มต้นกับตัวแปรด้วย
Data definition... General format [name] Dn expression
Data definition... • name: ชื่อของตัวแปร จะมีหรือไม่มีก็ได้ ถ้ามีจะเป็นค่าของออฟเซตของไบต์แรกของคำสั่งนี้ • expression: คือค่าที่กำหนดให้กับตัวแปรอาจจะใส่เป็นค่าเริ่มต้นหรือไม่ใส่ก็ได้ • Dn : เป็นคำสั่งที่กำหนดเนื้อที่ให้กับตัวแปรมี 3 คำสั่งคือ
Data definition... • DB/Define Byte • กำหนด 1 ไบต์ในหน่วยความจำ • DW/Define Word • กำหนด 2 ไบต์ในหน่วยความจำ • DD/Define Double Word • กำหนด 4 ไบต์ในหน่วยความจำ
Data definition... • DF/Define Farword • กำหนด 6 ไบต์ในหน่วยความจำ • DQ/Define Quadword • กำหนด 8 ไบต์ในหน่วยความจำ • DT/Define Tenbytes • กำหนด 10 ไบต์ในหน่วยความจำ
Data definition... • ex. • DATA_BYTE DB 10, 4, 10H • DATA_WORD DW 100, 100H, -5 • DATA_DD DD 0FFFCH
. . . DATA_BYTE 0A 04 DB 10 DATA_WORD 64 00 00 DW 01 FB FF . . . จะมีการกำหนดเนื้อที่ในหน่วยความจำ และให้ค่าเริ่มต้นกับตัวแปรดังนี้
Data definition... • กำหนดค่าข้อมูลในลักษณะของตาราง • B_TABLE DB 0, 0, 0, 0, 8, 13 DB -10, 0, 5, 63, 63, 63 • การกำหนดค่า Operand ที่ซ้ำกัน • B_TABLE DB 4 DUP (0), 8, 13, DB -10, 0, 5, 3 DUP (63)
Data definition... • กำหนดเนื้อที่ของตัวแปรโดยไม่ให้ค่าเริ่มต้น • COUNT DW ? • AVERAGE DW ? • BUFFER DB 100 DUP (?)