Néhány ZH Feladat Leírása És Megoldása II.




  1. Statisztika készítése egy N karakterből álló sztringről, közeli hívású eljárás formájában.

    Input: S egy N db. karaktert tartalmazó sztring; T egy 256 szóból álló vektor; N pozitív egész változó. Az eljárás S és T távoli címét, valamint N értékét a vermen keresztül kapja:

    
                     mov         ax,seg S
                     push        ax
                     mov         ax,offset S
                     push        ax
                     mov         ax,seg T
                     push        ax
                     mov         ax,offset T
                     push        ax
                     mov         ax,[N]
                     push        ax
                     call        STATISZTIKA
         

    Output: T vektor 0. szava azt tartalmazza, hogy S-ben hány db. 00h kódú bájt van. Hasonlóan T 1. szava jelzi azt, hogy S-ben hány db. 01h kódú karakter található, stb. ... (T nincsen inicializálva 0-val, ezt meg kell tenni! E mellett a vermet visszatérés előtt ki kell takarítani!)

    
         STATISZTIKA proc        near
                     push        bp
                     mov         bp,sp
                     push        bx cx si di ds es
                     pushf
                     lds         si,[bp+10]
                     les         di,[bp+6]
                     push        di
                     mov         cx,256
                     xor         bx,bx
         @TOROL:
                     mov         word ptr es:[di],bx
                     add         di,2
                     loop        @TOROL
                     pop         di
                     mov         cx,[bp+4]
         @CIKLUS:
                     mov         bl,[si]
                     xor         bh,bh
                     shl         bx,1
                     inc         word ptr es:[di+bx]
                     inc         si
                     loop        @CIKLUS
                     popf
                     pop         es ds di si cx bx
                     pop         bp
                     ret         10
         STATISZTIKA endp
         
  2. Közeli hívású eljárás írása M^N értékének kiszámítására ("^" itt a hatványozást jelenti).

    Input: M a hatványalapot tartalmazó előjeles, szó méretű egész változó; N a kitevőt megadó nemnegatív, szó méretű egész változó. Tegyük fel, hogy M^(N-1) még elfér 16 biten! Az eljárás M és N értékét a vermen keresztül kapja meg:

    
                     sub         sp,4
                     mov         ax,[M]
                     push        ax
                     mov         ax,[N]
                     push        ax
                     call        HATVANY
         

    Output: A 32 bites hatvány értékét a hívó által lefoglalt duplaszó területén kell elhelyezni a verembe. (0^0=1! A vermet visszatérés előtt ki kell takarítani!)

    
         HATVANY     proc        near
                     push        bp
                     mov         bp,sp
                     push        ax bx cx dx
                     pushf
                     mov         dx,0
                     mov         ax,1
                     mov         cx,[bp+4]
                     jcxz        @VEGE
                     mov         ax,[bp+6]
                     cwd
                     dec         cx
                     jcxz        @VEGE
                     mov         bx,ax
         @CIKLUS:
                     imul        bx
                     loop        @CIKLUS
         @VEGE:
                     mov         [bp+8],ax
                     mov         [bp+10],dx
                     popf
                     pop         dx cx bx ax
                     pop         bp
                     ret         4
         HATVANY     endp
         
  3. N! értékének kiszámítása közeli hívású rekurzív eljárás segítségével.

    Input: N nemnegatív egész vátozó. Tegyük fel, hogy (N-1)! még elfér 16 biten! Az eljárás N értékét a vermen keresztül kapja meg:

    
                     mov         ax,[N]
                     push        ax
                     call        FAKT
         

    Output: DX:AX tartalmazza N! értékét. (0!=1 !)

    
         FAKT        proc        near
                     push        bp
                     mov         bp,sp
                     pushf
                     mov         ax,1
                     mov         dx,0
                     cmp         word ptr [bp+4],0000h
                     je          @VEGE
                     mov         ax,[bp+4]
                     dec         ax
                     push        ax
                     call        FAKT
                     mul         word ptr [bp+4]
         @VEGE:
                     popf
                     pop         bp
                     ret         2
         FAKT        endp
         

Módosítva: 2003. október 22.