Assembly Tutorial Using TASM 2.0 AND TLINK 3.0 author: mywisdom Before start you must download assembler and linker; http://sowiesoft.com/.../TASM.zip Since i'm on linux now (actually developing linux perl worm) but I'm getting so bored , so let's recall back my old memories with tasm maybe we're gonna get some ideas on worm on linux we can use wine to run turbo assembler 2.0 ---------------------- root@mywisdom-Vostro1310:/home/mywisdom/Downloads/dos# wine tasm.exe Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland International Syntax: TASM [options] source [,object] [,listing] [,xref] /a,/s Alphabetic or Source-code segment ordering /c Generate cross-reference in listing /dSYM[=VAL] Define symbol SYM = 0, or = value VAL /e,/r Emulated or Real floating-point instructions /h,/? Display this help screen /iPATH Search PATH for include files /jCMD Jam in an assembler directive CMD (eg. /jIDEAL) /kh#,/ks# Hash table capacity #, String space capacity # /l,/la Generate listing: l=normal listing, la=expanded listing /ml,/mx,/mu Case sensitivity on symbols: ml=all, mx=globals, mu=none /mv# Set maximum valid length for symbols /m# Allow # multiple passes to resolve forward references /n Suppress symbol tables in listing /o,/op Generate overlay object code, Phar Lap-style 32-bit fixups /p Check for code segment overrides in protected mode /q Suppress OBJ records not needed for linking /t Suppress messages if successful assembly /w0,/w1,/w2 Set warning level: w0=none, w1=w2=warnings on /w-xxx,/w+xxx Disable (-) or enable (+) warning xxx /x Include false conditionals in listing /z Display source line with error message /zi,/zd Debug info: zi=full, zd=line numbers only ------------------------------ you dont have to use wine on blindows cmd: ms dos * Some common used interrupts: INT 21 H - Interrupt 21 h function 09 h This is one of most used interrupt, first we set 09h into ah register then we set offset of previous declared msg into dx register. then we call dos interrupt. Here's sample of int 21 h function 09 h: ;fuck.asm .model small .stack 100h .data msg db 'hei ',13,10,'$' mov ah,9 mov dx,offset msg int 21h mov ah,4ch int 21h end assemble: ---------------------------------- root@mywisdom-Vostro1310:/home/mywisdom/Downloads/dos# wine tasm fuck.asm Turbo Assembler Version 2.0 Copyright (c) 1988, 1990 Borland International Assembling file: fuck.asm Error messages: None Warning messages: None Passes: 1 Remaining memory: 431k ------------------------------------ and then linker using tlink 3.0: ---------------------------- root@mywisdom-Vostro1310:/home/mywisdom/Downloads/dos# wine tlink fuck.obj Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International -------------------------- test running: root@mywisdom-Vostro1310:/home/mywisdom/Downloads/dos# wine fuck ? ????????!?L?!hei so what did above codes do? ;fuck.asm ---> this is a comment .model small -----------> direction here we declare that we use small memory .stack 100h -------> stack pointer declared as 100 h (100 h bytes=80h in words) .data -----> segment msg db 'hei ',13,10,'$' -----> here we declare variable msg using define bytes mov ah,9 -----> register ah=09 hexa is required for int 21 h function 09h mov dx,offset msg ----> move offset of msg to dx int 21h -------------> int 21 h -> call dos mov ah,4ch --------------> we use int 21 h function 4ch to return to dos int 21h ------> int 21 h function 4ch will exit to dos end ----> end of code