Advertisement
dllbridge

Z80 foo + FASM

Jul 25th, 2023 (edited)
2,081
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Моргает светодиодами 6 раз
  2. ; 30 June 2024
  3. ;**************************** ******************
  4. .org  5h
  5.  
  6.        ld   A, 7
  7.        ld (0053h), A
  8.        ld  BC, (0053h)
  9. L_01:  
  10.        dec A
  11.        OUT (C), A
  12.        cp  0
  13.        jp  NZ, L_01
  14.  
  15.  
  16.  
  17. ; Пример вызова функции, которая суммирует 2 аргумента
  18. ; 12 December 2023
  19. ;**************************** The main program.
  20.  
  21. .org    4h
  22.  
  23.      LD    H, 5    
  24.      LD    L, 2
  25.      LD   SP, 00ffh
  26.      push HL
  27.      LD   HL, 65535  
  28.      call foo
  29.  
  30.      xor  A
  31.      inc  B
  32.      dec  c
  33.  
  34. .end    
  35.  
  36.  
  37.  
  38. ;- - - - - - - - - - - - - -  int add(int, int);
  39. .org  50h
  40. foo: pop  DE
  41.      pop  BC
  42.      LD   A, C
  43.      ADD  A, B
  44.      push DE
  45.      ret
  46. .end
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55. format  PE console
  56. entry   start
  57. include 'win32ax.inc'
  58. include 'api\kernel32.inc'
  59.  
  60.  
  61.  
  62. ;------------------------------------------------             Создание переменных:
  63. section '.data' data readable writeable
  64.  
  65.  
  66.            n     dd  99  ; Переменная n (4 байта)
  67.  
  68.     sz_Hello     db  'Hello world ! n = %d', 10, 10, 0
  69. ;------------------------------------------------                   Код программы:
  70. section '.code' code readable executable
  71.  
  72.  
  73.  
  74.  start:    mov eax, 0 ;  65536
  75.  
  76.            mov  ax, 21
  77.            mov  bx, 36
  78.            push ax
  79.            push bx
  80.            call foo_1
  81.  
  82.  L_03 :    cinvoke  printf, <"eax = %3d ", 10, 0>, eax
  83.  
  84.  L_04 :    cinvoke  scanf, <"%d", 10, 0>, n
  85.            invoke   ExitProcess, 0
  86.  
  87.  
  88.  
  89. ;------------------------------------------------           Подключение библиотек:
  90. section '.idata' import data readable
  91. library kernel32, 'kernel32.dll',\
  92.         msvcrt,   'msvcrt.dll'
  93.  
  94. import msvcrt,\
  95.        printf, 'printf',\
  96.        scanf,  'scanf'
  97.  
  98.  
  99. ;/////////////////////////////////////////////////
  100. foo_1: pop  ecx
  101.        pop   ax
  102.        pop   bx
  103.        add   ax, bx
  104.        push ecx
  105.        ret
  106.  
  107.  
  108.  
  109.  
  110.              
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121. ; Старая версия (устаревшая
  122. ;****************************   ****************************   ****************************
  123. .org    4h
  124.  
  125.      LD  C, 5
  126.      LD  B, 2
  127.      
  128.  
  129.      LD   SP, 0099h
  130.      push BC
  131.      LD   BC, 0
  132.      call L_2
  133.  
  134.  
  135.      LD  (00A7h), A
  136.      LD  bc,(00A7h)
  137.    
  138. L_1: OUT (C), A
  139.      inc A
  140.      cp  33h          ;  = 51
  141.      JP  NZ, L_1
  142.      LD  A, C
  143.      LD (0001h), A
  144.  
  145.  
  146.  
  147. ;**************************** procedure
  148. .org  50h
  149. L_2: pop  DE
  150.      pop  BC
  151.      LD   A, C
  152.      ADD  A, B
  153.      push DE
  154.      ret
  155.  
  156. .end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement