Sunday 19 April 2015

concatB

section .data
concatstrmsg db 'Concatenation of two strings is',10
conln equ $-concatstrmsg
occurstr db 'occurences of substrings is ',10
occurstrln equ $-occurstr

section .bss
concatstr resb 40
concatstrlnn: equ $-concatstr
cntr resb 1
dispnum resb 2
Extern mainstr,substr,mstrl,sbstrl       
%include "m.asm"                   
                                 
section .text
global _main
_main:
global concat,subcnt               
concat:xor rcx,rcx               
    mov cx,[mstrl]               
    mov rsi,mainstr                   
    mov rdi,concatstr               
    call l1   
    mov rsi,substr               
    mov cx,[sbstrl]               
    call l1
         disp concatstrmsg,conln       
    disp concatstr,concatstrlnn
    ret
   
    l1:
     mov al,[rsi]               
    mov [rdi],al               
    inc rsi                   
    inc rdi                   
    dec rcx                   
    jnz l1                   
    ret
                       
subcnt:
mov ebp,mainstr               
mov esi,mainstr               
mov edi,substr               
mov rcx,[sbstrl]               
xor rbx,rbx                   
mov bx,[mstrl]               
sub rbx,rcx                   
inc rbx                   
b1:cld                   
repe cmpsb                   
jne b2
inc byte[cntr]               
b2:inc ebp
mov esi,ebp               
mov edi,substr               
mov rcx,[sbstrl]
dec rbx
jnz b1
disp occurstr,occurstrln
mov rax,[cntr]               
call display8
ret


display8:mov rcx,2   
    mov rsi,dispnum+1       

L:    mov     rdx,0           
    mov     rbx,10       
    div     rbx
    cmp     dl, 09h       
    jbe      add30
    add      dl, 07h 

add30:
    add     dl,30h       
    mov     [rsi],dl       
dec     rsi               

    dec     rcx           
    jnz     L
    disp dispnum,2       
    ret

concatA

section .data
menumsg db '-----------------Menu---------------------'
    db '1:Concatenation of two strings',10
    db '2:Occurences of substrings',10
    db '3:Exit',10
menumsgln equ $-menumsg
mainstrmsg db 'Enter main string',10
mainstrln equ $-mainstrmsg
substrmsg db 'Enter sub-string',10
substrln equ $-substrmsg
concatstrmsg db 'Concatenation of two strings is',10
conln equ $-concatstrmsg

chomsg db 'Enter the choice',10
chomsgln equ $-chomsg

section .bss
global mainstr,substr,mstrl,sbstrl       
%include "m.asm"                      
Extern concat,subcnt               

mainstr resb 20
mainstrlnn: equ $-mainstr

substr resb 20
substrlnn: equ $-substr


cho resb 2
choln: equ $-cho
mstrl resb 2

sbstrl resb 2


section .text
global _start
_start:

menu:disp menumsg,menumsgln       

    disp chomsg,chomsgln       
    accept cho,choln

case1:cmp byte[cho],'1'           
    jne case2
    disp mainstrmsg,mainstrln
    accept mainstr,mainstrlnn       
    dec rax   
    mov [mstrl],ax           

    disp substrmsg,substrln
    accept substr,substrlnn       
    dec ax
    mov [sbstrl],ax           
   
    call concat               
    jmp menu

case2:cmp byte[cho],'2'           
    jne case3
    disp mainstrmsg,mainstrln
    accept mainstr,mainstrlnn       
    dec rax
    mov [mstrl],ax           

    disp substrmsg,substrln
    accept substr,substrlnn       
    dec ax
    mov [sbstrl],ax           
   
    call subcnt               
    jmp menu

case3:cmp byte[cho],'3'           
    je ext
       
    ext:mov eax,1
    mov ebx,0           
    int 80h

string


section .data
    menu    db 10,"-------MENU------",10
        db "1.ENTER THE STRING",10
        db "2.DISPLAY THE LENGTH OF STRING",10
        db "3.REVERSE THE STRING",10
        db "4.EXIT",10
        db "Enter Your Choice:",10
    menumsglen equ $-menu

    msg1 db "ENTER THE STRING??",10
    msg1len equ $-msg1

    msg2 db "LENGTH OF STRING",10
    msg2len equ $-msg2

    msg3 db "REVERSE STRING IS",10
    msg3len equ $-msg3

    msgdsp db "U ENTERED THE STRING:" ,10
    msgdsplen equ $-msgdsp

section .bss
    str1 resb 20
    str1len: equ $-str1

    strlen1 resb 2

    strrev resb 20
            strrev_len equ $-strrev

    cho resb 2
    chlen: equ $-cho

    displen resb 2
    displength: equ $-displen


%macro disp 2
    mov rax,4                   
    mov ebx,1
    mov ecx,%1
    mov edx,%2
    int 80h
%endmacro

%macro accept 2
    mov rax,3
    mov ebx,0
    mov ecx,%1
    mov edx,%2
    int 80h
%endmacro

section .text
global _start
    _start:

mn:    disp  menu,menumsglen
    accept cho,chlen

 case1:
     cmp byte[cho],'1'        
    jne case2
           disp msg1,msg1len
    accept str1,str1len
   
    disp msgdsp,msgdsplen
    disp str1,str1len         
    dec ax                        
    mov [strlen1],ax           



 case2:
       cmp byte[cho],'2'        
    jne case3
            disp msg2,msg2len
    mov rax,[strlen1]
    call hextoascii

 case3:
     cmp byte[cho],'3'        
            jne case4

            mov rsi,str1              
            xor rcx,rcx                   
    mov cx,[strlen1]          
            add rsi,rcx                  
           dec rsi                      
           mov rdi,strrev            
           mov rbp,rcx
L9:   
           mov al,[rsi]                 
           mov [rdi],al                  
          dec rsi                       
          inc rdi                      
          dec rbp
          jnz L9
         disp msg3,msg3len           
          disp strrev,strrev_len



      

 case4:   
    cmp byte[cho],'4'         
    je ext

jmp mn

   ext: mov eax,1
    mov ebx,0
    int 80h


hextoascii:
    mov rcx,02
    mov rsi,displen+1
   l2:    mov rdx,00
    mov rbx,16
    div rbx
    add dl,30h
    mov [rsi],dl
    dec rsi
    dec rcx
    jnz l2
    disp displen,2   
ret

succadd



section .data

    msg_enter db 10,'Enter two digit Number::'
    msg_enter_len equ $-msg_enter
    res db 10,'Multiplication of elements is::'
    res_len equ $-res
   


section .bss
    num resb 03
    num1 resb 01
    result resb 04
    numascii resb 2


%macro dispmsg 2
    mov rax,1
    mov rdi,1
    mov rsi,%1
    mov rdx,%2
    syscall
%endmacro

%macro accept 2
    mov rax,0
    mov rdi,0
    mov rsi,%1
    mov rdx,%2
    syscall
%endmacro


section .text

global _start
_start:

       
    xor rax,rax       
    xor rbx,rbx
    xor rcx,rcx
    xor rdx,rdx
    mov byte[result],0
    mov byte[num],0
    mov byte[num1],0

    
    call succ_add_proc
    jmp exit

   



exit:
    mov rax,60
    mov rdi,0
    syscall

succ_add_proc:

    dispmsg msg_enter,msg_enter_len       
    accept num,3           
    call packnum                   

    mov [num1],bl               
   
    dispmsg msg_enter,msg_enter_len       
    accept num,3   
    call packnum                   
                       

    xor rcx,rcx               
    xor rax,rax               
    mov rax,[num1]               
   
repet:
    add rcx,rax           
    dec bl                   
    jnz repet           

    mov [result],rcx           
    dispmsg res,res_len           
    mov rbx,[result]           

    call display_16bit_proc           
ret

packnum:
    xor rbx,rbx
    xor rcx,rcx
    xor rax,rax

    mov rcx,02
    mov rsi,num
up1:
    rol bl,04

    mov al,[rsi]
    cmp al,39h
    jg p1
    sub al,30h
    jmp p2
p1:     sub al,37h
p2:    add bl,al
    inc rsi
    loop up1
ret

display_16bit_proc:
    mov rcx,4
    mov rdi,result
dup1:
    rol bx,4
    mov al,bl
    and al,0fh
    cmp al,09h
    jg p3
    add al,30h
    jmp p4
p3:     add al,37h
p4:    mov [rdi],al
    inc rdi
    loop dup1

    dispmsg result,4
ret


shiftadd



section .data

    msg_enter db 10,'Enter two digit Number::'
    msg_enter_len equ $-msg_enter
    res db 10,'Multiplication of elements is::'
    res_len equ $-res
   

section .bss
    num resb 03
    num1 resb 01
    result resb 04
    numascii resb 2


%macro dispmsg 2
    mov rax,1
    mov rdi,1
    mov rsi,%1
    mov rdx,%2
    syscall
%endmacro

%macro accept 2
    mov rax,0
    mov rdi,0
    mov rsi,%1
    mov rdx,%2
    syscall
%endmacro


section .text

global _start
_start:

       
    xor rax,rax       
    xor rbx,rbx
    xor rcx,rcx
    xor rdx,rdx
    mov byte[result],0
    mov byte[num],0
    mov byte[num1],0

   
   
       
   



    call add_shift_proc
    call exit
   

exit:
    mov rax,60
    mov rdi,0
    syscall



add_shift_proc:
    dispmsg msg_enter,msg_enter_len       
    accept num,3               

    call packnum                   
    mov [num1],bl               
   
    dispmsg msg_enter,msg_enter_len   
    accept num,3               
    call packnum                   

    mov [num],bl           

    xor rbx,rbx               
    xor rcx,rcx               
    xor rdx,rdx               
    xor rax,rax               
   
    mov dl,08               
    mov al,[num1]               
    mov bl,[num]               

p11:    shr bx,01               
    jnc p                   
    add cx,ax               
p:    shl ax,01               
    dec dl                   
    jnz p11                   

    mov [result],rcx           
    dispmsg res,res_len           

    mov rbx,[result]           
    call display_16bit_proc           

ret

packnum:
    xor rbx,rbx
    xor rcx,rcx
    xor rax,rax

    mov rcx,02
    mov rsi,num
up1:
    rol bl,04

    mov al,[rsi]
    cmp al,39h
    jg p1
    sub al,30h
    jmp p2
p1:     sub al,37h
p2:    add bl,al
    inc rsi
    loop up1
ret

display_16bit_proc:
    mov rcx,4
    mov rdi,result
dup1:
    rol bx,4
    mov al,bl
    and al,0fh
    cmp al,09h
    jg p3
    add al,30h
    jmp p4
p3:     add al,37h
p4:    mov [rdi],al
    inc rdi
    loop dup1

    dispmsg result,4
ret




tsr



CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
ORG 0100H
START:
        JMP INIT
        OLDCSIP DD ?
        TEMP DB 00H
        HR DB 00H
        MN DB 00H
        S1 DB 00H

USER:

        PUSH AX
        PUSH BX
        PUSH CX
        PUSH DX

        MOV AH,00H      ;INITIALAISE GRAPHICS MODE..
        MOV AL,03H
        INT 10H

        MOV AH,02H
        MOV BH,00H
        MOV DH,10
        MOV DL,50
        INT 10H

        MOV AH,02H      ;GET TIME FROM CMOS
        INT 1AH

        MOV HR,CH
        MOV MN,CL
        MOV S1,DH

        MOV AL,HR
        CALL DISPLAY

        MOV AH,02H
        MOV DL,":"
        INT 21H

        MOV AL,MN
        CALL DISPLAY


        MOV AH,02H
        MOV DL,":"
        INT 21H

        MOV AL,S1
        CALL DISPLAY

        POP DX
        POP CX
        POP BX
        POP AX
        
        JMP CS:OLDCSIP

INIT:
        CLD
        MOV AH,35H        ;get current intrrupt adddres 
        MOV AL,00H
        INT 21H

        MOV WORD PTR[OLDCSIP],BX
        MOV WORD PTR[OLDCSIP+2],ES

        MOV AH,25H      ;SET VECTOR  ADDRESS
        MOV AL,00H
        MOV DX,OFFSET[USER]
        INT 21H

        MOV AH,31H      ;MAKE PROGAM RSIDENT IN MEMORY
        MOV DX,OFFSET INIT
        INT 21H

        STI

DISPLAY PROC NEAR
        MOV TEMP,AL
        AND AL,0F0H
        MOV CL,04H
        ROL AL,CL
        CMP AL,09H
        JBE L5
        ADD AL,07H
L5:
        ADD AL,30H
        MOV AH,02H
        MOV DL,AL
        INT 21H

        MOV DL,TEMP
        AND DL,0FH
        CMP DL,09H
        JBE L6
        ADD DL,07H
L6:
        ADD DL,30H
        MOV AH,02H
        INT 21H
        RET
DISPLAY ENDP

CODE ENDS
END START

tsrdiv0

DATA SEGMENT
     DID DW ooo8H
    DR DB 00H
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA

START:

    MOV AX,DATA
    MOV DS,AX
   
    MOV AX,DID
    DIV DR

    MOV AH,4CH
    INT 21H

CODE ENDS
END STARTS