Advertisement
Oliver_Palencar

leaky z pisomkiek

Jun 9th, 2024 (edited)
655
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MIX Assembler 4.97 KB | Source Code | 0 0
  1. V pamäti programu od adresy CISLO je uložených 8 celých kladných čísel (8-bitových). Nájdite najmen3ie z nich a uložte ho do pamäte dát na adresu MIN v pamati dat.
  2.  
  3. prog    SEGMENT CODE
  4. udaj    SEGMENT DATA
  5.  
  6. RSEG udaj
  7. MIN:    DS 1
  8.  
  9. RSEG prog
  10. Cislo:  DB 5,10,4,6,7,12,14,26,3,9
  11.  
  12. CSEG AT 0
  13.  
  14. start:
  15.         MOV DPTR, #Cislo
  16.         MOV R2, #9
  17.         MOVC A, @A+DPTR
  18.         MOV 60H, A
  19.         INC DPTR
  20.  
  21. zac:
  22.         MOVC A, @A+DPTR
  23.         MOV B, 60H
  24.         CJNE A, B, porov
  25.         DJNZ R2, zac
  26.  
  27. porov:
  28.         JNC pokracuj
  29.         MOV 60H, A
  30.  
  31. pokracuj:
  32.         INC DPTR
  33.         CLR A
  34.         DJNZ R2, zac
  35.  
  36. koniec:
  37.         MOV A, 60H
  38.         MOV MIN, A
  39.  
  40.         END
  41.  
  42.  
  43.  
  44.  
  45.  
  46. V kodovom segmente 700h uložena tabuľka hodnot ukončená 0. A musel som spočítať koľko z nich deliteľné na 5 a uložiť vysledok na nepriamo adresovateľnu pamäť 95h.
  47.  
  48.     CSEG at 700h
  49. tab:    DB 4,6,7,55,9,47,100,88,44,13,27,0
  50.         CSEG at 0h
  51. start:  MOV dptr,#tab
  52. dalsi:  MOVC A,@A+dptr
  53.         JZ konec
  54.         MOV B,#5
  55.         div AB
  56.         MOV A,B
  57.         JNZ nie
  58.         inc 40h
  59.         MOV R0,#95h
  60.         MOV A,40h
  61.         MOV @R0, A    
  62. nie:    inc dptr
  63.         clr A
  64.         jmp dalsi
  65. konec:  nop
  66. end
  67.  
  68.  
  69. -------------------------------------------------------------------------------------------------------------------------------
  70.  
  71. Analyza programu
  72.  
  73. udaj    SEGMENT DATA
  74.         RSEG udaj
  75. vysl:   DS 2
  76.         CSEG at 0
  77. start:  MOV R5,#1Ch
  78.         MOV R0,#90h
  79.         MOV @R0,#10h
  80.         inc R0
  81.         MOV @R0,#22h
  82.         dec R0
  83.         MOV A,@R0
  84.         SUBB A,R5
  85.         MOV vysl,A
  86.         inc R0
  87.         MOV A,@R0
  88.         SUBB A,#0
  89.         MOV vysl+1,A
  90. end
  91.  
  92. 1.
  93. Čo je uložené v r0 bezprostredne pred vykonaním inštrukcie na riadku 7 a čo po jej vykonaní?
  94.  
  95. Pred vykonaním inštrukcie na riadku 7 je v r0 hodnota 90H. Po vykonaní inštrukcie inc r0 bude v r0 hodnota 91H.
  96. -------------------------------------------------------------------------------------------------------------------
  97. 2.
  98. Aká hodnota bude v r0 po vykonaní inštrukcie na riadku 8?
  99.  
  100. Po vykonaní inštrukcie na riadku 8 (mov @r0,#22H) sa hodnota v r0 nezmení a ostane 91H.
  101. -------------------------------------------------------------------------------------------------------------------
  102. 3.
  103. Kam (kde v pamäti) sa uloží číslo 22H? Jednoznačne.
  104.  
  105. Číslo 22H sa uloží na pamäťovú adresu 91H.
  106. -------------------------------------------------------------------------------------------------------------------
  107. 4.
  108. Aká hodnota je v akumulátore po vykonaní inštrukcie na riadku 11?
  109.  
  110. Po vykonaní inštrukcie na riadku 11 (mov a,@r0) bude hodnota v akumulátore 22H.
  111. -------------------------------------------------------------------------------------------------------------------
  112. 5.
  113. Aký výpočet uskutoční inštrukcia na riadku 12?
  114.  
  115. Inštrukcia na riadku 12 (subb a,r5) uskutoční odčítanie a = a - r5. Po vykonaní tejto inštrukcie bude v akumulátore hodnota 22H - 1CH = 06H.
  116. -------------------------------------------------------------------------------------------------------------------
  117. 6.
  118. Čo je obsahom akumulátora po vykonaní inštrukcie na riadku 15?
  119.  
  120. Po vykonaní inštrukcie na riadku 15 (mov a,@r0) bude v akumulátore hodnota, ktorá sa nachádza na adrese 91H, čo je 22H.
  121. -------------------------------------------------------------------------------------------------------------------
  122. 7.
  123. Čo je obsahom akumulátora po vykonaní inštrukcie na riadku 16? Vysvetlite príp. zapíšte matematicky alebo slovne.
  124.  
  125. Inštrukcia na riadku 16 (subb a,#0) odčíta nulu od hodnoty v akumulátore. Takže hodnota akumulátora zostane 22H.
  126. -------------------------------------------------------------------------------------------------------------------
  127. 8.
  128. Koľkokrát sa vykoná daný program? Vysvetlite.
  129.  
  130. Program sa vykoná len raz. Každá inštrukcia je vykonaná v poradí od riadku 5 po riadok 17 a potom program skončí.
  131. -------------------------------------------------------------------------------------------------------------------
  132. 9.
  133. Skúste čo najpresnejšie vysvetliť, čo daný program vykoná.
  134.  
  135. Program inicializuje niekoľko registrov a pamäťových miest, vykoná niekoľko operácií presúvania a odčítania hodnôt, a výsledné hodnoty uloží do pamäte. Špecifické kroky sú:
  136. Inicializuje register r5 hodnotou 1CH a register r0 hodnotou 90H.
  137. Uloží hodnotu 10H do pamäťovej adresy 90H.
  138. Zvýši r0 na 91H a uloží hodnotu 22H do pamäťovej adresy 91H.
  139. Zníži r0 späť na 90H.
  140. Presunie obsah pamäte na adrese 90H do akumulátora (a = 10H).
  141. Odčíta hodnotu r5 (1CH) od akumulátora (a = 10H - 1CH = F4H).
  142. Uloží hodnotu akumulátora (F4H) do pamäťového miesta vysl.
  143. Zvýši r0 na 91H a znova presunie obsah pamäte na adrese 91H do akumulátora (a = 22H).
  144. Odčíta nulu od akumulátora (a zostane 22H).
  145. Uloží výslednú hodnotu akumulátora (22H) do pamäťového miesta vysl+1.
  146. Celkový výsledok operácií je uložený v pamäťových miestach vysl a vysl+1.
  147.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement