staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3...
Transcript of staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3...
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
Chapter 3 ภาษาแอสเซมบล 8086/8088
ภาษาแอสเซมบล เปนภาษาระดบตำ�า ท�มความใกลเคยงกบภาษาเคร�อง คอ แทนท�จะเขยนคำาส�งในรปแบบ ของภาษาเคร�อง กใชคำาส�งในรปสญลกษณแทน คำาส�งภาษาแอสเซมบลหน�งคำาส�ง จงแปลไปเปนภาษาเคร�องหน�ง
คำาส�ง เปนลกษณะคำาส�งตอคำาส�ง อยางไรกตามเพ�อใหการเขยนโปรแกรมงายขน ภาษาแอสเซมบลจงมคำาส�งอก ประเภทหน�งท�ไมไดแปลไปเปนคำาส�งภาษาเคร�อง เรยกวา ไดเรคทฟ (directive) ใชเพ�อกำาหนดขาวสารให
กบแอสเซมเบลอร เชน กำาหนดตำาแหนง ขนาด และคาเร�มตนของขอมล เปนตน
ตวอยาง 3.1 แสดงการเขยนโปรแกรมในรปแฟม .COM source code name ex3-1.asm
page ,80 title Hello World Program
; This program displays "Hello, world!"
code_seg segment assume cs:code_seg,ds:code_seg org 100hstart: mov ah,9 lea dx,hello_message int 21h
mov ax,4c00h int 21h
hello_message db 'Hello, world!', 0dh, 0ah, '$'
code_seg ends
end start
assemble , link and convert to .com (see appendix.doc) แฟมท� ตองการนำาไปกระทำาการ ex3-1.com
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
1
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________- use masm/asmmasm/asm ex3-1,ex3-1,ex3-1;link/val ex3-1;exe2bin/x2b ex3-1.exe ex3-1.com- use tasmtasm ex3-1,ex3-1,ex3-1;tlink /t ex3-1;
ผลลพธของ masm ในแฟม ex3-1.lst
Microsoft MACRO Assembler Version 3.00 Page1-1
Hello World Program 09-29-99 page ,80 title Hello World Program ; This program displays "Hello, world!" 0000 code_seg segment assume cs:code_seg,ds:code_seg 0100 org 100h 0100 start: 0100 B4 09 mov ah,9 0102 8D 16 010D R lea dx,hello_message 0106 CD 21 int 21h 0108 B8 4C00 mov ax,4c00h 010B CD 21 int 21h 010D 48 65 6C 6C 6F 2C hello_message db 'Hello, world!', 0dh, 0ah, '
$' 20 77 6F 72 6C 64 21 0D 0A 24
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
2
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________ 011D code_seg ends end start
Microsoft MACRO Assembler Version 3.00 PageSymbols -1
Hello World Program 09-29-99
Segments and Groups: N a m e Size AlignCombine Class
CODE_SEG . . . . . . . . . . . . 011D PARA NONE
Symbols: N a m e TypeValue Attr HELLO_MESSAGE. . . . . . . . . . L BYTE 010DCODE_SEGSTART. . . . . . . . . . . . . . L NEAR 0100CODE_SEG
49698 Bytes free
Warning SevereErrors Errors 0 0
ตวอยาง 3.2 แสดงการเขยนโปรแกรมในรปแฟม .EXE source code name ex3-2.asm
page ,80 title Hello World Program
; This program displays "Hello, world!"
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
3
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________display equ 9h ;display output functiondoscall equ 21h ;DOS interrupt number
data_seg segmenthello_message db 'Hello, world!', 0dh, 0ah, '$'data_seg ends
code_seg segment assume cs:code_seg, ds:data_segstart: mov ax,data_seg mov ds,ax
mov ah,display mov dx,offset hello_message int doscall
mov ax,4c00h int doscallcode_seg endsend start
assemble and link แฟมท�ตองการนำาไปกระทำาการ ex3-2.exemasm/asm/tasm ex3-2,ex3-2,ex3-2;link/val/tlink ex3-2;
ผลลพธของ masm ในแฟม ex3-2.lst
Microsoft MACRO Assembler Version 3.00 Page1-1
Hello World Program 09-29-99
page ,80 title Hello World Program
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
4
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________ ; This program displays "Hello, world!" = 0009 display equ 9h ;display output functio
n = 0021 doscall equ 21h ;DOS interrupt number 0000 data_seg segment 0000 48 65 6C 6C 6F 2Chello_message db 'Hello, world!', 0dh, 0ah, '$' 20 77 6F 72 6C 64 21 0D 0A 24 0010 data_seg ends 0000 code_seg segment assume cs:code_seg, ds:data_seg 0000 start: 0000 B8 ---- R mov ax,data_seg 0003 8E D8 mov ds,ax 0005 B4 09 mov ah,display 0007 BA 0000 R mov dx,offset hello_message 000A CD 21 int doscall 000C B8 4C00 mov ax,4c00h 000F CD 21 int doscall 0011 code_seg ends end start
Microsoft MACRO Assembler Version 3.00 PageSymbols -1
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
5
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________Hello World Program 09-29-99
Segments and Groups: N a m e Size AlignCombine Class
CODE_SEG . . . . . . . . . . . . 0011PARA NONE
DATA_SEG . . . . . . . . . . . . 0010PARA NONE
Symbols: N a m e TypeValue Attr
DISPLAY. . . . . . . . . . . . . Number 0009DOSCALL. . . . . . . . . . . . . Number 0021HELLO_MESSAGE. . . . . . . . . .L BYTE 0000
DATA_SEGSTART. . . . . . . . . . . . . . L NEAR 0000
CODE_SEG
49698 Bytes free
Warning SevereErrors Errors 0 0
3.1 รปแบบคำาส�ง คำาส�งจะเขยนในหน�งบรรทด จะเร�มเขยนท�สดมภใดกได คำาส�งถกแบงออกเปน 4 เขต (field) ดงน
name operation code or mnemonic operand or address ; comment
แตละคำาส�งไมจำาเปนตองมครบทง 4 เขต ระหวางเขตท�หน�งกบสอง และ สามกบส� ตองม space หรอ tab ค�นอยางนอยหน�งตว สำาหรบ comment จะเร�มจาก ‘;’ แรกท�พบจนถงสนสดบรรทด
หลกการตงช�อตรงเขต name
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
6
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
ประกอบดวย ตวอกษร a-z หรอ A-Z (อกษรตวเลกหรอตวใหญไมตางกน) ตวเลข 0-9 และ สญลกษณพเศษ ? @ . _ $ อกขระ 31 ตวแรกของช�อเทานนท�มความหมาย อกขระ . ใชไดเฉพาะเปน
อกขระตวแรกเทานน อกขระตวแรกตองไมเปนตวเลข ช�อตองไมซำากบคำาสงวน ( ด appendix.doc) อน ไดแก ช�อของเรจสเตอร, operation code, mnemonic, หรอ operator เปนตน (ด
คมอประกอบ)name ใชสำาหรบกำาหนด label, variable, symbol, หรอ keyword กรณท�
เปน label จะตองม : ตอทายขางหลงดวยเสมอ name ท�เขยนหนา executable instruction ถอวาเปน label ตองม : ตอทายดวยเสมอ
3.1.1 Directive คำาส�งไดเรคทฟมหลายคำาส�งจะกลาวถงเฉพาะท�จำาเปนในหวขอน และในบทถดไปเม�อมความจำาเปนตอง
กลาวถง
operation code PAGE รปแบบ page [[length],width] [ ; comment ]
ใชเพ�อ กำาหนดจำานวนบรรทดและจำานวนอกขระท�พมพ ออกแฟม listing เชน page 60,132 หรอ page ,80
operation code TITLE
รปแบบ title string [ ; comment ] ใชเพ�อ พมพ string ท�เปนหวเร�องทกหนาตรงบรรทดท� 2 ใน listing
เชน title Hello World Program
operation code ORG รปแบบ org constant [ ; comment ]
ใชเพ�อ กำาหนดคาตวนบตำาแหนง (location counter) ในชวงการแปลใหมคาเทากบ constant
เชน org 100h เปนตน คาตวนบตำาแหนงสามารถอางถงไดในชวงการแปลดวย $
operation code ASSUME รปแบบ assume seg_reg:seg_name[,seg_reg:seg_name] …
[; comment ]ใชเพ�อ กำาหนด segment register ใหกบแตละ segment ในชวงการแปล
เชน assume cs:code_seg,ds:data_seg
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
7
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
ถาไมตองการใชเซกเมนตเรจสเตอรใด สามารถกำาหนดเปน seg_reg:nothing ได เชน assume cs:code_seg,ds:data_seg,es:nothing
operation code GROUP รปแบบ name group seg_name[, … ] [; comment ]
ใชเพ�อ กำาหนด หน�ง หรอ มากกวาหน�ง segment ใหเปน segment เดยวกน เชน prog_segment group
code_segment,data_segment
operation code END รปแบบ end [label] [; comment ]
ใชเพ�อ กำาหนดตำาแหนงเร�มตนของการกระทำาการ ท�ตำาแหนง label ถาโปรแกรมนเปนโปรแกรมยอย สวน label ไมตองมกได
เชน end start
operation code SEGMENT และ ENDS รปแบบ seg_name segment [options] [ ; comment ]
… seg_name ends [ ; comment ]ใชเพ�อ กำาหนด segment ใหมช�อเปน seg_name
โดยท� options อาจเปน- Alignment type ใชเพ�อกำาหนด boundary alignment ของจดเร�มตนเซ
กเมนต เชน BYTE หมายถง เร�มท�เลขท�ถดไป WORD, DWORD, PARA, PAGE หมายถง เร�มตนท�เลขท�ซ�งหารดวย 2, 4, 16, 256 ลงตว ถาไมกำาหนด จะหมาย
ถง PARA- Combine type ใชเพ�อเช�อมโยงเซกเมนตท�ม ช�อ , combine type, และ
class type เหมอนกน เชน PUBLIC ใชเพ�อบอกใหรวาตองการเช�อมโยงกบโปรแกรมท� อยคนละแฟมได หรอ STACK ใชเพ�อเช�อมโยง stack segment เปนตน ถาไม
ตองการเช�อมโยงใช NONE หรอ ไมตองเขยน สำาหรบ COMMON และ AT ศกษาดวย ตนเอง
- Class type ตองเขยนอยภายในเคร�องหมาย ‘ ‘ ใชเพ�อตองการรวมกลมเซกเมนตท� เก�ยวของกน ปกตแลว จะรวมคำาส�งไวใน code หรอ text segment ขอมล ไวใน
data segment และ ขอมลในกองซอนไวใน stack segment
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
8
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
หมายเหต ถาทานตองการเช�อมโยงกบ Microsoft C หรอภาษาระดบสงอ�น ๆ ท�เปนไปตามขอ ตกลงของ Microsoft ใหกำาหนดช�อและ options ดงน
memory segment alignmentcombineclass
model name type type typegroup
Small _TEXT WORD PUBLICCODE
_DATA WORD PUBLICDATA DGROUP
STACK PARA STACKSTACK DGROUP
Medium module_TEXT WORD PUBLICCODE
…_DATA WORD PUBLIC
DATA DGROUPSTACK PARA STACK
STACK DGROUP
Large module_TEXT WORD PUBLICCODE
…data PARA PRIVATE
PAR_DATA…_DATA WORD PUBLIC
DATA DGROUPSTACK PARA STACK
STACK DGROUP
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
9
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
ภาพขางลาง แสดง memory image ของโปรแกรมท�เขยนตามขอตกลงของ Microsoft C
high addressstack
near data segment DGROUP(_DATA)
far data segments(if any)
Program code(_TEXT)
Program Segment Prefixlow address
ตวอยาง 3.3 แสดงวธการเขยนโปรแกรมเพ�อใหสามารถตดตอกบ โปรแกรมท�เขยนดวยภาษาระดบสง ตามขอ ตกลงของ Microsoft ซ�งเปน small model
_TEXT segment word public 'CODE'_TEXT ends_DATA segment word public 'DATA'
กำาหนด template_DATA ends แบบนตอนตนโปรแกรมSTACK segment para stack 'STACK'
จากนนเขยน segmentSTACK ends
โดยไมตองกำาหนด options อกDGROUP group _DATA,STACK
assume cs:_TEXT,ds:DGROUP,ss:DGROUP,es:DGROUP_TEXT segment
ใสคำาส�งใด ๆ ตรงน_TEXT ends
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
10
CS344-321 Assembly Language Programming chapter 3 page_________________________________________________________________________DATA segment
ใสขอมลใด ๆ ตรงน_DATA endsSTACK segment para stack 'STACK' หรอจะกำาหนดoptions อก แตตองเหมอนกบตอนตนกำาหนดเนอท�กองซอนตรงนSTACK ends end
เพ�อใหผเขยนโปรแกรมมความสะดวกในการกำาหนดการเช�อมโยงตามขอตกลงของ Microsoft ดง นน แอสเซมเบลอร MASM version 5.0 เปนตนไป หรอ TASM version 4.1 จงม
directive เพ�มขน ดงน
DOSSEG ใชเพ�อบอกใหรวาจะเช�อมโยงตามขอตกลงของ Microsoft ท�ว�งภายใตระบบ ปฏบตการ DOS
.MODEL memory-model ใชเพ�อกำาหนด memory model เชน tiny, small, medium, compact , หรอ large เปนตน
.CODE [name] ใชเพ�อกำาหนด ช�อ ของ ‘CODE’ segment แทนการเขยนคำาส�ง segment โดยตรง
.DATA [name] ใชเพ�อกำาหนด ช�อของ ‘DATA’ segment แทนการเขยนคำาส�ง segment โดยตรง
.STACK [size] ใชเพ�อกำาหนด ขนาดของ stack แทนการเขยนคำาส�ง segment stack โดยตรงหมายเหต คำาส�ง assume กไมจำาเปนตองเขยน ถอวาเปนไปตามขอตกลง
ตวอยาง 3.4 สามารถเขยนโปรแกรมในตวอยาง 3.1 ใหมตามขอตกลงใหม ดงน source code name ex3-4.asm
page ,80 title Hello World Program
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
11
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________; This program displays "Hello, world!"
dosseg.model tiny
.codeorg 100hstart: mov ah,9 mov dx,offset hello_message int 21h
mov ax,4c00h int 21h
hello_message db 'Hello, world!', 0dh, 0ah, '$'
end start
assemble, link, and convert to .comtasm ex3-4,ex3-4,ex3-4;tlink /t ex3-4;
ผลลพธของ tasm ในแฟม ex3-4.lst
Turbo Assembler Version 4.1 09/29/99 11:03:33 Page 1ex3-4.ASMHello World Program
1 2 ; This program displays "Hello, world!" 3
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
12
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________ 4 dosseg 50000 .model tiny 6 70000 .code 8 org 100h 90100 start: 10 0100 B4 09 mov ah,9 11 0102 BA 010Cr mov dx,offset hello_message 12 0105 CD 21 int 21h 13 14 0107 B8 4C00 mov ax,4c00h 15 010A CD 21 int 21h 16 17 010C 48 65 6C 6C 6F 2C 20+ hello_message db 'Hello, world!', 0dh, + 18 77 6F 72 6C 64 21 0D+ 0ah, '$' 19 0A 24 20 21 end start
Turbo Assembler Version 4.1 09/29/99 11:03:33 Page 2Symbol TableHello World Program
Symbol Name Type Value??DATE Text "09/29/99"??FILENAME Text "ex3-4 "??TIME Text "11:03:33"??VERSION Number 040A@32BIT Text 0@CODE Text DGROUP@CODESIZE Text 0
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
13
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________@CPU Text 0101H@CURSEG Text _TEXT@DATA Text DGROUP@DATASIZE Text 0@FILENAME Text EX3-4@INTERFACE Text 000H@MODEL Text 1@STACK Text DGROUP@WORDSIZE Text 2HELLO_MESSAGE Byte DGROUP:010CSTART Near DGROUP:0100
Groups & Segments Bit Size Align Combine Class
DGROUP Group _DATA 16 0000 Word Public DATA _TEXT 16 011C Word Public CODE
ตวอยาง 3.5 สามารถเขยนโปรแกรมในตวอยาง 3.2 ใหมตามขอตกลงใหม ดงน source code name ex3-5.asm
page ,80 title Hello World Program
; This program displays "Hello, world!"dosseg.model small.stack 100h
.datahello_message db 'Hello, world!', 0dh, 0ah, '$'
.codemain: mov ax,@data
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
14
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________ mov ds,ax
mov ah,9 mov dx,offset hello_message int 21h
mov ax,4c00h int 21h
end main
assemble and linktasm ex3-5,ex3-5,ex3-5;tlink ex3-5;
ผลลพธของ tasm ในแฟม ex3-5.lst
Turbo Assembler Version 4.1 09/29/99 11:04:37 Page 1ex3-5.ASMHello World Program
1 2 ; This program displays "Hello, world!" 3 40000 .model small 50000 .stack 100h 6 70000 .data 80000 48 65 6C 6C 6F 2C 20+ hello_message db 'Hello, world!', 0dh, + 9 77 6F 72 6C 64 21 0D+ 0ah, '$' 10 0A 24
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
15
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________ 11 12 0010 .code 13 0000 main: 14 0000 B8 0000s mov ax,@data 15 0003 8E D8 mov ds,ax 16 17 0005 B4 09 mov ah,9 18 0007 BA 0000r mov dx,offset hello_message 19 000A CD 21 int 21h 20 21 000C B8 4C00 mov ax,4c00h 22 000F CD 21 int 21h 23 24 end main
Turbo Assembler Version 4.1 09/29/99 11:04:37 Page 2Symbol TableHello World Program
Symbol Name Type Value??DATE Text "09/29/99"??FILENAME Text "ex3-5 "??TIME Text "11:04:37"??VERSION Number 040A@32BIT Text 0@CODE Text _TEXT@CODESIZE Text 0@CPU Text 0101H@CURSEG Text _TEXT@DATA Text DGROUP@DATASIZE Text 0@FILENAME Text EX3-5@INTERFACE Text 000H
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
16
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________@MODEL Text 2@STACK Text DGROUP@WORDSIZE Text 2HELLO_MESSAGE Byte DGROUP:0000MAIN Near _TEXT:0000
Groups & Segments Bit Size Align Combine Class
DGROUP Group STACK 16 0100 Para Stack STACK _DATA 16 0010 Word Public DATA_TEXT 16 0011 Word Public CODE
operation code EQU รปแบบ name EQU constant [; comment ]
ใชเพ�อ กำาหนดให name เปนสญลกษณ (symbol) มคาเทากบ constant โดยท� constant อาจเปน numeric value , หรอ predefined symbol
เชนmaxint equ 32767move equ movaddress equ offset…
move ax,maxint move bx, address value1value1 db ‘Do you want to continue (y/n?)’
data definition directivesรปแบบ [name] operation-code initval[,initval]… [ ;
comment ] ใชเพ�อกำาหนดเนอท�และคา ถาม name จะมความหมายคลายช�อตวแปร (variable) ในภาษา
ระดบสง ตางกนตรงท�ตวแปรในภาษาแอสเซมบล มความหมายเหมอน label อ�น และสามารถกำาหนดใหเปนlabel ( โดยการใส : หลงช�อ) ท�สามารถ jump มาท�ตำาแหนงดงกลาวได ขอควรระวง! ในกรณนตำาแหนง
ท� jump มาตองเปน executable instruction ไมใชขอมล ถาไมมความชำานาญจรง ไมควรใช เปนท�ท�จะ jump มา ควรใชในความหมายของตวแปรท�เกบขอมล
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
17
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
operation-code อาจจะเปนคาใดคาหน�ง ตอไปนoperation-codedescription bytes attributeDB Define byte 1 byteDW Define word 2 wordDD Define doubleword 4 doublewordDQ Define quadword 8 quadwordDT Define tenbytes 10 tenbyte
สำาหรบ initval อาจจะเปน numeric values, string, constant expression, หรอ ? Numeric Values อาจเปน integer หรอ real กรณ real จะกลาวถงในบทหลงเก�ยวกบco-processor 8087- Integer ประกอบดวยตวเลขท�เปนไปไดของแตละเลขฐาน และสามารถตามดวย radix (d = decimal, h = hexadecimal, q หรอ o = octal, b = binary) ได ถาไมมradix จะหมายถงเลขฐานสบ กรณท�เปนเลขฐานสบหกตวเลขตวแรกตองไมเปน A,B,C,D,E,F ถาเปน
ตองใสเลข 0 นำาหนาเสมอเชน11110000b binary200 decimal300d decimal0ffh hexadecimal4a6h hexadecimal324q octal10o octal
- Character or String สามารถเขยนไดสองแบบ คอ เขยนอกขระใด ๆ ท�ไมใช ‘ ภายในเคร�องหมาย ‘ ‘ ถาตองการเขยน ‘ ตองเขยนสองตวตดกน เพ�อแทน ‘ หน�งตว หรอ เขยนอกขระใด ๆ ท�ไมใช “ ภายใน
เคร�องหมาย “ “ ถาตองการเขยน “ ตองเขยนสองตวตดกน เพ�อแทน “ หน�งตว เชน“a“‘B‘“I‘m“‘I“m‘‘H“E‘‘12#@%$‘หมายเหต อกขระหน�งตวกนเนอท� 1 ไบต และมคาตามรหสของอกขระนน ๆ
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
18
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
- Constant expression สามารถนำา integer, character, location counter ($), และ ตวแปร (location counter ของตวแปร) มาคำานวณทางคณตศาสตร
ดวยตวดำาเนนการเรยงจาก precedence สงไปตำ�า ดงนตวดำาเนนการ ความหมาย associative() parentheses+ , - unary plus, minus right
* , / , mod multiply, divide, modulo left+ , - binary plus, minus left
เชนconstant expression value20*5 100-4+-2 -631 mod 6 16/4 1‘2’-30h 23+2*5 13
- ? ใชเม�อไมตองการกำาหนดคา ระวง! ตางกบ ‘?‘ หรอ “?“ ซ�งหมายถง การกำาหนดคาใหเทากบรหสของ ?
- operator DUP ในกรณท�ตองการกำาหนดคาเรยงกนซำา ๆ เทากบจำานวนท�ตองการ เชน db 20 dup(0) หมายถง ตองการจองเนอท � 20 ไบต แตละไบตมคา 0 หรอ dd 100h dup(?) หมาย
ถง ตองการจองเนอท�ขนาด 1024 ไบต (256 double word) โดยไมตองกำาหนดคาเร�มตน
ตวอยาง 3.6char db ‘A‘ ; ASCII character 41h = 65 = 01000001b = 101qsigned1 db -128 ; smallest signed valuesigned2 db +127 ; largest signed valueunsigned1 db 0 ; smallest unsigned valueunsigned2 db 255 ; largest unsigned valuelist1 db 10, 32, 41h, 00100010b ; list1 has the same contents as list2
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
19
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________list2 db 0ah, 20h, ‘A‘, 22h ; list2 has the same contents as list1count db ? ; uninitilized 1 byteages db ?,?,?,?,? ; uninitilized 5 bytesrowsize db 10*20c_string db “Good afternoon“,0pascal_string db 14, “Good afternoon“a_long_string db ‘This is a long string, that‘
db ‘clearly is going to take‘db “several lines to store in an“db “assembly language program. “,0dh,0ah,0
dw 0,65535 ; lowest and highest unsigned valuesdw -32768,+32767 ; lowest and highest signed
valuesdw 256*2
mixed dw 1000h,4096, ‘AB‘,0db 4 dup(‘ABC‘) ; 12 bytes: “ABCABCABCABC”
a_string db “This is a string“a_string_lengthdb $-a_string ; $ is location counter
- label byte หรอ word ใชเพ�อบอกออฟเซต แตไมกนเนอท� หรอใชเม�อตองการใหออฟเซตเดยวกน มช�อตางกน เชน
names label bytefirst_name db 30 dup(?)last_namedb 40 dup(?)
หมายถง names และ first_name อยท�ออฟเซต เดยวกน หรอมองในลกษณะระเบยนขอมล ดงน
names first_name last_name
ขนาด 30 อกขระ ขนาด 40 อกขระ
แถวลำาดบ (array).א แถวลำาดบ 1 มต
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
20
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
สมมตวา a เปนแถวลำาดบ 1 มต ขนาด 20 ( มสมาชก 20 ตว) สมาชกแตละตวกนเนอท� 1 คำา คาเร�ม ตนเปนอะไรกได สามารถกำาหนดเนอท�ได ดงน
a dw 20 dup(?) ตองการหาสตรท�วไป สำาหรบหาตำาแหนงของสมาชกในแถวลำาดบ 1 มต ขนาด n ท�สมาชกแตละตวกน
เนอท� s byte ได ดงนตำาแหนง สมาชกตวท�a+0 1a+s*1 2. . .a+s*(n-1) nสตร สมาชกตวท� i อยท�ตำาแหนง a+s*(i-1).ב แถวลำาดบ 2 มต
สมมตวา a เปนแถวลำาดบ 2 มต ขนาด 3*4 ( มสมาชก 12 ตว) สมาชกแตละตวกนเนอท� 1 คำา คาเร�มตนกำาหนดดงน
11 12 13 1421 22 23 2431 32 33 34
ถาตองการเกบแบบ row major order เขยนเปนภาษาแอสเซมบลไดดงนa dw 11,12,13,14,21,22,23,24,31,32,33,34
ถาตองการเกบแบบ column major order เขยนเปนภาษาแอสเซมบลไดดงนa dw 11,21,31,12,22,32,13,23,33,14,24,34
ตองการหาสตรท�วไป สำาหรบหาตำาแหนงของสมาชกในแถวลำาดบ 2 มต ขนาด m*n โดยท�สมาชก แตละตวกนเนอท� s byte แบบ row order major ได ดงน
ตำาแหนง สมาชกตวท�a+ s*(1-1) 1,1a+ s*(2-1) 1,2. . . a+ s*(n-1) 1,na+s*n+ s*(1-1) 2,1a+s*n+ s*(2-1) 2,2. . .a+s*n+ s*(n-1) 2,n
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
21
s
s
แถวท� 1
แถวท� 2
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________. . .a+s*n*(i-1)+s*(1-1) i,1a+s*n*(i-1)+s*(2-1) i,2. . .a+s*n*(i-1)+s*(j-1) i,j. . .a+s*n*(i-1)+s*(n-1) i,n. . .a+s*n*(m-1)+s*(1-1) m,1a+s*n*(m-1)+s*(2-1) m,2. . .a+s*n*(m-1)+s*(n-1) m,n
สตร สมาชกตวท� i,j อยท�ตำาแหนง a+s*n*(i-1)+s*(j-1)
ในทำานองเดยวกน ตองการหาสตรท �วไป สำาหรบหาตำาแหนงของสมาชกในแถวลำาดบ 2 มต ขนาดm*n โดยท�สมาชกแตละตวกนเนอท� s byte แบบ column order major ได ดงน สตร สมาชกตวท� i,j อยท�ตำาแหนง a+s*m*(j-1)+s*(i-1)
PTR operator and LABEL DirectivesThe LABEL directive lets you create a new label or
variable starting at the same offset as another label. This is often used when a variable of one type (e.g., word) must be accessed using a different-sized operand (e.g., byte).
LABEL Directive
name LABEL type
For labels, you may use LABEL to redefine executable code as NEAR, FAR, or PROC and you don’t need to have : as a suffix after name . For variables, you can use the type
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
22
แถวท� is
s แถวท�m
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________specifiers BYTE, WORD, DWORD, FWORD, FWORD, QWORD, or TBYTE. Example,
…entry1 label NEAR
…mov al,byte1 ; move 1 st bytemov bx,word2 ; move third and fourth bytes…
byte1 label byte ; define first byte as byte1word1 dw 2532h ; define first two bytes as word1word2 label word; define third and fourth bytes as word2byte2 db 25h ; define third byte as byte2
db 32h ; define fourth byte
PTR operator
type PTR expression
For type see LABEL directive.
Example,mov ah,byte ptr worda ; move first byte (72)add bl,byte ptr worda+1 ; add second byte (26)mov byte ptr worda,05 ; move 05 to first bytemov ax,word ptr bytea ; move two bytes (3522)
to ax…
bytea db 22hdb 35h
worda dw 2672h ; data stored as 7226call far ptr [bx] ; call far procedure
operation code PROC และ ENDP
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
23
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
รปแบบ proc_name proc [near | far ] [ ; comment ] … proc_name endp [ ; comment ]ใชเพ�อ กำาหนด procedure ใหมช�อเปน proc_name
คำาหลก NEAR หมายถงสามารถ กระโดด หรอ เรยกใช ไดภายใน 64K FAR หมายถงสามารถ กระโดด หรอ เรยกใช ไดเกน 64K
ถาไมกำาหนดคำาหลก จะหมายถง NEAR สามารถใชคำาส�งกระโดดมาท � proc_name ได แตปกตแลวจะใชในลกษณะการเรยกใชดวยคำาส�ง
call ซ�งจะกลาวถงในภายหลง
ตวอยาง 3.7 title Hello World Program; This program displays "Hello, world!"dosseg.model small.stack 100h.datahello_message db 'Hello, world!', 0dh, 0ah, '$'.codemain proc
mov ax,@datamov ds,axmov ah,9
mov dx,offset hello_message int 21h mov ax,4c00h int 21hmainendpend main
3.1.2 Executable Instruction สำาหรบคำาส�งภาษาแอสเซมบลท�แปลไปเปนคำาส�งภาษาเคร�อง คำาส�งตอคำาส�งมรปแบบท�วไป ดงน
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
24
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
[Lebel:] [ Mnemonic Code ] [ Operand [,Operand] ] [; Comment]
ตำาแหนง (Label) “จะมหรอไมกได ถามตองเขยนเคร�องหมาย :” ตามหลงดวย ใชเพ�อกำาหนดเลข ท�ไบตแรกของคำาส�ง คำาส�งจะมหรอไมกได ถาไมม แสดงวาเขยนเฉพาะตำาแหนง ถาม ประกอบดวยสองสวน คอ ตว
ดำาเนนการ (operator) และตวถกดำาเนนการ (operand) ตวถกดำาเนนการอาจจะไมม มหน�งตวหรอ สองตว ขนอยกบตวดำาเนนการ ใชเพ�ออางถงเลขท�ของคำาส�งหรอขอมล ท�จะนำามาดำาเนนการ สวนตวดำาเนนการ
เขยนอยในรปสญลกษณเรยกวา รหสชวยจำา (Mnemonic Code) รหสชวยจำาทงหมดของ ซพย 8086/8088 แสดงอยในภาคผนวก (appendix.doc)
ตวถกดำาเนนการมวธการเขยนไดหลายวธ เรยกวา วธการกำาหนดเลขท�อย (addressing mode) แยกออกไดเปนสองประเภท คอ ประเภทท�เก�ยวกบขอมล และประเภทท�เก�ยวกบตำาแหนงของคำาส�งท�จะกระโดดไปทำางานตอไป จะกลาวถงในหวขอ 3.2
3.2 Addressing Modesก. เก�ยวของกบขอมลก.1 วธการกำาหนดเลขท�อยโดยเรจสเตอร (register) ตวถกดำาเนนการเขยนอยในรปของ
เรจสเตอร
ตวอยาง 3.8MOV AX,CXINC CX
ในท�น AX และ CX เขยนดวยวธการกำาหนดเลขท�อยโดยเรจสเตอร
ก.2 วธการกำาหนดเลขท�อยโดยทนท (immediate) ตวถกดำาเนนการเขยนอยในรปของ
นพจนคาคงท�
นพจนคาคงท�มขนาด 8 หรอ 16 บต แทนคาของขอมล
ตวอยาง 3.9MOV AX,65535MOV BH,255MOV CX,4-2+5
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
25
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
ในท�น 65535, 255 และ 4-2+5 ( คา 7) เขยนดวยวธการกำาหนดเลขท�อยโดยทนท เปนคาท�จะนำาไป เกบในเรจสเตอร AX, BH, และ CX ตามลำาดบ สวน AX, BH และ CX เขยนดวยวธการกำาหนดเลขท�
อยโดยเรจสเตอร
ก.3 วธการกำาหนดเลขท�อยโดยตรง (direct) ตวถกดำาเนนการเขยนอยในรปของ
ตำาแหนงขอมล +- นพจนคาคงท�
นพจนคาคงท�จะมหรอไมกได คาของตวถกดำาเนนการ ( ตำาแหนงขอมล บวกหรอลบ กบนพจนคาคงท�) มขนาด 16 บต แทนออฟเซทของขอมลในหนวยความจำา เลขท�เชงกายภาพของขอมลในหนวยความจำา เกดจากการนำาคา
นไปบวกกบคาในเซกเมนตเรจสเตอรของขอมล ตามวธการคำานวณในรปท � 2.3 คาออฟเซทขนาด 16 บตน เรยกอกอยางหน�งวา เลขท�อยยงผล (effective address) ซ�งใชเปนคาออฟเซทตามท�กลาวมา
แลวขางตน ถาไมกำาหนดเซกเมนตเรจสเตอรของขอมลโดยชดแจง การคำานวณเลขท�เชงกายภาพของขอมล จะใช เรจสเตอร DS เปนเซกเมนต โดยปรยาย
ตวอยาง 3.10MOV AX,COUNT AX
memoryADD DX,ARRY+10 AH AL .... 12 34 DS :
COUNT+1 12COUNT DW 1234H
DS : COUNT 34ARRY DW 20 DUP(?)
ในท�น COUNT และ ARRY+10 เขยนดวยวธการกำาหนดเลขท�อยโดยตรง คานไมไดเปนคาของขอมล แตเปนเลขท�อยยงผล ขอมลท�จะนำามาดำาเนนการอยท � ตำาแหนง DS:COUNT และ ตำาแหนง
DS:ARRY+10 ตามลำาดบ จะเหนไดวา การอางถงตำาแหนงของขอมลในโปรแกรม สามารถทำาไดโดยการ กำาหนดตำาแหนงดวยสญลกษณผเขยนไมตองกงวลวา โปรแกรมจะบรรจท�ไหนในหนวยความจำา
หมายเหต ในกรณของการกำาหนดเลขท�อยโดยตรง เลขท�อยยงผลกบการใช offset operator จะ เหมอนกน เชน
lea dx,count จะเหมอนกบ mov dx,offset count เปนตน หมายถงเอาคา ออฟเซทของ count ใสใน dx
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
26
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
ก.4 วธการกำาหนดเลขท�อยโดยเรจสเตอรทางออม (register indirect) ตวถกดำาเนนการเขยนอยในรปของ
[ เรจสเตอร ]
โดยท� เรจสเตอรอาจจะเปน เรจสเตอรฐาน (BX, BP) หรอ เรจสเตอรดรรชน (DI, SI) ท�เกบเลขท�อยยงผล ของขอมลในหนวยความจำา ถาไมกำาหนดเซกเมนตเรจสเตอรของขอมลโดยชดแจง การคำานวณเลขท�เชง
กายภาพของขอมล จะใชเรจสเตอร SS เปนเซกเมนต เม�อใชเรจสเตอร BP มฉะนนจะใช DS โดยปรยาย
ตวอยาง 3.11 MOV BX,105H
MOV AX,[BX] AXADD CX,[DI] AH AL
memory 12 34 DS : 0106 12 BX DS : 0105 34 BH BL 01 05
ในท�น ขอมลท�จะนำามาดำาเนนการ ของคำาส�งแรกจะอยท� DS:BX สวนคำาส�งท�สอง จะอยท� DS:DI
หมายเหต ในกรณน เลขท�อยยงผลกบการใช offset operator จะตางกน เชน lea dx,[bx] หมายถง เอาคาออฟเซทท�เกบใน bx ใสใน dx แต mov dx,offset [bx]
จะมความหมายเหมอน mov dx,[bx] ดงนนจงไมมความจำาเปนตองใส offset คอ เอาขอมลท�ตำาแหนงออฟเซทซ�งเกบ
ใน bx ใสใน dx
ก.5 วธการกำาหนดเลขท�อยโดยเรจสเตอรสมพนธ (register relative) ตวถกดำาเนนการเขยนอยในรปของ
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
27
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
ตำาแหนงขอมล+- นพจนคาคงท� [ เรจสเตอร +- นพจนคาคงท� ] หรอ [ เรจสเตอร +- นพจนคาคงท� ]
โดยท� เรจสเตอรอาจจะเปน เรจสเตอรฐาน (BX, BP) หรอ เรจสเตอรดรรชน (DI, SI) นพจนคาคงท�จะม หรอไมกได เลขท�อยยงผลเกดจากการบวกคาในเรจสเตอร กบ ระยะหาง (displacement) ขนาด 8
หรอ 16 บต ในรปแบบแรก ระยะหาง คอ ตำาแหนงขอมล บวกหรอลบ กบนพจนคาคงท� สวนในรปแบบท�สอง ระยะหาง คอ นพจนคาคงท � ท�จะนำาไปบวกกบคาในเรจสเตอร ถาไมกำาหนดเซกเมนตเรจสเตอรของขอมลโดยชด
แจง การคำานวณเลขท�เชงกายภาพของขอมล จะใชเรจสเตอร SS เปนเซกเมนต เม�อใชเรจสเตอร BP มฉะนนจะ ใช DS โดยปรยาย
ตวอยาง 3.12MOV BX,2 BXMOV AX,VAR_X[BX] AX BH BLMOV BL,MESG[SI+10H] AH AL 00 02
memoryMOV CX,[BX-1] 56 78
... DS : VAR_X+3 56
VAR_X DW 1234h DS : VAR_X+2 78 DW 5678h DW 9abch
MESG DB ‘Hello’
ในตวอยางน คำาส�งแรกมตำาแหนงขอมลท�จะนำามาดำาเนนการอยท � DS:VAR_X+BX เชน ถา BX มคา เปน 0, 2, หรอ 4 ขอมลท�ตำาแหนงดงกลาว จะเปน 1234h, 5678h, หรอ 9abch ตามลำาดบ
เปนตน
ก.6 วธการกำาหนดเลขท�อยโดยฐานดรรชน (base indexed) ตวถกดำาเนนการเขยนอยในรปของ
[ เรจสเตอรฐาน ] [ เรจสเตอรดรรชน ]
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
28
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
เลขท�อยยงผล เกดจากการบวกคาในเรจสเตอรฐาน กบคาในเรจสเตอรดรรชน ถาไมกำาหนดเซกเมนตเรจสเตอร โดยชดแจง การคำานวณเลขท�เชงกายภาพของขอมล จะใชเรจสเตอร SS เปนเซกเมนต เม�อใชเรจสเตอร BP ม
ฉะนนจะใช DS โดยปรยาย
ตวอยาง 3.13 BX SI 0105 0004
MOV AX,[BX][SI] AX MOV CX,[BP][DI] AH AL memory 12 34 DS : 010A 12 DS : 0109 34 + 4 . . . DS : 0105
ในท�น ตำาแหนงของขอมลท�จะนำามาดำาเนนการจะอยท� DS:BX+SI และ SS:BP+DI ตามลำาดบ
ก.7 วธการกำาหนดเลขท�อยโดยฐานดรรชนสมพนธ (relative based indexed) ตวถกดำาเนนการเขยนอยในรปของ
ตำาแหนงขอมล +- นพจนคาคงท� [ เรจสเตอรฐาน +- นพจนคาคงท� ] [ เรจสเตอรดรรชน +- นพจน คาคงท� ]
หรอ [ เรจสเตอรฐาน +- นพจนคาคงท� ] [ เรจสเตอรดรรชน +- นพจนคาคงท� ]
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
29
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
นพจนคาคงท�จะมหรอไมกได เลขท�อยยงผล เกดจากการบวกคาในเรจสเตอรฐาน กบคาในเรจสเตอรดรรชน กบ ระยะหาง เชนเดยวกน ถาไมกำาหนดเซกเมนตเรจสเตอรโดยชดแจง การคำานวณเลขท�เชงกายภาพของขอมล จะใช เรจสเตอร SS เปนเซกเมนต เม�อใชเรจสเตอร BP มฉะนนจะใช DS โดยปรยาย
ตวอยาง 3.14 BX SI 0105 0004 MOV AX,MYVAR[BX][SI] AX
MOV CX,DATA[BX+10][SI-2] AH ALMOV DX,[BP+2][DI] 12 34 DS :
MYVAR+010A 12 DS : MYVAR+0109 34 . . . DS : MYVAR+0105 . . . DS : MYVAR
ในตวอยางน คำาส�งแรกมตำาแหนงขอมลอยท � DS:MYVAR+BX+SI, คำาส�งท�สองมตำาแหนงขอมลอย ท� DS:BX+10+SI-2 และคำาส�งท�สามมตำาแหนงขอมลอยท� SS:BP+2+DI
ข. เก�ยวของกบตำาแหนงของคำาส�งท�จะกระโดดไปทำางานตอไป
ข.1 วธการกำาหนดเลขท�อยภายในเซกเมนตโดยตรง (intrasegment direct) ตวถกดำาเนนการเขยนอยในรปของ
ตำาแหนงคำาส�ง +- นพจนคาคงท�
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
30
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
นพจนคาคงท�จะมหรอไมกได เลขท�อยยงผลท�จะกระโดดไป เกดจากการบวกคาในเรจสเตอร IP กบระยะหาง ( ตำาแหนงคำาส�ง บวกหรอลบ กบนพจนคาคงท�) ระยะหางมขนาด 8 หรอ 16 บต ขนอยกบคำาส�ง คำาส�งกระโดด
แบบมเง�อนไข จะมระยะหางขนาด 8 บตเทานน การกระโดดจงหางจากเลขท�ไบตสดทายของคำาส�งปจจบนไดไมเกน –128 ถง 127 ไบต สวนการกระโดดแบบไมมเง�อนไข มไดทงระยะหางขนาด 8 และ 16 บต (หางจากเลข
ท�ไบตสดทายของคำาส�งปจจบนไดไมเกน -32768 ถง 32767 ไบต) การกระโดดแบบมเง�อนไข และการก ระโดดแบบไมมเง�อนไข ท�มระยะหางขนาด 8 บต เรยกวา การกระโดดระยะสน
ตวอยาง 3.15CMP AX,0JG POSITIVEJMP NEGATIVE
POSITIVE:...
JMP SHORT NEXT+2NEGATIVE:
...NEXT:
ในตวอยางน ถาคาในเรจสเตอร AX มคามากกวา 0 จะกระโดดไปท�ตำาแหนง POSITIVE ในกรณนเปนการ กระโดดแบบมเง�อนไข จงเปนการกระโดดระยะสน มฉะนน จะเปนการกระโดดระยะยาว ไปท�ตำาแหนง
NEGATIVE สวนคำาส�ง JMP SHORT NEXT+2 เปนการกระโดดแบบไมมเง�อนไขระยะสน ไปท� ตำาแหนง NEXT+2
ข.2 วธการกำาหนดเลขท�อยภายในเซกเมนตโดยออม (intrasegment indirect) ตวถกดำาเนนการเขยนอยในรปแบบเดยวกนกบรปแบบท�เก�ยวของกบขอมล ยกเวน วธการกำาหนดเลขท�อยโดย
ทนท และแบบโดยตรง กรณท�ตวถกดำาเนนการเปน เรจสเตอร คาใน IP จะเปล�ยนตามคาในเรจสเตอร กรณท�ตว ถกดำาเนนการเปนหนวยความจำาท�ไมใชแบบโดยตรง คอ มวธการกำาหนดเลขท�อยแบบ ก.4-ก.7 โดยท�เลขท�เชง
กายภาพของหนวยความจำา มวธการคำานวณ เหมอนกบรปแบบท�เก�ยวของกบขอมลทกประการ คา IP จะเปล�ยน ตามขอมลท�เกบอยในหนวยความจำาตำาแหนงนน ใชกบคำาส�งกระโดดแบบไมมเง�อนไขเทานน
ตวอยาง 3.16 JMP BX ; jump to offset in BX
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
31
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
JMP NEAR PTR BX ; jump to offset in BX
LEA BX,KEEPL1JMP [BX] ; jump to offset keep in
KEEPL1…
KEEPL1 DW ? ; keep offset to jump to here
ข.3 วธการกำาหนดเลขท�อยระหวางเซกเมนตโดยตรง (intersegment direct) ตวถกดำาเนนการเขยนอยในรปของ
ตำาแหนงคำาส�ง +- นพจนคาคงท�
นพจนคาคงท�จะมหรอไมกได ใชเพ�อการกระโดดขามระหวางเซกเมนต คาในเรจสเตอร CS และ IP จะถกแทนท�ดวยคาเซกเมนตและออฟเซทท�กำาหนด
ตวอยาง 3.17SEG1 SEGMENT
...JMP FAR PTR SEG2_LOC ...
SEG1 ENDSSEG2 SEGMENT
...SEG2_LOC:
...SEG2 ENDS
หรอassume cs:code1_seg
code1_seg segmentstart: mov ax,1 jmp far ptr lab1 mov ax,2
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
32
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________code1_seg ends assume cs:code2_segcode2_seg segment mov ax,3lab1: mov ax,4 mov ax,4c00h int 21hcode2_seg ends end start
ข.4 วธการกำาหนดเลขท�อยระหวางเซกเมนตโดยออม (intersegment indirect) ตวถกดำาเนนการเขยนอยในรปแบบเดยวกนกบรปแบบท�เก�ยวของกบขอมล ยกเวน วธการกำาหนดเลขท�อยโดย
ทนท แบบโดยตรงและวธการกำาหนดเลขท�อยโดยเรจสเตอร คาท�จะนำาไปแทนท�ในเรจสเตอร CS และ IP อยใน หนวยความจำาขนาดสองคำาท�อยตดตอกน คำาแรกบรรจใน IP คำาท�สองบรรจใน CS โดยท�เลขท�เชงกายภาพของ
หนวยความจำา ( วธการกำาหนดเลขท�อยแบบ ก.4-ก.7) มวธการคำานวณ เหมอนกบรปแบบท�เก�ยวของกบขอมล ทกประการ ใชกบคำาส�งกระโดดแบบไมมเง�อนไขเทานน
ตวอยาง 3.18CALL FAR PTR [DI] ; IP <- [DI], CS <-[DI+2]
3.3 Segment Overrides ปกตแลวโปรแกรมจะตองอางถงตำาแหนงของขอมลโดยใช เซกเมนตเรจสเตอร DS ในกรณท�มความ
จำาเปนตองใชเรจสเตอรอ�นแทน สามารถทำาไดโดยการทำา segment override เชนmov ax,cs:my_data
ใชขอมลตรงตำาแหนง cs:my_data แทนท�จะเปนตำาแหนง ds:my_data เปนตน แตมขอยกเวน คอ string instruction ไมสามารถทำา segment override จะใช
เซกเมนตเรจเตอรตามท�คำาส�งนน ๆ กำาหนด ถาไมทำา segment override โดยตรง จากท�ไดกลาวมาแลวในหวขอ 3.1.1 ถาผเขยนใช
คำาส�ง ASSUME เพ�อกำาหนดเรจสเตอรท�ไมใช DS แอสเซมเบลอรจะใส segment override ใหโดยอตโนมต ดงตวอยาง 3.19 แตถาไมกำาหนดโดยตรงและไมใช ASSUME เพ�อบอกใหแอสเซมเบลอร
ทราบ จะเกดความผดพลาด ตามตวอยาง 3.20
ตวอยาง 3.19 source code
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
33
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________data segmentvar1 db 1data ends
buffer segmentvar2 db 2buffer ends
code segmentvar3 db 3 assume cs:code, ds:data, es:buffer inc var1 inc var2 inc var3code ends end
ผลลพธของ masm ในแฟม listing
Microsoft MACRO Assembler Version 3.00 Page1-1 09-28-99
0000 data segment 0000 01 var1 db 1 0001 data ends 0000 buffer segment 0000 02 var2 db 2 0001 buffer ends 0000 code segment 0000 03 var3 db 3
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
34
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________ assume cs:code, ds:data, es:buffer 0001 FE 06 0000 R inc var1 0005 26: FE 06 0000 R inc var2 000A 2E: FE 06 0000 R inc var3 000F code ends endหมายเหต 26: หมายถง segment override ES: และ 2E: หมายถง CS:
Microsoft MACRO Assembler Version 3.00 PageSymbols -1 09-28-99
Segments and Groups:
N a m e Size AlignCombine Class
BUFFER . . . . . . . . . . . . . 0001PARA NONECODE . . . . . . . . . . . . . . 000FPARA NONEDATA . . . . . . . . . . . . . . 0001PARA NONE
Symbols:
N a m e TypeValue Attr
VAR1 . . . . . . . . . . . . . . L BYTE 0000DATAVAR2 . . . . . . . . . . . . . . L BYTE 0000BUFFERVAR3 . . . . . . . . . . . . . . L BYTE 0000CODE
49698 Bytes free
Warning SevereErrors Errors
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
35
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________0 0
ตวอยาง 3.20 source codedata segmentvar1 db 1data ends
buffer segmentvar2 db 2buffer ends
code segmentvar3 db 3; assume cs:code, ds:data, es:buffer inc var1 inc var2 inc var3code ends end
ผลลพธของ masm ในแฟม listing
Microsoft MACRO Assembler Version 3.00 Page1-1 09-17-99
0000 data segment 0000 01 var1 db 1 0001 data ends 0000 buffer segment 0000 02 var2 db 2 0001 buffer ends
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
36
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________ 0000 code segment 0000 03 var3 db 3 ; assume cs:code, ds:data, es:buffer 0001 FE 06 0000 R inc var1 E r r o r --- 68:Can't reach with segment reg 0005 FE 06 0000 R inc var2 E r r o r --- 68:Can't reach with segment reg 0009 FE 06 0000 R inc var3 E r r o r --- 68:Can't reach with segment reg 000D code ends end
Microsoft MACRO Assembler Version 3.00 PageSymbols -1 09-17-99
Segments and Groups:
N a m e Size AlignCombine Class
BUFFER . . . . . . . . . . . . . 0001PARA NONECODE . . . . . . . . . . . . . . 000D PARA NONEDATA . . . . . . . . . . . . . . 0001PARA NONE
Symbols:
N a m e TypeValue Attr
VAR1 . . . . . . . . . . . . . . L BYTE 0000DATAVAR2 . . . . . . . . . . . . . . L BYTE 0000BUFFER
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
37
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
VAR3 . . . . . . . . . . . . . . L BYTE 0000CODE
49722 Bytes free
Warning SevereErrors Errors 0 3
3.4 Instruction Template คำาส�งของ 8086/8088 มขนาดตงแต 1 ถง 6 ไบต คำาส�งบางคำาส�งใชเพ�อจดประสงคเฉพาะ
ดงนน 1 ไบตกเพยงพอสำาหรบคำาส�งเหลาน เชนmachine code symbolic instruction commenttemplate40 INC AX ; increment AX01000reg50 PUSH AX ; push AX 01010regFD STD ; set direction flag 11111101
จะเหนวา สองคำาส�งแรกม operand หน�งตวเปนเรจสเตอร สวนคำาส�งท�สามไมจำาเปนตองม operand แตทกคำาส�งตองมสวน operation code เพ�อบอกใหรวาจะทำาอะไร คำาส�งของ 8086/8088 มลกษณะแปลกนดหนอย คอ ไมไดกำาหนดตายตววา operation code จะมขนาดก�
บต อยางไรกตามจะเร�มจากบตซายสดเสมอ กรณท�ม operand จะมหน�งหรอสองตว และอาจจะเปน immediate operand,
register, หรอ memory reference จงไดมการสราง template ขน และใสคาของ operand ตาม addressing mode ท�ตองการลงบน template
Immediate แทนดวยคาซ�งเปนเลขฐานสองขนาด 8 หรอ 16 บต เกบอยในคำาส�งโดยตรง
Register คำาส�งท�อางถงเรจสเตอร จะแทนเรจสเตอรดวยคาตาง ๆ ดงน
- ถาอางถงเรจสเตอรท �ว ๆ ไปท�ไมใชเซกเมนตเรจสเตอร ตองม w-bit เพ�อบอกวาเปนเรจสเตอรขนาด 8 หรอ 16 บต ดงน
reg w = 0 w = 1
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
38
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
000 AL AX001 CL CX010 DL DX011 BL BX100 AH SP101 CH BP110 DH SI111 BH DI
ตวอยางMOV AH,01H ; 10110 100 00000001 = 2
bytes long w reg immediate (8 bits)
MOV CX,01F2H ; 10111 001 00000001 11110010 = 3 bytes long
w reg immediate (16 bits)
- ถาอางถงเซกเมนตเรจสเตอร ( ใชรวมกบ addressing mode ท�จะกลาวตอไป)0 ES01 CS10 SS11 DS
Addressing Mode เปนการผสมกนระหวาง immediate, register หรอ memory reference ดงท�กลาวแลวในหวขอ 3.2
ถาเปน immediate กจะใสคาเลขฐานสองขนาด 8 หรอ 16 บต ตามท�กลาวมาแลวขางตน แต ถาเปน เรจสเตอรหรอหนวยความจำา จะมการแทนคาดงตารางขางลาง
mod 00 01 10 11 r/m w = 0 w = 1 000 [BX]+[SI] [BX]+[SI]+d8 [BX]+[SI]+d16
AL AX 001 [BX]+[DI] [BX]+[DI]+d8 [BX]+[SI]+d16
CL CX
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
39
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________ 010 [BP]+[SI] [BP]+[SI]+d8 [BP]+[SI]+d16
DL DX 011 [BP]+[DI] [BP]+[DI]+d8 [BP]+[DI]+d16
BL BX 100 [SI] [SI]+d8 [SI]+d16 AH SP 101 [DI] [DI]+d8 [DI]+d16 CH BP 110 direct [BP]+d8 [BP]+d16 DH
SI 111 [BX] [BX]+d8 [BX]+d16 BH DI memory mode register modeหมายเหต d8 และ d16 หมายถง displacement ขนาด 8 และ 16 ตามลำาดบ
ตวอยางLEA DX,mem ; 10001101 00 010 110
mmmmmmmm mmmmmmmm mod reg r/m
displacement 16 bits
นอกจากน ยงม d-bit ใชสำาหรบกำาหนดทศทางซายกบขวาหรอ source กบ destination หรอ operand1 กบ operand2
ตวอยางADD BX,AX ; 00000011 11 011 000
dw mod reg r/m ในตวอยางน d = 1 หมายถง mod(11) และ reg(011) เปน operand1 และ r/m
(000) เปน operand2
3.5 Big Endian v.s. Little Endian ในการอางถงเลขท�ในหนวยความจำาสำาหรบขอมลท�เปนคำา มขอตกลงสองแบบ คอ big endian
กบ little endian big endian ใสขอมลไบตท�มนยสำาคญตำ�าไวท�ไบตเลขท�สง ดงภาพ
most significant least significant byte byte
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
40
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
หนวยความจำา เลขท�
x 0000 0001 x+1 1111 0010
ตวอยาง สถาปตยกรรมท�เปนแบบน เชน MIPS little endian ใสขอมลไบตท�มนยสำาคญตำ�าไวท�ไบตเลขท�ตำ�า ดงภาพ
most significant least significant byte byte
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
หนวยความจำา เลขท�
x 1111 0010 x+1 0000 0001
สถาปตยกรรมของ Intel 8086/8088 มลกษณะแบบน
ตวอยางassembly language: MOVAH,01Hassembly listing : B4 01machine instruction: B4 01memory address : x x+1
assembly language: MOVCX,01F2Hassembly listing : B9 01 F2machine instruction: B9 F2 01memory address : x x+1 x+2
assembly language: data1 dw 01F2H
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
41
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________assembly listing : 01 F2data in memory : F2 01memory address : x x+1
3.6 Using the DEBUG ProgramThe DOS system comes with a program named DEBUG
that is used for testing and debuging executable programs. A feature of DEBUG is that it displays all program code and data in hexadecimal format, and any data that you enter into memory must also be in hex format. DEBUG also provides a single-step mode, which allows you to execute a program one instruction at a time, so that you can view the effect of each instruction on memory locations and registers.
Some DEBUG CommandsA Assemble symbolic instructions into machine codeD Display the contents of an area of memoryE Enter data into memory, beginning at a specific locationG Run the executable program in memoryQ Quit the DEBUG sessionR Display the contents of one or more registersT Trace the execution of one instructionU Unassemble (really, disassemble) machine code into symbolic codeW Write a program into diskL Load a program from diskRules
DEBUG does not distinguish between lowercase and uppercase letters, so you may enter commands either way.
You enter a space only where it is needed to separate parameters in a command
You specify segments and offsets with a colon, in the form segment:offset
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
42
CS344-321 Assembly Language Programming chapter 3 page________________________________________________________________________
DEBUG assumes that all numbers are in hexadecimal format
The following three examples use DEBUG’s D command to display the same area of memory, beginning at offset 200H in the data segment (DS):
D DS:200DDS:200dds:200
Example,debug-amov ax,0123add ax,0025mov bx,axadd bx,axmov cx,bxsub cx,axsub ax,axnop<Enter>-rAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=21C1 ES=21C1 SS=21C1 IP=21C1 NV UP EI PL NZ NA PO NC21C1:0100 B82301 MOV AX,0123-t
ทดสอง trace (t) ด จะเหนการ execute ทละ step หลงทำาคำาส�ง NOP ให q หรอ w กอน q กได
หมายเห ต NV UP EI PL NZ NA PO NC ตรงกบ OF DF IF SF ZF AF PF CF ตามลำาดบ
Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul
43