Advertisement
Eternoseeker

ASS7

May 18th, 2023
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 2.40 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: 7",
  8.                 db  10,     " --------------------------------------------------- ",
  9.                 db  10,     " Block Transfer-Non overlapped with 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-2
  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-2
  84.     call    disp_block
  85.  
  86. Exit
  87. ;-----------------------------------------------------------------
  88. BT_NO:
  89.     mov rsi,sblock+4
  90.     mov rdi,dblock+2
  91.     mov rcx,5
  92.  
  93.     STD
  94.     REP MOVSB
  95. RET
  96. ;-----------------------------------------------------------------
  97. disp_block:
  98.     mov     rbp,5       ;counter as 5 values
  99.  
  100. next_num:
  101.     mov     al,[rsi]   
  102.     push    rsi    
  103.  
  104.     call    Disp_8
  105.     Print   space,1
  106.    
  107.     pop rsi    
  108.     inc rsi
  109.    
  110.     dec rbp
  111.     jnz next_num
  112. RET
  113. ;---------------------------------------------------------------
  114. Disp_8:
  115.     MOV RSI,char_ans + 1
  116.     MOV RCX,2       ;counter
  117.     MOV RBX,16      ;Hex no
  118.  
  119. next_digit:
  120.     XOR RDX,RDX
  121.     DIV RBX
  122.  
  123.     CMP DL,9   
  124.     JBE add30
  125.     ADD DL,07H
  126.  
  127. add30   :
  128.     ADD DL,30H
  129.     MOV [RSI],DL
  130.  
  131.     DEC RSI
  132.     DEC RCX
  133.     JNZ next_digit
  134.  
  135.     Print   char_ans,2
  136. ret
  137.  
  138.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement