Let's walk through this virus source code, shall we?

  • Thread starter Thread starter RayLopez99
  • Start date Start date
"RayLopez99"
// Dustin code

segment code

start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,stacktop

mov dx,hello
mov ah,9
int 0x21

mov ax,0x4c00
int 0x21

segment data

hello: db 'hello, ****ing, world',13,10,'$'

segment stack stack
resb 64
stacktop:
// end


Ant, or Dustin: can you please go through this code line by line? I appreciate it. It's short enough that I think you can
comment without too much effort.

Thanks in advance. Seems Ant's code is more compact, whereas Dustin, as G. Morgan points out implicitly, may be faking it or
taking shortcuts (not clear which as apparently it does not compile).

I intend to to use this for assembly programming (using Visual Studio):
http://www.codeproject.com/Articles/271627/Assembly-Programming-with-Visual-Studio-2010

RL

--
This post contains IPA phonetic symbols in Unicode.
Without proper rendering support,
you may see question marks, boxes,
or other symbols instead of Unicode characters.

User-agent: *
Disallow: /
 

hehehe


--
Things look bad from over here. Too much confusion and no solution.
Everyone here knows your fear. Your out of touch and you try too much.
Yesterdays glory will help us today. You wanna retire? Get outta the
way. I ain't got much time. Young ones close behind. I can't wait in
line.
 
// Dustin code

segment code

start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,stacktop

mov dx,hello
mov ah,9
int 0x21

mov ax,0x4c00
int 0x21

segment data

hello: db 'hello, ****ing, world',13,10,'$'

segment stack stack
resb 64
stacktop:
// end


Ant, or Dustin: can you please go through this code line by line? I
appreciate it. It's short enough that I think you can comment
without too much effort.

Thanks in advance. Seems Ant's code is more compact, whereas Dustin,
as G. Morgan points out implicitly, may be faking it or taking
shortcuts (not clear which as apparently it does not compile).

It's not faking anything or taking any shortcuts...

Use nasm.

http://www.nasm.us/

Ants is more streamlined. Mine is effectively, wasting bytes.
Ants is a .com... basically an exact image of the code thats going to be
loaded into memory. .EXE files are slightly different, they have a
header which allows for relocation and segments. .com are limited to 64k
total size; everything has to fit in 64kilobytes. .EXE doesn't. Mine is
setup to become an .exe, It has segments. They aren't in static
locations, I have to seek them out and then tell the computer what I'm
asking for by referencing the data segment i'm using. .com is
hardcoded. It starts in the same place. Ant doesn't have to waste the
bytes specifying it. For his data retrieval, where as I do..

Here's source code to an old asic program which actually writes a
machine language header, then whatever you want to say, followed up by a
closing dollar sign. The dollar sign is used in both Ants and my
programs above for a reason. [g] It's the machine code equ of what Ant
showed you how to do with debug. Both of our programs are doing the same
things here.. Well, all 3 really.

It effectively makes whatever text file you feed it grow in size by 10
bytes. It's machine code version of what Ant posted. Setup to become a
..com, with you inputting the data that was found in the db line in both
of our programs. If you look at the hex values of the data line numbers,
you'll see it's the machine code debug generated when you fed it Ants
source basically. It just prints whatever you want, one very long text
string upto 64k and doesn't stop.

It was useful for BBS advertising. "CoreBBS.com" inside .zips as you
downloaded them from the fileareas.

You can add an additional header and convert the .com to an exe, but the
file will increase in size and will provide no greater functionality.

data 180,9,186,9,1,205,33,205,32
rem code 180-9-186-9-1-205-33-205-32
rem ending code 36 is ENDING$
print"COMIT: Text file to .COM file converter! Version 1.3á"
print"Copyright 1994-95 By Dustin Cook. All Rights Reserved!"
print " "
gosub optionparser:
goto start1:
notcool:
print"Unable to write: ";
print info$
goto shutdown:
nogood:
print"Unable to read: ";
print file$
goto shutdown:
notice:
print"Syntax: <TEXTFILE> <EXEC.COM>"
goto shutdown:
start1:
open"i",1,file$
if error>0 then nogood:
open"o",2,info$
if error>0 then notcool:
for x=1 to 9
read a
a$=chr$(a)
print #2,a$ NONULL
next x
loopie:
input #1,i$ BYTE
if error>0 then da:
if i$="$" then loopie:
if i$="" then
print #2,i$
if error>0 then notcool:
goto loopie:
endif
print #2,i$ NONULL
if error>0 then notcool:
goto loopie:
da:
print #2,"$" NONULL
if error>0 then notcool:
print"File Created: ";
print info$
goto shutdown:
OptionParser:
TEMP$=COMMAND$
TEMP$=LTRIM$(TEMP$)
ERGH = LEN(TEMP$)
r = INSTR(TEMP$, " ")
IF r = 0 THEN notice:
FILE$ = LEFT$(TEMP$, r)
INFO$ = MID$(TEMP$, r, ERGH)
file$=ltrim$(file$)
file$=rtrim$(file$)
info$=ltrim$(info$)
info$=rtrim$(info$)
RETURN
shutdown:
close 1
close 2
end

I wrote alot of things in asic, but it wasn't because I couldn't do the
same in assembler... Asic was quicker. Development time on assembler is
longer. As, by now you may have noticed, even saying hello on the screen
is a multi step process. [g]
I intend to to use this for assembly programming (using Visual
Studio):
http://www.codeproject.com/Articles/271627/Assembly-Programming-with-V
isual-Studio-2010

Fine and dandy... Assembler can be alot of fun. Win32 asm is easier,
imho. Windows does most of the hard stuff, you don't have to do as much
real work with the hardware now.

Pickup a copy of nasm. It's free, still being developed and is a fine
assembler.



--
Things look bad from over here. Too much confusion and no solution.
Everyone here knows your fear. Your out of touch and you try too much.
Yesterdays glory will help us today. You wanna retire? Get outta the
way. I ain't got much time. Young ones close behind. I can't wait in
line.
 
Ant, or Dustin: can you please go through this code line by line? I
appreciate it. It's short enough that I think you can comment
without too much effort.

You asked me to provide assembler source to say **** the world or
whatever else I wanted it to say. You can change my hello ****ing world
to say whatever you want.

Now you want me to walk you thru the damn thing too?

Thanks in advance. Seems Ant's code is more compact, whereas Dustin,
as G. Morgan points out implicitly, may be faking it or taking
shortcuts (not clear which as apparently it does not compile).

I explained the difference in my previous post. When discussing
assembler; we don't compile the source. We assemble it. Depending on how
you assemble, it's done in stages. Mine turns into an .obj, which then
turns into an .exe. [g] Ants is direct asm, designed to become a .com
file.

If you download nasm, save my post source and feed it to nasm, you will
get an .obj file AND a working .exe file. Seriously.


--
Things look bad from over here. Too much confusion and no solution.
Everyone here knows your fear. Your out of touch and you try too much.
Yesterdays glory will help us today. You wanna retire? Get outta the
way. I ain't got much time. Young ones close behind. I can't wait in
line.
 
such things as the color of a car rather than actually looking under
the hood. It's OK though.

I've already seen what's under the hood. I built the engine you're
gawking at. It bores me to discuss it with you, because you don't
understand the background and you just want to try and jump in.

I'm trying to be technical with you, you keep insulting me. I posted
assembler; you claimed it's fake or that I'm faking it. It's not fake
and I did write it.

If you followed my instructions, use nasm, it would assemble fine. It's
designed to be an exe!
The only reasons would be that you intend to produce other viruses
based on this source code, and you feel (a) the anti-virus companies
could spot your new viruses easier if they had this source, or (b)
more importantly, you don't want other virus writers easily
replicating what you did if they had this source. But even those
logical reasons are faulty, but I won't get into it here.

Well, you see why I wrote them primarily in Asic. It did make things
more difficult for study and reversal. They were often getting
descriptions about what it did wrong and many would claim disinfection
wasn't possible; although the virus actually did that itself, all the
time... So.... :)

Asic generated alot of additional unneeded code which didn't affect the
operation of my virus. It wasted researchers time and often failed to
execute properly on virtual systems; which made research, a pain for
them. So, although they could detect me with a string (As mine were not
poly; I traded some things for doing it in asic), they might not know
how to remove me, due to the thousands of lines of additional code that
was hiding my cyphering alogrithm. Asic was strong against hueristics
back then. It also caused them trouble trying to determine how the
payloads worked or what they really did.

That virus I partially shared with you actually embarrased some AV
persons back then. They falsely claimed it would wreck your hard drive.
Some/many descriptions still claim it will. It didn't. [g]

drago is the subroutine which did the actual deed, and no; I won't post
her. you could still use that trick in your modern visual studio and
have a mess on your hands. My first experience using it was in the
1980s. [g] Some things really don't change.. hehehe.
Because some interesting things are there. BTW, encryption as you
mention in another post is rather routine in assembly, I found out
Googling it.

I told you it was, didn't have to google that. Encryption in memory.. :)
Assembler has advantages. Yes, some very interesting things are there. I
already posted the encryption/decryption system tho.. the **** you frisk
subroutine.
asked me about my age earlier and all I can say on that is that I'm
probably younger than you.

Well Ray, as you think I'm in my 60s; I have no idea. [g]


--
Things look bad from over here. Too much confusion and no solution.
Everyone here knows your fear. Your out of touch and you try too much.
Yesterdays glory will help us today. You wanna retire? Get outta the
way. I ain't got much time. Young ones close behind. I can't wait in
line.
 
The only reasons would be that you intend to produce other viruses
based on this source code, and you feel (a) the anti-virus companies
could spot your new viruses easier if they had this source, or (b)
more importantly, you don't want other virus writers easily
replicating what you did if they had this source. But even those
logical reasons are faulty, but I won't get into it here.

I forgot to address your reasoning.. Oops!

The reason that I'm the only individual to be in possession of the source
code is because I wrote it. I have little doubt you took me up on the
offer and tried to find it complete, online. You won't. I didn't even
share this or many others I wrote with my peers. I did share some of my
work, but not this one.
You wanna talk color Dustin? By all means my gay-ish friend. It's

As long as you continue to be an ungrateful ass, I'll continue to respond
in a somewhat cheeky fashion. I'm actually enjoying the opportunity to
look at some old old code I wrote back in the day. I haven't laid eyes on
alot of it in years. I should thank you.
 
Why not? It gives me an opportunity to re-learn stuff. I thought
int 21, function 09 took a null-terminated string and had to check my
Advanced MS-DOS Programming book when the output was followed by
garbage!

No, It's good dude. I need someone else who also knows asm; I bow to your
superior knowledge of it tho, to double check mine. :) If you don't mind,
I mean.

I did the same damn thing as you when I wrote comit. I had a WTF moment.
;p
 
Why not? It gives me an opportunity to re-learn stuff. I thought
int 21, function 09 took a null-terminated string and had to check my
Advanced MS-DOS Programming book when the output was followed by
garbage!

you know.. come to think of it, I think the garbage is your 64k memory
space being dumped.. ...
 
Just use nasm. Copy my post source into notepad, be sure to save it
as an ascii text! file.

Make life easier for yourself.

nasm -f obj hello.asm
(you'll need a linker. google for msdos link.exe or tlink.exe)
link hello2
enter
enter
enter
you'll get an exe file.
 
Sure but there's probably not much point since this is 16-bit code for
an MS-DOS environment; e.g. running under debug (or ntvdm) on a 32-bit
variety of Windows. It won't run on 64-bit Windows at all unless in an
emulator like DOSBox.

All true.
I suggest you consult a DOS reference for int 21 usage if you're
interested but this knowledge will be of no use for writing programs
to run on Windows.

All true. He should head for win32/64 and perhaps linux asm...
Dustin has explained that (difference between 'com' created by debug
and 'exe' created by nasm).

Yep.

I was learning nasm then.. demo skeleton.. hehehehe
 
Dustin was thinking very hard :
hehehe.. I'm starting to wonder about Rays age myself.. No experience with
older languages, inability to understand a very simple language...

and he keeps telling me i'm in my 60s. :)

That goes a long way toward explaining why he thinks everyone *else* is
a poseur.
 
No, It's good dude. I need someone else who also knows asm; I bow to your
superior knowledge of it tho, to double check mine. :) If you don't mind,
I mean.

I did the same damn thing as you when I wrote comit. I had a WTF moment.
;p

That's how vulnerabilities get written, the easiest thing to write. :o)
 
I get those WTF moments all the time when disassembling malware.
Sometimes you miss the obvious and sometimes it's a new anti-analysis
trick or unfamiliar API. It's a continual learning process.

Well. Seems I'm locked out of 64bit malware samples. I can't debug them. I
don't have a 64bit platform. Any suggestions?
 
Same here but I rarely see them. I think the only 64-bit ones I've
got are rootkit loaders. CFF Explorer from ntcore.com can create a
disassembly listing of them without needing the hardware.

Ahh, thanks.. a disassembly is better than nothing. :)
 
The poster that goes by "Dustin" in this group posted the below.

You still with us Ray? All confused two ways from sunday now eh? :)

I told you I know this stuff. I wasn't bsing you. hehehe.
PS--I challenge Dustin to show his 'mastery' of assembly by simply
posting here a simple subroutine in assembly that will display "FSCK
YOU" on the screen if a user runs the program. Simple enough, but if
Dustin is a cut-and-paste kiddie scripter as I suspect he is, he
won't find this on the net and will fail this simple test.

You ever going to comment further? I've posted two that'll do what you
asked for. Ant converted mine to a .com file suitable for debug.. Whats up
dude? Anything else cheeky you wanna say now?
 
PS--I challenge Dustin to show his 'mastery' of assembly by simply
posting here a simple subroutine in assembly that will display "FSCK
YOU" on the screen if a user runs the program.

segment code



start:

mov ax,data

mov ds,ax

mov ax,stack

mov ss,ax

mov sp,stacktop



mov dx,hello

mov ah,9

int 0x21



mov ax,0x4c00

int 0x21



segment data



hello: db 'hello, ****ing, world',13,10,'$'



segment stack stack

resb 64

stacktop:





Lemme know if you need it explained line by line too. [g]

you can find nasm online for free.

Yes, please comment line by line. seems you are mixing hex and ascii and it's a mess.

RL
 
Defines .code segment in .exe construction.
Debug wouldn't know WTF to do with this. ;p

Should be obvious, it's a label. I can jmp to it later if I want. this
program doesn't, but I digress.

Move contents of data variable (it's a pointer) to AX register.

Tell ds register what ax is; DS=data segment

Move stack location (it's a pointer too) to ax
Tell my program where it's stack actually is. ss=segment register..

Move segment pointer to the top of my stack. stacktop is another
variable. sp=segment pointer, top of stack.

Point dx (data register) to variable hello pointer. (where it is in
memory now, thanks to the commands above)
DOS function call; High side of AX. AX splits into AH (high) and AL
(low) print to screen.
Call interrupt 21, function call hex 09.

Which results in my hello text being printed on the screen.

Tell AX I'm planning to exit back to DOS or whatever called me.
Do it.

Defines data segment for use in my program. All variables and such
containing data, or that will contain data should go here. Registers
don't count.

Defines stack segment. I wasn't original in the name, so it's called
"stack".

Reserve 64bytes to my stack. The stack contains the current executing
location instructions and current position in the program; so when I
call and return and such, the computer knows where the **** to go. :)
it's a temporary storage area. I can put things on it myself and take
them off, but it's not random access; although I can read data without
removing it from the stack if needbe, so long as I know where I'm
planning to read it from. It's last in, first out.

http://en.wikibooks.org/wiki/X86_Disassembly/The_Stack

Just tells nasm where the top of my stack should begin when this turns
into an .exe
Yes, please comment line by line. seems you are mixing hex and ascii
and it's a mess.

I'm not mixing anything. It's in hex. Hex is a base 16 number system, so
anything that appears below or at the number 16 is the same as in
decimal. [g] 09 hex is 09 decimal.

So mov ah,9 isn't ASCII. it's hex. like 0x21, but I didn't bother to
type 0x on it, as it wouldn't make a difference. it's the same in this
one.


Well Ray, that covers my end of assembly teaching 101. I won't waste my
time doing any more challenges for you, nor will I offer to teach you
anything else. I've more than proved I know this stuff. I'm not the fake
or the wannabe you tried to claim I was. As you would never show me the
slightest bit of respect during this, I won't do anything else for you.

You OTH, well, now we know where you are on the ladder of skills,
compared to myself and various other individuals here. Millions doesn't
buy brains Ray. [g]





--
Things look bad from over here. Too much confusion and no solution.
Everyone here knows your fear. Your out of touch and you try too much.
Yesterdays glory will help us today. You wanna retire? Get outta the
way. I ain't got much time. Young ones close behind. I can't wait in
line.
 
Defines .code segment in .exe construction.

? what does that mean?
Debug wouldn't know WTF to do with this. ;p

Neither do you it seems.
Should be obvious, it's a label. I can jmp to it later if I want. this

program doesn't, but I digress.

OK fair enough.
Move contents of data variable (it's a pointer) to AX register.

That's a shit comment. Just shit. What does 'data', the pointer, point to? What is it initialized to? Null? A value?

Tell ds register what ax is; DS=data segment

"Tell"? Tell? Dustin, are you serious? What does 'tell' mean? You mean ds equals (is assigned) the contents of register ax? Is that it? Am I teaching you or do you even know? I'm trying to lern and you seem to not knowyourself.
Move stack location (it's a pointer too) to ax

Again, same problem, see above.
Tell my program where it's stack actually is. ss=segment register..

I don't think so. I think you are loading the contents of ax into ss register. Why you need to do this is not clear--but that's what YOU are supposed to be teaching me. Recall pointer 'data' has been moved to ax, so now ssregister has this pointer value.
Move segment pointer to the top of my stack. stacktop is another

variable. sp=segment pointer, top of stack.

No. I don't think so Dustin. I think this is moving 'stacktop', a variable, into register sp. Why you need to move variables into different registers is not clear and certainly not being explained by you.
Point dx (data register) to variable hello pointer. (where it is in

memory now, thanks to the commands above)

No. Again, you show your incompetence. What I think this is doing is moving the ASCII text 'hello' into register dx, which perhaps can accept a string. Not clear though. Perhaps 'hello' is a variable? Not clear. it is not doing what you claim it is. I'll say this: even if you can code in assembly--and you've not shown me you can--you are a lousy teacher.
DOS function call; High side of AX. AX splits into AH (high) and AL

(low) print to screen.

OK but why would this act on register 'ax' and not on 'dx', which precedes this line? is not assembly a procedural language, where the sequence of instructions makes a difference? You seem to not understand this.
Call interrupt 21, function call hex 09.



Which results in my hello text being printed on the screen.

OK, but again you seem to have this out of sequence.
Tell AX I'm planning to exit back to DOS or whatever called me.


OK, but are you saying the hex code 0x4c00 has some significance? Not clear if it does but that seems to be your assumption. Again, not demonstrating you can explain anything, even if you know what you are doing (which I doubt).

Do what? You are making this shit up, aren't you?
Defines data segment for use in my program. All variables and such

containing data, or that will contain data should go here. Registers

don't count.

??? what? You saying this for line "int 0x21"? Unreal.

Defines stack segment. I wasn't original in the name, so it's called

"stack".

WTF you talking about? Did you call a variable 'stack' and defining a stack segment by that name? Not very smart of you, like calling an 'int' variable 'int'. In any event you are not explaining this line at all.

Reserve 64bytes to my stack. The stack contains the current executing

location instructions and current position in the program; so when I

call and return and such, the computer knows where the **** to go. :)

it's a temporary storage area. I can put things on it myself and take

them off, but it's not random access; although I can read data without

removing it from the stack if needbe, so long as I know where I'm

planning to read it from. It's last in, first out.

GIGO. Your thought processes at work.

http://en.wikibooks.org/wiki/X86_Disassembly/The_Stack





Just tells nasm where the top of my stack should begin when this turns

into an .exe


Yes, please comment line by line. seems you are mixing hex and ascii
and it's a mess.



I'm not mixing anything. It's in hex. Hex is a base 16 number system, so

anything that appears below or at the number 16 is the same as in

decimal. [g] 09 hex is 09 decimal.



So mov ah,9 isn't ASCII. it's hex. like 0x21, but I didn't bother to

type 0x on it, as it wouldn't make a difference. it's the same in this

one.

I see--you cut and paste from Wikipedia. You can fool your non-programmingsycophants friends but you can't fool me Dustin.
Well Ray, that covers my end of assembly teaching 101. I won't waste my

time doing any more challenges for you, nor will I offer to teach you

anything else. I've more than proved I know this stuff. I'm not the fake

or the wannabe you tried to claim I was. As you would never show me the

slightest bit of respect during this, I won't do anything else for you.

Does not 'cover your end'. You end is exposed like the child you are--and everybody is laughing at your exposed end Dustin.

RL
 
? what does that mean?

I read your other reply before this one. I won't explain anything else.
You think I copied it from someplace huh? LOL.

I don't be thinking so. It's the simplest program one learns to write in
assembler. A hello world.
Neither do you it seems.

You'd be mistaken. This source file will assemble just fine using nasm.
That's a shit comment. Just shit. What does 'data', the pointer,
point to? What is it initialized to? Null? A value?

..exe files are seperated into sections. code is where your machine code
lives, data is where your variables will be living; as well as any
memory you allocate while your running.

It's beyond time for you to crack open that virus book. You shouldn't
need me to hold your hand on this.
"Tell"? Tell? Dustin, are you serious? What does 'tell' mean? You
mean ds equals (is assigned) the contents of register ax? Is that
it? Am I teaching you or do you even know? I'm trying to lern and
you seem to not know yourself.

I wrote the source I posted. I wrote the irok I posted. you aren't
teaching me. :)
Again, same problem, see above.

Not a problem for me. I understand what a pointer is. Being as you have
c programming background, YOU SHOULD too. It's the same ****ing thing!
I don't think so. I think you are loading the contents of ax into ss
register. Why you need to do this is not clear--but that's what YOU
are supposed to be teaching me. Recall pointer 'data' has been moved
to ax, so now ss register has this pointer value.

You don't think so? :) Lol.. Idiot. I have others here checking my work.
I'm not misleading you.
No. I don't think so Dustin. I think this is moving 'stacktop', a
variable, into register sp. Why you need to move variables into
different registers is not clear and certainly not being explained by
you.

You'd be wrong. It's not moving the variable; it's moving the location
in memory to where that variable begins! It's first byte.
No. Again, you show your incompetence. What I think this is doing
is moving the ASCII text 'hello' into register dx, which perhaps can
accept a string. Not clear though. Perhaps 'hello' is a variable?
Not clear. it is not doing what you claim it is. I'll say this:
even if you can code in assembly--and you've not shown me you
can--you are a lousy teacher.

you'd be wrong.

It's not moving the ascii text "hello" into register dx. It's moving the
location of where the variable "hello" begins! in memory. It's a pointer
ray, it's not the variable itself. A C style pointer at that, Ray!

Hello is a variable, configured to "Hello, ****ing, world!" it does not
print the trailing dollar sign, as function 09 uses that as EOS (End of
string). I'm not moving the variable into the registers, I'm moving a
pointer to the variables beginning in memory into those registers.

In order to do that, I had to first tell the OS where my stack! and data
segments are, as that's the memory region where my variable can be
found. If I had written it to become a .com file, I wouldn't have had to
do any of that. .coms don't have seperate sections, they're hardcoded to
a 64k image of the machine code as it'll look in memory. It doesn't
relocate by default. An EXE has a header with relocation tables.

Think of an .exe as multiple .com files.

I've never claimed to be a good teacher, as I have a low tolerance for
stupidity and having to repeat myself. Your assinine comments don't help
you here either.
OK but why would this act on register 'ax' and not on 'dx', which
precedes this line? is not assembly a procedural language, where the
sequence of instructions makes a difference? You seem to not
understand this.

I understand asm fine. You seem to be the one asking simple questions
and having to have your hand held here.
OK, but again you seem to have this out of sequence.

No. It's in sequence. I setup for the call and I made the call.
OK, but are you saying the hex code 0x4c00 has some significance?
Not clear if it does but that seems to be your assumption. Again,
not demonstrating you can explain anything, even if you know what you
are doing (which I doubt).

It certainly does. It's the function to exit back to dos! Did you think
asm programs just "end"?
Do what? You are making this shit up, aren't you?
Nope.



??? what? You saying this for line "int 0x21"? Unreal.

No. I'm saying that for segment "data" line.
WTF you talking about? Did you call a variable 'stack' and defining
a stack segment by that name? Not very smart of you, like calling an
'int' variable 'int'. In any event you are not explaining this line
at all.

NO!

int isn't a variable, stupid. It's short for "interrupt". It's a
command.

http://spike.scu.edu.au/~barry/interrupts.html

AH = 02h -WRITE CHARACTER TO STANDARD OUTPUT

Entry: DL = character to write

Return: AL = last character output

Notes:

^C/^Break are checked
the last character output will be the character in DL unless DL=09h
on entry, in which case AL=20h as tabs are expanded to blanks
if standard output is redirected to a file, no error checks (write-
protected, full media, etc.) are performed

SeeAlso: AH=06h,AH=09h

AX =AH and AL (high and low bytes).

GIGO. Your thought processes at work.

Last in, last out, stupid. GIGO is another term which applies when
programs get bad input, they provide bad output.

My thought processes are fine.
I see--you cut and paste from Wikipedia. You can fool your
non-programming sycophants friends but you can't fool me Dustin.

Fork url to my source you claim I stole from wikipedia. The interrupt
list is well known and documented everywhere. I didn't steal it. You
HAVE TO USE it if you wish to code 16bit assembler.
Does not 'cover your end'. You end is exposed like the child you
are--and everybody is laughing at your exposed end Dustin.

Nobodies laughing at me Ray. My work is fine. The sources are legit. :)

I'm sure people are now laughing at you tho. thinking "int 0x21" was a
variable or that "segment stack" is a variable. Or that I can move
vairables into a register! I can't. I can move pointers to the variables
into the registers, Ray. [g]


--
Things look bad from over here. Too much confusion and no solution.
Everyone here knows your fear. Your out of touch and you try too much.
Yesterdays glory will help us today. You wanna retire? Get outta the
way. I ain't got much time. Young ones close behind. I can't wait in
line.
 
Back
Top