โปรแกรมสกุล exe
Digital logic | OS | คำสั่งดอส | Batch | Debug | Assembly | GWBasic | Docker |
x1.asm [แนวการเขียน .com]
โปรแกรมแสดงอักษร aaa แล้วหยุดรอรับค่าจากแป้นพิมพ์ 1 ตัวอักษร และพิมพ์ aaa ใหม่ โปรแกรมจะเลิกทำงานต่อเมื่อกดปุ่ม Ctrl-C ผลการแปล x1.asm จะได้ x1.exe ขนาด 536 Byte
warnning 2 บรรทัดนี้ เกิดเพราะโปรแกรมถูกแปลเป็น exe แต่หลักการของโปรแกรมนี้มีการทำงานแบบ .com ไม่จำเป็นต้องใช้ stack segment ซึ่งโปรแกรม link จะเตือนเช่นนี้เสมอเมื่อโปรแกรมไม่มี stack segment
After compiling by MASM6.11 :
LINK : warning L4021: no stack segment
LINK : warning L4038: program has no starting address
ในการประมวลผลจะวน loop ไม่รู้จบให้กดปุ่ม CTRL-C เพื่อเลิกการทำงาน
    title x1.asm cseg segment assume cs:cseg,ds:cseg push cs pop ds jmp start msg1 db 'aaa',0ah,0dh,'$' start: mov ah,09h lea dx,msg1 int 21h mov ah,01h int 21h jmp start cseg ends end

x2.asm [แนวการเขียน .com]
นำโปรแกรม x มาปรับ แล้วให้หยุดรับอักษรเพียง 2 ครั้ง จึงเลิกทำงานด้วย interrupt 20H จะได้ x2.exe ขนาด 548 Byte
[โปรแกรมนี้ error เมื่อจบการทำงานเพราะ int 20h และเกิด error ใน Win98 ไม่พบ error ใน WinXP ต้องใช้ exe2bin แปลงเป็น .com จึงจะไม่มีปัญหา]
    cseg segment assume cs:cseg,ds:cseg push cs pop ds jmp start msg1 db 'aaa',0ah,0dh,'$' start: mov ah,09h lea dx,msg1 int 21h mov ah,01h int 21h mov ah,09h lea dx,msg1 int 21h mov ah,01h int 21h int 20h cseg ends end

x3.asm :: การสั่งประมวลผลเช่น c:\x3.exe test.doc [แนวการเขียน .com]
โปรแกรมเปลี่ยน attribute ของแฟ้มเป็น R อย่างเดียว สามารถตรวจสอบแฟ้มด้วยการพิมพ์ attrib หากต้องการลบแฟ้มต้องพิมพ์ attrib -r test.doc จึงจะลบแฟ้มนี้ได้ จะได้ x3.exe ขนาด 796 Byte
[โปรแกรมนี้ error เมื่อจบการทำงานเพราะ int 20h และเกิด error ใน Win98 ไม่พบ error ใน WinXP ต้องใช้ exe2bin แปลงเป็น .com จึงจะไม่มีปัญหา]
    .model small .code org 100h protect proc near mov dx,82h ; point DS:DX to filename mov di,82h ; start looking in PSP mov al,13 ; Look for carriege return mov cx,12 ; Scan up to 12 characters repne scasb ; Find end of input mov byte ptr [di - 1],0 ; Make string ASCII mov al,1 ; Function code mov cx,1 ; This is to protect ;mov cx,0 ; This is to Unprotect mov ah,43h ; Use service 43H int 21h mov ah,01h int 21h ; Ctrl-C to exit int 20h protect endp end protect
x4.asm
โปรแกรมพิมพ์ a และไม่ error เมื่อจบการทำงาน เป็นการเขียนโปแรกรมแบบ .exe เพราะถ้าเขียนแบบ .com โปรแกรมจะ error เหมือน 3 โปรแกรมด้านบน
[โปรแกรมนี้ไม่ error เมื่อเป็น .exe]
    .model small .data x1 db "abc",0ah,0dh,'$' .code pmain proc far push ds ; 1 of 5 line required for end .exe mov ax,0 ; 2 clear ax by xor ax,ax push ax ; 3 send ax to stack mov ax,@data mov ds,ax ; mov ah,09h lea dx,x1 int 21h ret ; Can not use int 20h pmain endp .stack 200h ; not required end pmain