Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 100h
- jmp main
- chrs db 'M','I','M','I','H','S','G','A','M','$'
- main:
- mov bp, sp
- mov ax,offset chrs
- call print_ax_str
- mov ax, offset chrs
- push ax
- push 9
- call reverse
- PRINTN
- mov ax,offset chrs
- call print_ax_str
- jmp stop
- reverse proc
- i equ -2
- temp equ -4
- ; First save the old BP
- push bp
- push bx
- push si
- push ax
- ; Now establish new BP
- mov bp, sp
- ;make space for 2 local variables
- sub sp, 4
- ;write your code here:
- mov si, [bp+12]
- mov bx, [bp+10]
- mov [bp+i], bx
- dec [bp+i] ; [bp+i]=len-1
- for:
- ; temp=str[i]
- mov bx, [bp+i]
- mov bx, [si+bx]
- mov [bp+temp], bl
- ; str[i]=str[len-1-i]
- mov ax, [bp+i] ; ax=i
- mov bx, [bp+10] ; bx=len
- sub bx, ax ; bx=len-i
- mov bl, [si+bx-1] ; bx=str[len-i-1]
- xchg ax, bx ; al=str[len-i-1]
- mov bx, si ; bx=str
- add bx, [bp+i] ; bx=str+i
- mov [bx], al ; str[i]=str[len-i-1]
- ; str[len-1-i]=temp
- mov ax, [bp+i] ; ax=i
- mov bx, [bp+10] ; bx=len
- sub bx, ax ; bx=len-i
- mov al, [bp+temp] ; al=temp
- mov [si+bx-1], al ; str[len-i-1]=temp
- ; i--
- dec [bp+i]
- ; i>=len/2
- mov ax, [bp+10] ; ax=len
- shr ax, 1 ; ax=len/2
- cmp [bp+i], ax ; i-len/2
- jae for
- mov sp, bp
- ; Restore OLD BP
- pop ax
- pop si
- pop bx
- pop bp
- ret 4
- reverse endp
- stop:
- mov ah, 0
- int 16h
- ret
- include magshimim.inc
Advertisement
Add Comment
Please, Sign In to add comment