Tutorialspoint

Compile and Execute Assembly Online

asm


section .data
arr db "ABCDE     "
msg1 db "Enter 1. for non overlapping block transfer without string instruction",10
msg2 db "Enter 2. for non overlapping block transfer with string instruction",10
msg3 db "Enter 3. for  overlapping block transfer without string instruction",10
msg4 db "Enter 4. for  overlapping block transfer with string instruction",10 
msg5 db "Enter 5. EXIT",10 
msglen equ $-msg1
msg6 db "Enter  an offset",10
msg6len equ $-msg6
msg7 db 10
msg7len equ $-msg7

section .bss
choice resb 2
off resd 1

%macro inout 4
mov rax,%1
mov rdi,%2
mov rsi,%3
mov rdx,%4
syscall
%endmacro

section .text
global _start
_start:

inout 1,1,msg1,msglen
inout 0,0,choice,2

cmp byte[choice],31H         ;it is like switch case loop
 je label1
cmp byte[choice],32H
 je label2
cmp byte[choice],33H
 je label3
cmp byte[choice],34H
 je label4
cmp byte[choice],35H
 je exit
   
label1:                                        ;non overlapping without stirng ins
	mov ecx,5H
	mov esi,arr
	mov edi,arr
	add edi,5H

again:	mov al,[esi]
	mov [edi],al
	inc esi
	inc edi
	dec ecx
	jnz again
	inout 1,1,arr,10
	inout 1,1,msg7,msg7len
	jmp exit

label2:                                             ;overlapping with string ins
	mov ecx,5H
	mov esi,arr
	mov edi,arr
	add edi,5H

	CLD                                                      ;clear direction flag   DF=0
	REP MOVSB	               ;repeat mov string byte if  DF=0 si=si+1 di=di+1
	inout 1,1,arr,10                                
	inout 1,1,msg7,msg7len
	jmp exit

label3:                                                  ;overlapping without string ins
	inout 1,1,msg6,msg6len
	inout 0,0,off,1
	sub dword[off],30H
	
	mov ecx,5H
	mov esi,arr
	mov edi,arr
	add esi,4H
	add edi,4H
	add edi,dword[off]
	
up:	mov al,[esi]
	mov [edi],al
	dec esi
	dec edi
	dec ecx
	jnz up
	inout 1,1,arr,10
	inout 1,1,msg7,msg7len
	 
	jmp exit

label4:                                                           ;overlapping with string ins
	inout 1,1,msg6,msg6len
	inout 0,0,off,1
	sub dword[off],30H
	
	mov ecx,5H
	mov esi,arr
	mov edi,arr
	add esi,4H
	add edi,4H
	add edi,dword[off]
	
	STD                                                ;set direction flag   DF=1
	REP MOVSB                      ;repeat mov string byte if  DF=1 si=si-1 di=di-1

	inout 1,1,arr,10
	inout 1,1,msg7,msg7len
	
	jmp  exit
	
exit:
mov rax,60
mov rsi,0
syscall

Compile and Execute Assembly Online

asm

section.data:
array db 01,02,03,04
narray times 4 db 0
menue db '....MENUE.....',0AH
      db 10,'1'
      db 10,'2'
      db 10,'3.exit'
      db 10,'enter choice'
      menuelen equ $-menue
      src db 10
      srclen equ $-src
      dst db 10
      dstlen equ $-dst
      colon db ':'
      mov eax,1
      mov ebx,0
      int 80H
section.bss:
choice resb 2
dispbuff resb 8
dispbuff1 resb 2
section.text:
gobal_start:
_start:
disp src,srclen
disp menue,menuelen
accept choice,2
cmp byte[choice],31H
je opt1
cmp byte[choice],32H
je opt2
opt1:disp dst,dstlen
 up: mov esi,array
     mov edi,array
     mov ecx,4
     mov al,[esi]
     mov [edi],al
     inc esi
     inc edi
     loop up
     mov esi,array
     mov ecx,8
up_1 :mov ebx,esi
      call display8
      disp colon,1
      mov bl,[rsi]
      call display 2
      inc rsi
      loop up_1
      jmp menue
opt2:disp dst,dstlen
     mov rsi,array
     mov rdi,array
     mov ecx,4
     CLD
     rep movsb
     jmp menue
     display 8:ret
     display 2:ret
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
      
      
      
      
      
     
     
     
     
     
     
     
     
     
     
     
     
     




















      

Compile and Execute Assembly Online

asm

data Segment
MESSAGE DB "ENTER CHARACTER : $"
NUM1 DB ?
NUM2 DB ?
NUM3 DB ?
NUM4 DB ?
BCD DW ?
data ENDS
code Segment
ASSUME DS:data ,CS:code
Start:
MOV AX ,DATA
MOV DS,AX
LEA DX,MESSAGE 
MOV AH,9
int 21h
MOV NUM1,AL
SUB NUM1,30h
LEA DX,MESSAGE
int 21h
MOV NUM2,AL
SUB NUM2,30h
MOV AH,1
LEA DX,MESSAGE
int 21h
MOV NUM3,AL
SUB NUM3,30h
MOV AH,1
LEA DX, MESSAGE
int 21h
MOV NUM4,AL
SUB NUM4,30h
SUB AL,30h
MOV DH,00h
MOV DL,O1h
MOV DH,NUM1
ROL DH,4
Add DH,NUM2
MOV DL,NUM3
ROL DL,4
Add DL,NUM4
MOV BCD,DX
MOV AH,4Ch
int 21h
code ENDS
END START

Assembly Allocating Storage

asm

Unable to open file!