CSC231 Homework 7 Solution Programs

From dftwiki3
Revision as of 12:21, 1 November 2012 by Thiebaut (talk | contribs) (Created page with "--~~~~ ---- =Program 1= * This solution is from Gavi and shows she got the hints I gave the class about this array of character. The trick here is that since all the characters...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

--D. Thiebaut 13:21, 1 November 2012 (EDT)


Program 1

  • This solution is from Gavi and shows she got the hints I gave the class about this array of character. The trick here is that since all the characters are listed in order in the string, you have character '0' at index 0 in the string. Character '1' at Index 1. Character '2' at Index 2... Character '9' at Index 9. And now for the magic: Character 'A' is at Index 10. Character 'B' at Index 11, all the way to Character 'F' at Index 15. So we do not need to test whether the number we want to print in hex is less than 10 or not. We just take the number, use it as an index in the string and pull the character that corresponds to it!


;;; ; hw7a.asm
;;; ; Gavi Levy Haskell
;;; ; 231a-ae
;;; ;
;;; ;
;;; ; Displays the contents of a double-word in decimal and
;;; ; hexadecimal.
;;; ;
;;; ; Prints:
;;; ;   x = 305441741 = 0x1234ABCD
;;; ;
;;; ;
;;; ;     nasm -f elf -F  stabs hw7a.asm
;;; ;     gcc -m32 -o hw7a driver.c asm_io.o hw7a.o
;;; ;     ./hw7a

%include "asm_io.inc"
	
	;; -----------------
	;; DATA SECTION
	;; -----------------
	section	.data
x	dd	0x1234ABCD
msg	dd	"  x = ", 0x00
msg2	dd	" = 0x", 0x00
hexChr	db	"0123456789ABCDEF"
	
	;; -----------------
	;; CODE SECTION
	;; -----------------
	section	.text
	global	asm_main
asm_main:
	mov	eax, msg
	call	print_string 	; print "  x = "
	
 	mov	eax, dword[x]
 	call	print_int	; print "305441741"

	mov	eax, msg2
	call	print_string	; print " = 0x"
	
 	mov	ecx, 8
	
for:	mov	ebx, dword[x]	; ebx <-- current rotation of x
 	rol	ebx, 4		; rotate first byte to end
 	mov	dword[x], ebx	; save current rotation in x
 	and	ebx, 0x000000F 	; keep only last digit in ebx

	mov	al, byte[hexChr + ebx]
	call	print_char	; print the character of hexChr
				; corresponding to the digit
	loop	for

	call	print_nl
	
	;; return to C program
	ret