Just for fun, here's a Motorola 68k program I wrote for school. It's not the best written since we're allowed to use a very limited number of instructions. The purpose is to convert a hex number (in a string) to binary, decimal, and, if possible, ascii:
*****************************************************************
* NAME iago
* STUDENT NUMBER 666
* COURSE 74.222
* INSTRUCTOR Sara
* ASSIGNMENT 2
* QUESTION 3
*****************************************************************
*setup low memory
org $0
dc.l $100000 stack pointer after reset
dc.l start program counter after reset
org $1000
*****************************************************************
include 68kIO.s Input/Output routines
*****************************************************************
*initialize for I/O
start: lea zzduart,a1
move.b #%00010000,zzcra(a1) Reset MR?A pointer
move.b #%00100011,zzmr1a(a1) 8 data bits
move.b #%00010111,zzmr2a(a1) Normal Mode
move.b #%10111011,zzcsra(a1) Set clock to 9600
move.b #%00000101,zzcra(a1) Enable Rx and Tx
*****************************************************************
*equ symbols
null equ $00 null string terminator
lf equ $0A linefeed
cr equ $0D carriage return
*****************************************************************
* My program starts here
*****************************************************************
main
*Print Identification
lea IDBanner,a0 address of IDBanner
jsr strout
jsr newline
* Get the input values
* Print the prompt
Begin:
jsr newline
lea GetHex,a0
jsr strout
* Input the hex value
lea HexStr,a0
jsr strin
* d7 = HO Byte
* d6 = LO Byte
* d5 = Decimal Value of byte
* Move half the string into d7
clr.l d7
move.b (a0)+,d7
* Move the other half into d6
clr.l d6
move.b (a0),d6
* jsr ShowNums
* Clear the decimal byte
clr.l d5
* Make d7 and d6 into their decimal values
sub.l #'0',d7
sub.l #'0',d6
* jsr ShowNums
* If d7 is already in decimal, jump over conversion
cmp.b #9,d7
ble d7IsGood
* Ok, d7 is a hex letter
* The value to subtract is 10 - ('A' - '0') - 1
* = 10 - (0x40 - 0x30) - 1
* = 10 - 0x10 - 1
* = 10 - 16 - 1
* = 7
sub.l #7,d7
d7IsGood:
* Now do the same for d6
cmp.b #9,d6
ble d6IsGood
* d6 is hex > 9
sub.l #7,d6
d6IsGood:
* Now we multiply d7 by 16 to make it hex
mulu #16,d7
* Finally, add them together to get the full decimal value
add.l d6,d7
* Here is the easiest place to check for the sentinal, so
* what the heck?
cmp #0,d7
beq Over
* Display the decimal value
lea PutDec,a0
jsr strout
move.l d7,d0
jsr decout
* Make a copy of the number for converting to binary
move.l d7,d6
* Load the address of BinStr into a1
lea BinStr,a1
* Set up d1 as a counter, and branch to the end of CalcBin
move.l #8,d1
bra EndBin
* Clear out d2 to store remainder
clr.l d2
BegBin:
* Divide d6 by 2
divu #2,d6
* Bring the remainder to the front
swap d6
* Move the remainder into d2
move.w d6,d2
* Get rid of the remainder
clr.w d6
* Put the next value to divide back into the LOW
swap d6
* Check the remainder, if it's a 1 jump to DoOne, otherwise fall through
cmp.w #1,d2
beq DoOne
* Set the next bit to a zero
move.b #0,(a1)+
bra EndBin
* Otherwise, set it to a one
DoOne:
move.b #1,(a1)+
EndBin:
dbra d1,BegBin
jsr newline
* Read the binary backwards from a1
move.l #8,d1
* Make sure d0 is clean
clr d0
*Display BinaryDisplay header
lea PutBin,a0
jsr strout
bra EndBDis
BegBDis:
* Clear d0
clr.l d0
* Load the value of a1 into d0
move.b -(a1),d0
* Display it
jsr decout
EndBDis:
* Checks to see if we've displayed 8 bin values yet
dbra d1,BegBDis
jsr newline
* Show the ascii header (this would make more sense after the condition,
* but I didn't invent this!)
lea PutChar,a0
jsr strout
* If the number is smaller than 0x20 (a control character), don't display
cmp #$20,d7
blt Begin
lea AsciiStr,a0
move.b d7,(a0)
jsr strout
bra Begin
* end of processing
Over:
lea EOP,a0 address of message
jsr newline
jsr strout
break
ShowNums:
*This just outputs d7 and d6 in readable format (for debugging)
move.l d7,d0
jsr decout
jsr newline
move.l d6,d0
jsr decout
jsr newline
rts
***********************************************************************
IDBanner dc.b 'NAME iago',cr,lf
dc.b 'STUDENT NUMBER 666',cr,lf
dc.b 'COURSE 74.222',cr,lf
dc.b 'INSTRUCTOR Sara',cr,lf
dc.b 'ASSIGNMENT 2',cr,lf
dc.b 'QUESTION 3',cr,lf,lf
dc.b null Banner string terminator
EOP dc.b 'END OF PROCESSING',cr,lf,null
HexStr dc.w ' '
dc.b null
AsciiStr dc.b null
dc.b null Make sure ascii is null-terminated
BinStr dc.l ' '
dc.b null
GetHex dc.b 'Enter a 2-digit (1 byte) hex value: ',null
PutDec dc.b 'Decimal value: ',null
PutBin dc.b 'Binary value: ',null
PutChar dc.b 'Character: ',null
***********************************************************************
end
Nice
in 20 days, this post will be a year old.
lol
That would be a hint to stop posting in old topics, particularly if you have nothing useful to contribute.
It could also be a threat - stop or be banned.
Quote from: Adron on January 26, 2004, 11:00 AM
It could also be a threat - stop or be banned.
Skywing's response is more of a threat, mine's a hint :)
I really don't see what the big deal with replying to really old posts is? If they make a new post asking question about some random thing that was already talked about but that they don't understand people will tell them to search anyhow. IMHO people complaining that user x bumped an old post are more annoying then anything else.
Quote from: Zorm on January 27, 2004, 12:53 AM
I really don't see what the big deal with replying to really old posts is? If they make a new post asking question about some random thing that was already talked about but that they don't understand people will tell them to search anyhow. IMHO people complaining that user x bumped an old post are more annoying then anything else.
It's all right if somebody actually has something useful to say, in my opinion.
Quote from: Zorm on January 27, 2004, 12:53 AM
I really don't see what the big deal with replying to really old posts is? If they make a new post asking question about some random thing that was already talked about but that they don't understand people will tell them to search anyhow. IMHO people complaining that user x bumped an old post are more annoying then anything else.
This as known as "spam", typically something which results in wasted time due to rereading topics you've already read.
If you want to discuss this further, please take the discussion to at least a different forum.
Making useless posts (I.e. "me too" style posts, laughs, or just agreements where noone has disagreed) is acceptable for fresh topics, and where there aren't too many useless posts already. It then adds some measure of feel to the post, kind of like laughing at a joke.
It's unacceptable to make useless posts to old topics, or topics that are getting drowned in useless posts. It's as annoying as people who suddenly start laughing like crazy at a joke you pulled 15 minutes ago, long after the conversation moved on, because they finally understood it.
Quote from: Adron on January 27, 2004, 12:12 PM
It's as annoying as people who suddenly start laughing like crazy at a joke you pulled 15 minutes ago, long after the conversation moved on, because they finally understood it.
haha, I did that on the weekend. There was a cleverly named something-or-other, and I've known about it for a long time but didn't recognize the pun. Then somebody said it and it clicked and I said, while everybody was dumbly staring at me, "oooh I get it now! HAH!" If I remember what the pun was, I'll share it :)
year old tomorrow!