Różne programy na zajęcia laboratoryjne z AK2
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

hex.s 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # Jan Potocki 2020
  2. # Definicje numerow funkcji systemowych i ich parametrow
  3. SYSEXIT64 = 60
  4. SYSREAD = 0
  5. SYSWRITE = 1
  6. STDIN = 0
  7. STDOUT = 1
  8. .global _start
  9. # Segment niezainicjalizowanych danych
  10. .bss
  11. bajt: .space 1 # Bufor na dane wejsciowe (1 bajt)
  12. tekst: .space 3 # Bufor na dane wyjsciowe (3 bajty)
  13. # Segment kodu
  14. .text
  15. _start:
  16. mov $tekst, %r8 # r8 - adres bufora wyjsciowego
  17. movb $' ', 2(%r8) # Wpisanie spacji do bufora wyjsciowego
  18. # Glowna petla
  19. petla:
  20. mov $SYSREAD, %rax # Wczytanie danych ze standardowego wejscia
  21. mov $STDIN, %rdi # ...funkcja systemowa read
  22. mov $bajt, %rsi
  23. mov $1, %rdx
  24. syscall
  25. cmp $0, %rax # rax - liczba wczytanych bajtow (zwrocona)
  26. je koniec # Jezeli 0, to skonczyly sie dane
  27. movb bajt, %al # W al zajmiemy sie mlodszymi bitami
  28. mov %al, %bl # W bl zajmiemy sie starszymi bitami
  29. shr $4, %al # Wyizolowanie 4 starszych bitow
  30. cmp $10, %al
  31. jl znakA1 # Cyfry 0-9
  32. jmp znakA2 # Cyfry A-F
  33. mlodsze:
  34. and $0x0F, %bl # Wyizolowanie 4 mlodszych bitow
  35. cmp $10, %bl
  36. jl znakB1 # Cyfry 0-9
  37. jmp znakB2 # Cyfry A-F
  38. zapis:
  39. movb %al, 0(%r8) # Zapis rezultatow w buforze wyjsciowym
  40. movb %bl, 1(%r8)
  41. mov $SYSWRITE, %rax # Wypisanie wyniku na standardowe wyjscie
  42. mov $STDOUT, %rdi # ...funkcja systemowa write
  43. mov $tekst, %rsi
  44. mov $3, %rdx
  45. syscall
  46. jmp petla # Koniec glownej petli
  47. # Wyjscie z programu
  48. koniec:
  49. mov $SYSEXIT64, %rax
  50. mov $0, %rdi
  51. syscall
  52. # Konwersja na ASCII
  53. znakA1:
  54. add $48, %al # 48 -> kod ASCII zera
  55. jmp mlodsze
  56. znakA2:
  57. add $55, %al # 55+10=65 -> kod ASCII litery A
  58. jmp mlodsze
  59. znakB1:
  60. add $48, %bl # 48 -> kod ASCII zera
  61. jmp zapis
  62. znakB2:
  63. add $55, %bl # 55+10=65 -> kod ASCII litery A
  64. jmp zapis