;; ;; Author: Bill Slough ;; ;; Determines the length of a string, then reverses and displays it. .ORIG x3000 ;; Determine the length of the string X LEA R0,X ; R0 = addr(X) AND R1,R1,#0 ; i = 0 LOOP ADD R2,R0,R1 ; while (X[i] != '\0') LDR R3,R2,#0 ; BRz ELOOP ; ADD R1,R1,#1 ; i = i + 1 BR LOOP ; ELOOP ; end while ST R1,N ; N = length(X) ;; Now reverse the string X AND R0,R0,#0 ; low = 0 LD R1,N ADD R1,R1,#-1 ; high = N - 1 LOOP2 NOT R2,R1 ; while (low < high) ADD R2,R2,#1 ; ADD R2,R0,R2 ; BRzp ELOOP2 ; LEA R2,X ; ADD R2,R2,R0 ; R2 = addr(X[low]) LEA R3,X ; ADD R3,R3,R1 ; R3 = addr(X[high]) LDR R4,R2,#0 ; low_char = X[low] LDR R5,R3,#0 ; high_char = X[high] STR R4,R3,#0 ; X[high] = low_char STR R5,R2,#0 ; X[low] = high_char ADD R0,R0,#1 ; low++ ADD R1,R1,#-1 ; high-- BR LOOP2 ; ELOOP2 ; end while LEA R0,X PUTS ; write(X) STOP HALT ; N .BLKW 1 X .STRINGZ "Math 3670 is fun!" .END