We don't normally like to just people's homework for them, but this should give some insight into the job. I'll assume that if it is an assignment for a class, you've been introduced to the instruction set, at least of the NMOS 6502 if not the CMOS 65c02 (which has more instructions and addressing modes).
I think the most efficient way to form the output string would probably be to have a string look-up table for each digit. For example, if the ones' digit is a 1, the string is "I"; if it's a 4, it's "IV", etc.. The tens' place will have another look-up table, so if you have a 1 in the tens' place, the record in the table will a one-byte-long string that just says "X". Indexing into these tables will be easiest if each string building block like this is given the same number of bytes, which will probably be best made three bytes for characters and one for length. (I don't think any need four characters, do they?) Obviously some bytes will go unused since not all the roman-numberal building blocks are 3 characters long. If 3+1 is adequate, you take your digit, shift left twice (using ASL) to multiply by four, put that index number in X (using TAX), and do LDA digit_string_table,X. As you read each byte, you increment X (with INX) to get the next byte. A zero in any place gives you a zero-length string to add to the output string. Since you'll be adding these fragments to the final result string you're constructing, you'll need an index register for that one too. Instead of storing X to memory and then modifying, restoring, etc., use Y for the other one. For the simple indexing, X and Y are interchangeable to some extent. For example, there is both an LDA abs,X and an LDA abs,Y, and both an STA abs,X and an STA abs,Y
Now as for getting the digit from the number-- If you're working in decimal mode (which is much more practical on the 6502 than on many other processors), you can get the digit pretty easily since each four bits contains a decimal digit and you can isolate it with AND#$0F, or AND#$F0 LSR LSR LSR LSR. What may make it more difficult for the beginner however is that computers usually keep and work the numbers in hex, and only convert between hex and decimal when it comes time for human-readable I/O. If you have to do it in hex, you can get each digit, starting with the ones' place, by dividing the whole number by ten and looking at the remainder. You repeat this process until there's nothing left of the number (ie, it is 0). In fact, that's the way Forth easily converts to any base. It can just as easily convert to base 7 or base 13 if you had some odd reason to do so. Division routines are not trivial though, so I'll direct you to my division entry in the 6502.org source code repository, at
http://www.6502.org/source/integers/umm ... modfix.htm . The comments are very complete.
I haven't had the misfortune of having to think about roman numerals in a long time, so hopefully I'm not forgetting something important.
Garth