; Jade Yu Cheng ; ICS 312 ; Assignment 3 Exercise 1 ; Feb 23, 2009 ; this is an assembly program that prompts the user to type a 5-character ; string. The program reads the first 5 characters of that string and prints ; two strings. The first string contains the 5 characters entered by the user, ; but in reverse order. The second string contains the 5 characters entered by ; the user, but whose ASCII code has been decremented by 32. %include "asm_io.inc" segment .data msg1 db "Enter a 5-character string: ", 0 msg2 db "String#1: ", 0 msg3 db "String#2: ", 0 segment .bss input resb 6 ; reserve space for user input string reverse resb 6 ; reserve space for the reversed string segment .text global asm_main asm_main: enter 0,0 ; setup pusha ; setup ; prompt the user to type in 5 charactors and store them in "input" mov eax, msg1 ; let eax point to msg1 call print_string ; prints out msg1 mov ebx, input ; let ebx point to the "input" call read_char ; get a charactor from the keyboard mov [ebx], al ; store the charactor into "input" inc ebx ; move the pointer to the next position call read_char ; get a charactor from the keyboard mov [ebx], al ; store the charactor into "input" inc ebx ; move the pointer to the next position call read_char ; get a charactor from the keyboard mov [ebx], al ; store the charactor into "input" inc ebx ; move the pointer to the next position call read_char ; get a charactor from the keyboard mov [ebx], al ; store the charactor into "input" inc ebx ; move the pointer to the next position call read_char ; get a charactor from the keyboard mov [ebx], al ; store the charactor into "input" inc ebx ; move the pointer to the next position mov byte [ebx], 0 ; NULL terminates the "input" string ; read the charactors from "input", store them in "reverse" string in a ; reversed order, and print out the "reverse" string mov eax, input ; let eax point to "input" mov ebx, reverse ; let ebx point to "reverse" add ebx, 5 ; move ebx pointer the end of "reverse" mov byte [ebx], 0 ; NULL terminates the "reverse" string dec ebx ; decrement ebx pointer mov cl, [eax] ; store the charactor in "input" to cl mov [ebx], cl ; write the charactor to "reverse" inc eax ; increment eax pointer dec ebx ; decrement ebx pointer mov cl, [eax] ; store the charactor in "input" to cl mov [ebx], cl ; write the charactor to "reverse" inc eax ; increment eax pointer dec ebx ; decrement ebx pointer mov cl, [eax] ; store the charactor in "input" to cl mov [ebx], cl ; write the charactor to "reverse" inc eax ; increment eax pointer dec ebx ; decrement ebx pointer mov cl, [eax] ; store the charactor in "input" to cl mov [ebx], cl ; write the charactor to "reverse" inc eax ; increment eax pointer dec ebx ; decrement ebx pointer mov cl, [eax] ; store the charactor in "input" to cl mov [ebx], cl ; write the charactor to "reverse" mov eax, msg2 ; let eax point to msg2 call print_string ; print out msg2 mov eax, reverse ; let eax point to "reverse" call print_string ; print out "reverse" call print_nl ; print a blank line ; read the charactors from "input", decrement the number by 32, and ; store them back to "input" string. mov ebx, input ; let ebx point to "input" mov al, [ebx] ; store the charactor in "input" to al sub al, 32 ; decrement al by 32 mov [ebx], al ; write the modified charactor to ebx inc ebx ; increment the ebx pointer mov al, [ebx] ; store the charactor in "input" to al sub al, 32 ; decrement al by 32 mov [ebx], al ; store the charactor in "input" to al inc ebx ; increment the ebx pointer mov al, [ebx] ; store the charactor in "input" to al sub al, 32 ; decrement al by 32 mov [ebx], al ; store the charactor in "input" to al inc ebx ; increment the ebx pointer mov al, [ebx] ; store the charactor in "input" to al sub al, 32 ; decrement al by 32 mov [ebx], al ; store the charactor in "input" to al inc ebx ; increment the ebx pointer mov al, [ebx] ; store the charactor in "input" to al sub al, 32 ; decrement al by 32 mov [ebx], al ; store the charactor in "input" to al mov eax, msg3 ; let eax point to msg3 call print_string ; print out msg3 mov eax, input ; let eax point to "input" call print_string ; print out the modified "input" string call print_nl ; print a blank line popa ; cleanup mov eax, 0 ; cleanup leave ; cleanup ret ; cleanup