Advertisement
Eternoseeker

ASS6

May 18th, 2023
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 2.45 KB | Source Code | 0 0
  1. section .data
  2.     nline       db      10,10
  3.     nline_len   equ     $-nline
  4.  
  5.     space       db      " "
  6.  
  7.     ano         db  10,     "   Assignment no: 6",
  8.                 db  10,     " --------------------------------------------------- ",
  9.                 db  10,     " Block Transfer-Non overlapped without String instruction.",
  10.                 db  10,     " ---------------------------------------------------------", 10
  11.     ano_len     equ $-ano
  12.  
  13.     bmsg        db  10,     "Before Transfer::"
  14.     bmsg_len    equ $-bmsg
  15.  
  16.     amsg        db  10,     "After Transfer::"
  17.     amsg_len    equ $-amsg
  18.    
  19.     smsg        db  10,     "   Source Block            :"
  20.     smsg_len    equ $-smsg
  21.  
  22.     dmsg        db  10,     "   Destination Block       :"
  23.     dmsg_len    equ $-dmsg
  24.  
  25.     sblock      db  11h, 22h, 33h, 44h, 55h
  26.     dblock      times   5   db  0
  27.    
  28. ;------------------------------------------------------------------------------
  29. section .bss
  30.     char_ans resB   2      
  31. ;-----------------------------------------------------------------------------
  32.  
  33. %macro  Print   2
  34.     MOV RAX,1
  35.     MOV RDI,1
  36.     MOV RSI,%1
  37.     MOV RDX,%2
  38.     syscall
  39. %endmacro
  40.  
  41. %macro  Read    2
  42.     MOV RAX, 0
  43.     MOV RDI, 0
  44.     MOV RSI, %1
  45.     MOV RDX, %2
  46.     syscall
  47. %endmacro
  48.  
  49.  
  50. %macro  Exit    0
  51.     Print   nline, nline_len
  52.     MOV RAX,60
  53.     MOV RDI,0
  54.     syscall
  55. %endmacro
  56. ;---------------------------------------------------------------      
  57.  
  58. section .text
  59.     global _start
  60.  
  61. _start:
  62.     Print   ano, ano_len
  63.  
  64.     Print   bmsg, bmsg_len 
  65.  
  66.     Print   smsg, smsg_len
  67.     mov     rsi, sblock
  68.     call    disp_block 
  69.  
  70.     Print   dmsg, dmsg_len
  71.     mov     rsi, dblock
  72.     call    disp_block
  73.    
  74.     call    BT_NO      
  75.  
  76.     Print   amsg, amsg_len 
  77.  
  78.     Print   smsg, smsg_len
  79.     mov     rsi, sblock
  80.     call    disp_block
  81.  
  82.     Print   dmsg, dmsg_len
  83.     mov     rsi, dblock
  84.     call    disp_block
  85.  
  86. Exit
  87. ;-----------------------------------------------------------------
  88. BT_NO:
  89.     mov rsi,sblock
  90.     mov rdi,dblock
  91.     mov rcx,5
  92.  
  93. back:   mov al,[rsi]   
  94.     mov [rdi],al   
  95.  
  96.     inc rsi
  97.     inc rdi
  98.  
  99.     dec rcx
  100.     jnz back
  101. RET
  102. ;-----------------------------------------------------------------
  103. disp_block:
  104.     mov     rbp,5       ;counter as 5 values
  105.  
  106. next_num:
  107.     mov     al,[rsi]   
  108.     push    rsi    
  109.  
  110.     call    Disp_8
  111.     Print   space,1
  112.    
  113.     pop rsi    
  114.     inc rsi
  115.    
  116.     dec rbp
  117.     jnz next_num
  118. RET
  119. ;---------------------------------------------------------------
  120. Disp_8:
  121.     MOV RSI,char_ans + 1
  122.     MOV RCX,2       ;counter
  123.     MOV RBX,16      ;Hex no
  124.  
  125. next_digit:
  126.     XOR RDX,RDX
  127.     DIV RBX
  128.  
  129.     CMP DL,9   
  130.     JBE add30
  131.     ADD DL,07H
  132.  
  133. add30   :
  134.     ADD DL,30H
  135.     MOV [RSI],DL
  136.  
  137.     DEC RSI
  138.     DEC RCX
  139.     JNZ next_digit
  140.  
  141.     Print   char_ans,2
  142. ret
  143.  
  144.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement