# CSE 322 Fall 2018 Lab 9

### Problem #1 (Example 10.3)

String read and write

```//Solution
.MODEL small
.STACK 100h
.DATA
w dw 10,15,30,40,50,60,70,80,90,'\$'

crlf db 0dh, 0ah, '\$'
.CODE
MAIN PROC
mov ax, @data
mov ds, ax

mov ax, 0
lea si, w
start:
mov bx, [si]
cmp bx, '\$'
je end_
jmp start

end_:

exit:
mov ah, 4ch
int 21h
ENDP MAIN
end MAIN```

### Problem #2 (Example 10.4, program listing 10.1)

Array (Each element is 16 bit) reverse procedure

```//Solution
.MODEL small
.STACK 100h
.DATA
w dw 10,20,30,40,50,60,70,80,90,100

crlf db 0dh, 0ah, '\$'
.CODE
MAIN PROC
mov ax, @data
mov ds, ax

lea si, w
mov bx, 10
call reverse

end_:

exit:
mov ah, 4ch
int 21h
ENDP MAIN
reverse proc
push ax
push bx
push cx
push dx
push si
push di
mov di, si
mov cx, bx
dec bx
shl bx, 1
shr cx, 1
xchgloop:
mov ax, [si]
xchg ax, [di]
mov [si], ax
sub di, 2
loop xchgloop

pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
reverse endp
end MAIN```

### Problem #3 (Section 10.6,Program listing 10.4)

Two dimensional array usage.
Finding the average of different tests

```//Solution
.MODEL small
.STACK 100h
.DATA
five dw 5
scores dw 67, 45, 98, 33
dw 70, 56, 87, 44
dw 82, 72, 89, 40
dw 80, 67, 95, 50
dw 78, 76, 92, 60
avg dw 5 dup(0)
crlf db 0dh, 0ah, '\$'
.CODE
MAIN PROC
mov ax, @data
mov ds, ax

mov si, 6
repeat:
mov cx, 5
xor bx, bx
xor ax, ax
for:
loop for

xor dx, dx
div five
mov avg[si], ax
sub si,2
jnl repeat

exit:
mov ah, 4ch
int 21h
ENDP MAIN
end MAIN```

### Problem #4

Basic Xlat usage

```//Solution
.MODEL small
.STACK 100h
.DATA
hello db 10,11,12,13,14,15,16,17,18,19,20
.CODE
MAIN PROC
mov ax, @data
mov ds, ax

lea bx, hello
mov al, 5
xlat ; XLAT uses the initial value n stored in al, and fetches the nth element from the array

exit:
mov ah, 4ch
int 21h
ENDP MAIN
end MAIN```

### Problem #5 (Section 10.7, Program listing 10.5)

Encoding and decoding mesage using XLAT instruction

```//Solution
.MODEL small
.STACK 100h
.DATA
; ABCDEFGHIJKLMNOPQRSTUVWXYZ
codekey db 65 dup(' '), 'XQPOGHZBCADEIJUVFMNKLRSTWY'
db 37 dup(' ')
; ABCDEFGHIJKLMNOPQRSTUVWXYZ
decodekey db 65 dup(' '), 'JHIKLQEFMNTURSDCBVWXOPYAZG'
db 37 dup(' ')
coded db 80 dup('\$')
prompt db 'Enter a message: \$'
crlf db 0dh, 0ah, '\$'
.CODE
MAIN PROC
mov ax, @data
mov ds, ax

MOV Ah, 9
LEA dx, prompt
int 21h

mov ah, 1
lea bx, codekey
lea di, coded
while_:
int 21h
cmp al, 0dh
je endwhile
xlat
mov [di], al
inc di
jmp while_
endwhile:
mov ah, 9
lea dx, crlf
int 21h

lea dx, coded
int 21h

lea dx, crlf
int 21h

mov ah, 2
lea bx, decodekey
lea si, coded
while1:
mov al, [si]
cmp al, '\$'
je endwhile1
xlat
mov dl, al
int 21h
inc si
jmp while1
endwhile1:

exit:
mov ah, 4ch
int 21h
ENDP MAIN
end MAIN```

### Problem #6

Change the code in problem 5 to encode and decode for both small letters and capital letters

```//Solution
To be done by students```

### Problem #7

Change the code in problem 5 to encode in such way that a letter is replaced by three letters ahead.
For example A becomes D and B becomes E

```//Solution
To be done by students```