7
CS344-321 Assembly Language Programming Period 10

CS344-321 Assembly Language Programming

  • Upload
    robbin

  • View
    24

  • Download
    0

Embed Size (px)

DESCRIPTION

CS344-321 Assembly Language Programming. Period 10. ตัวอย่าง การเขียนโปรแกรมแบบแฟ้ม .EXE displayequ9h;display output function doscallequ21h;DOS interrupt number data_segsegment hello_message db 'Hello, world!', 0dh, 0ah, '$' data_segends code_seg segment - PowerPoint PPT Presentation

Citation preview

Page 1: CS344-321 Assembly Language Programming

- 344321CS Assemb l y Language Programmi ng

Period 10

Page 2: CS344-321 Assembly Language Programming

ตั�วอย่�าง การเขี�ย่นโปรแกรมแบบแฟ้�ม .EXE displaydisplay equequ 9h9h ;display output function ;display output functiondoscalldoscall equequ 2 1 h2 1 h ;DOS interrupt number ;DOS interrupt numberdata_segdata_seg segmentsegment

hello_message db 'Hello, world!', 0dh, 0ah, '$' hello_message db 'Hello, world!', 0dh, 0ah, '$'data_segdata_seg endsends

code_seg segment code_seg segment assume cs:code_seg, ds:data_seg assume cs:code_seg, ds:data_seg

start: mov ax,data_seg start: mov ax,data_seg mov ds,ax mov ds,ax mov ah,display mov ah,display mov dx,offset hello_message mov dx,offset hello_message int doscall int doscall mov ax,4c00h mov ax,4c00h int doscall int doscall

code_seg ends code_seg ends end start end start

Page 3: CS344-321 Assembly Language Programming

Listing 0009= display equ 9

;display output function 0021 doscallequ 21h ;DOS interrupt number 0000 data_seg segment 0000 48656662 hello_message db 'Hello, world!',

0 0dh, ah, '$' 2077672664F C 210 0 24 0010 data_seg ends 0000 code_seg segment assume cs:code_seg, ds:data_seg 0000 start: ---- R0000 8 mov ax,data_seg 0003 8 8E D mov ds,ax 0005 409B mov ah,display 0007 0000BA R mov dx,offsethello_message 000 21A CD int doscall 000 8400CB C mov ax,4 c0 0 h 000 21F CD int doscall 0011 code_seg ends end start

Page 4: CS344-321 Assembly Language Programming

คำ�าสั่��ง คำ�าสั่��ง assume cs:code_seg, ds:data_seg assume cs:code_seg, ds:data_segบอก บอก assembler assembler ว�า จะใช้! ว�า จะใช้! ds ds เป"นจ#ดเร%�มตั!นขีอง เป"นจ#ดเร%�มตั!นขีอง data_seg data_seg แตั�หลั�งจาก แตั�หลั�งจาก DOS DOS บรรจ#โปรแกรมบรรจ#โปรแกรมแบบ แบบ .EXE .EXE แลั!ว จะก�าหนดให! แลั!ว จะก�าหนดให! ds ds ช้�(ไปที่��จ#ดเร%�มตั!นขีอง ช้�(ไปที่��จ#ดเร%�มตั!นขีอง PSP PSP ที่�านตั!องปร�บให! ที่�านตั!องปร�บให! ds ds ช้�(มาที่�� ช้�(มาที่�� data_seg data_seg ด!วย่คำ�าสั่��ง ด!วย่คำ�าสั่��ง สั่องคำ�าสั่��งตั�อไปน�(สั่องคำ�าสั่��งตั�อไปน�( mov ax,data_seg mov ax,data_seg mov ds,ax mov ds,ax

ที่�านไม�สั่ามารถใช้!คำ�าสั่��งเด�ย่ว คำ,อ ที่�านไม�สั่ามารถใช้!คำ�าสั่��งเด�ย่ว คำ,อ

mov ds,data_segmov ds,data_seg

เพราะเป"นขี!อห!ามขี!อคำ�าสั่��ง เพราะเป"นขี!อห!ามขี!อคำ�าสั่��ง mov mov (( ด. ด. chapter 4 chapter 4 หน!า หน!า 4)4)

หมาย่เหตั#หมาย่เหตั# data_seg data_seg จะถ.กปร�บคำ�าให!ถ.กตั!องเม,�อม�การจะถ.กปร�บคำ�าให!ถ.กตั!องเม,�อม�การ บรรจ#โปรแกรมน�(ในหน�วย่คำวามจ�า เพราะร. !ว�าได!บรรจ# บรรจ#โปรแกรมน�(ในหน�วย่คำวามจ�า เพราะร. !ว�าได!บรรจ#

data_seg data_seg ที่��ใดที่��ใด

Page 5: CS344-321 Assembly Language Programming

หมายเหตุหมายเหตุ

1. Directive EQU1. Directive EQU

2. Operator OFFSET 2. Operator OFFSET ซึ่��งม�ความหมายอธิ�บายได้�ด้�วยซึ่��งม�ความหมายอธิ�บายได้�ด้�วย ตุ�วอย�าง ตุ�อไปนี้�� ตุ�วอย�าง ตุ�อไปนี้��

mov ax,OFFSET data mov ax,OFFSET data กั�บ กั�บ mov ax,datamov ax,data

สมมตุ�ว�าสมมตุ�ว�า ในี้ ในี้ Listing Listing บอกัว�า บอกัว�า data data อย �ที่�� ออฟเซึ่ตุ อย �ที่�� ออฟเซึ่ตุ 0020h 0020h และข้�อม ลที่��ออฟเซึ่ตุด้�งกัล�าว ค'อ และข้�อม ลที่��ออฟเซึ่ตุด้�งกัล�าว ค'อ 25h25h

0020 data0020 data dwdw 25h25h

ถ้�าที่)าค)าส��ง ถ้�าที่)าค)าส��ง mov ax,offset data mov ax,offset data ค�าในี้ ค�าในี้ ax ax จะเที่�ากั�บ จะเที่�ากั�บ0020h0020h

แตุ�ถ้�าที่)าค)าส��ง แตุ�ถ้�าที่)าค)าส��ง mov ax,data mov ax,data ค�าในี้ ค�าในี้ ax ax จะเที่�ากั�บ จะเที่�ากั�บ0025h0025h

สรุป ให�มองว�า สรุป ให�มองว�า data data เป,นี้ตุ�วแปรุตุ�วหนี้��งที่��เกั-บค�า เป,นี้ตุ�วแปรุตุ�วหนี้��งที่��เกั-บค�า 25h 25h ถ้�าถ้�า ตุ�องกัารุค�าข้องตุ�วแปรุ ตุ�องกัารุค�าข้องตุ�วแปรุ data data ให�อ�างให�อ�าง

ถ้�งชื่'�อตุ�วแปรุนี้��นี้ ค'อ ถ้�งชื่'�อตุ�วแปรุนี้��นี้ ค'อ data data แตุ�ถ้�าตุ�องกัารุอ�างถ้�งที่��อย �ในี้ที่��นี้��แตุ�ถ้�าตุ�องกัารุอ�างถ้�งที่��อย �ในี้ที่��นี้�� ค'อ ค�าออฟเซึ่ตุ ค'อ ค�าออฟเซึ่ตุข้องข้อง ตุ�วแปรุ ตุ�วแปรุ data data

ให�ใส� ให�ใส� operator OFFSET operator OFFSET ข้�างหนี้�าข้�างหนี้�า ค'อ ค'อ OFFSET data OFFSET data เป,นี้ตุ�นี้เป,นี้ตุ�นี้

Page 6: CS344-321 Assembly Language Programming

แฟ้�มแบบ แฟ้�มแบบ .exe .exe ม� ม� header header ตัรงตั!นแฟ้�ม เพ,�อเก/บขี!อม.ลับางอย่�าง ตัรงตั!นแฟ้�ม เพ,�อเก/บขี!อม.ลับางอย่�าง เช้�น เช้�น MINALLOC, MAXALLOC,MINALLOC, MAXALLOC,

MAGIC #, Relocation Table, MAGIC #, Relocation Table, แลัะ แลัะ CS:IP CS:IP ที่��จะเร%�มตั!น ที่��จะเร%�มตั!นexecute (execute ( ตัรง ตัรง directive END)directive END)

ใน ใน Listing Listing ม� อ�กษร ม� อ�กษร R R ใช้!เพ,�อบอกให!ตั�วเช้,�อมโย่ง ปร�บออฟ้เซตัให! ใช้!เพ,�อบอกให!ตั�วเช้,�อมโย่ง ปร�บออฟ้เซตัให! ถ.กตั!อง เม,�อม�การเช้,�อมโย่งระหว�างหลัาย่ๆ ถ.กตั!อง เม,�อม�การเช้,�อมโย่งระหว�างหลัาย่ๆ segment segment ที่��เขี�ย่นที่��เขี�ย่น

แย่กจากก�น แลั!วน�ามารวมเป"น แย่กจากก�น แลั!วน�ามารวมเป"น segment segment เด�ย่วก�น ผู้.!เขี�ย่น เด�ย่วก�น ผู้.!เขี�ย่น โปรแกรมจ4งไม�จ�าเป"นตั!องสั่นใจอ�กษร ด�งกลั�าว อ�กษรด�งกลั�าว จะ โปรแกรมจ4งไม�จ�าเป"นตั!องสั่นใจอ�กษร ด�งกลั�าว อ�กษรด�งกลั�าว จะ

ไม�ก%นเน,(อที่��ในหน�วย่คำวามจ�า ไม�ก%นเน,(อที่��ในหน�วย่คำวามจ�า

ตัรงตัรง ---- 0000 8B R ---- 0000 8B R mov ax,data_seg mov ax,data_seg

เน,�องจากช้�วงการแปลั ย่�งไม�ร. !ว�า เน,�องจากช้�วงการแปลั ย่�งไม�ร. !ว�า data_seg data_seg จะถ.กบรรจ#ที่��จะถ.กบรรจ#ที่�� ตั�าแหน�งใดในหน�วย่คำวามจ�า ตั�าแหน�งใดในหน�วย่คำวามจ�า assemblerassembler

จ4งใสั่� เคำร,�องหมาย่ จ4งใสั่� เคำร,�องหมาย่ --- --- แลัะม�อ�ษร แลัะม�อ�ษร R R เพ,�อบอกให!ร. !ว�า หลั�งการบรรจ# เพ,�อบอกให!ร. !ว�า หลั�งการบรรจ#โปรแกรมในหน�วย่คำวามจ�าโปรแกรมในหน�วย่คำวามจ�า

แลั!ว ตั!องม�การปร�บคำ�าด�งกลั�าวให!ถ.กตั!อง ตั�าแหน�งด�งกลั�าว จะเก/บ แลั!ว ตั!องม�การปร�บคำ�าด�งกลั�าวให!ถ.กตั!อง ตั�าแหน�งด�งกลั�าว จะเก/บ ไว!ใน ไว!ใน Relocation Table Relocation Table ตัรง ตัรง header header ขีองแฟ้�ม ขีองแฟ้�ม .exe.exe

Page 7: CS344-321 Assembly Language Programming

ด�งน�(น ถ!าด.จาก ด�งน�(น ถ!าด.จาก Listing Listing แลั!ว ที่�านจะสั่ามารถตัรวจสั่อบได!ว�า แลั!ว ที่�านจะสั่ามารถตัรวจสั่อบได!ว�า โปรแกรมด�งกลั�าว เป"นโปรแกรม โปรแกรมด�งกลั�าว เป"นโปรแกรม

แบบ แบบ .COM .COM หร,อไม� โดย่พ%จารณา ด�งน�( หร,อไม� โดย่พ%จารณา ด�งน�(

1. 1. ตัรง ตัรง directive END directive END เร%�มที่�� เร%�มที่�� CS:0100h CS:0100h หร,อไม� ถ!าไม� หร,อไม� ถ!าไม� แสั่ดงว�าไม�ใช้�โปรแกรมแบบ แสั่ดงว�าไม�ใช้�โปรแกรมแบบ .COM.COM

2. 2. ม� เคำร,�องหมาย่ ม� เคำร,�องหมาย่ ---- R ---- R ที่��กลั�าวมาขี!างตั!นหร,อไม� ถ!าม� แสั่ดงว�า ที่��กลั�าวมาขี!างตั!นหร,อไม� ถ!าม� แสั่ดงว�า ไม�ใช้�โปรแกรมแบบ ไม�ใช้�โปรแกรมแบบ .COM.COM

3. 3. ม� ม� stack segment stack segment เช้�นเช้�น

my_stack segment STACKmy_stack segment STACK

my_stack ends my_stack ends เป"นตั!นเป"นตั!น

ถ!าม� แสั่ดงว�าไม�ใช้�โปรแกรมแบบ ถ!าม� แสั่ดงว�าไม�ใช้�โปรแกรมแบบ .COM.COM

ถ!า ไม�ใช้�โปรแกรมแบบ ถ!า ไม�ใช้�โปรแกรมแบบ .COM .COM ที่�านไม�สั่ามารถใช้! ที่�านไม�สั่ามารถใช้! exe2bin exe2bin เปลั��ย่นจากแฟ้�ม เปลั��ย่นจากแฟ้�ม .EXE .EXE เป"น เป"น .COM.COM

หมาย่เหตั# อย่�าลั,มว�า โปรแกรมแบบ หมาย่เหตั# อย่�าลั,มว�า โปรแกรมแบบ .COM .COM ตั!องโตัไม�เก%น ตั!องโตัไม�เก%น 64K - 64K - 2 - 2562 - 256