staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · web viewchapter 3...

56
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 100h start: mov ah,9 lea dx,hello_message int 21h mov ax,4c00h int 21h hello_message db 'Hello, world!', 0dh, 0ah, '$' Computer Science, Prince of Songkhla University Copy Right ©1999 by Iew Ayaragarnchanakul 1

Upload: others

Post on 15-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 2: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 3: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 4: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 5: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 6: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 7: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 8: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 9: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 10: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 11: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 12: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 13: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 14: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 15: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 16: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 17: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 18: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 19: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 20: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 21: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 22: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 23: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 24: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 25: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 26: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 27: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 28: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 29: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 30: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 31: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 32: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 33: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 34: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 35: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 36: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 37: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 38: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 39: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 40: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 41: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 42: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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

Page 43: staff.cs.psu.ac.thstaff.cs.psu.ac.th/iew/cs344-321/chapter3.doc · Web viewChapter 3 ภาษาแอสเซมบล 8086/8088 ภาษาแอสเซมบล เป นภาษาระด

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