Advertisement
STANAANDREY

a+b-c digits

Nov 1st, 2024 (edited)
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. section .data
  2.     prompt1 db "Enter A: "
  3.     prompt1_len equ $ - prompt1
  4.     prompt2 db "Enter B: "
  5.     prompt2_len equ $ - prompt2
  6.     prompt3 db "Enter C: "
  7.     prompt3_len equ $ - prompt3
  8.     result_msg db "Result (A+B-C): "
  9.     result_msg_len equ $ - result_msg
  10.     newline db 10
  11.    
  12.     STDIN_FILENO  equ 0
  13.     STDOUT_FILENO equ 1
  14.     STDERR_FILENO equ 2
  15.  
  16. section .bss
  17.     num1 resb 2    ; Space for digit A and newline
  18.     num2 resb 2    ; Space for digit B and newline
  19.     num3 resb 2    ; Space for digit C and newline
  20.     result resb 2  ; Space for result and newline
  21.  
  22. section .text
  23.     global _start
  24.  
  25. _start:
  26.     ; Print "Enter A: "
  27.     mov rax, 1          ; sys_write
  28.     mov rdi, 1          ; stdout
  29.     mov rsi, prompt1
  30.     mov rdx, prompt1_len
  31.     syscall
  32.  
  33.     ; Read A
  34.     mov rax, 0          ; sys_read
  35.     mov rdi, 0          ; stdin
  36.     mov rsi, num1
  37.     mov rdx, 2          ; read 2 bytes (digit + newline)
  38.     syscall
  39.  
  40.     ; Print "Enter B: "
  41.     mov rax, 1
  42.     mov rdi, 1
  43.     mov rsi, prompt2
  44.     mov rdx, prompt2_len
  45.     syscall
  46.  
  47.     ; Read B
  48.     mov rax, 0
  49.     mov rdi, 0
  50.     mov rsi, num2
  51.     mov rdx, 2
  52.     syscall
  53.  
  54.     ; Print "Enter C: "
  55.     mov rax, 1
  56.     mov rdi, 1
  57.     mov rsi, prompt3
  58.     mov rdx, prompt3_len
  59.     syscall
  60.  
  61.     ; Read C
  62.     mov rax, 0
  63.     mov rdi, 0
  64.     mov rsi, num3
  65.     mov rdx, 2
  66.     syscall
  67.  
  68.     ;  A+B-C
  69.     mov al, [num1]      
  70.     sub al, '0'         ;  ASCII -> number
  71.     mov bl, [num2]      
  72.     sub bl, '0'         ; ASCII -> number
  73.     add al, bl          ; A + B
  74.     mov bl, [num3]      ; Get third digit
  75.     sub bl, '0'         ; ASCII -> number
  76.     sub al, bl          ; (A + B) - C
  77.     add al, '0'         ; back to ASCII
  78.  
  79.     ; Store result
  80.     mov [result], al
  81.  
  82.     ; Print result message
  83.     mov rax, 1
  84.     mov rdi, 1
  85.     mov rsi, result_msg
  86.     mov rdx, result_msg_len
  87.     syscall
  88.  
  89.     ; Print result
  90.     mov rax, 1
  91.     mov rdi, 1
  92.     mov rsi, result
  93.     mov rdx, 1
  94.     syscall
  95.  
  96.     ; Print newline
  97.     mov rax, 1
  98.     mov rdi, 1
  99.     mov rsi, newline
  100.     mov rdx, 1
  101.     syscall
  102.  
  103.     ; Exit program
  104.     mov rax, 60         ; sys_exit
  105.     mov rdi, 0          ; exit code 0
  106.     syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement