Λύση 2ου θέματος

 1:   unit, sub, -, -
 2:   *, x, p, $1
 3:   >, $1, y, 5
 4:   jump, -, -, 7 
 5:   :=, x, -, 9
 6:   jump, -, -, 8
 7:   :=, z, -, 9
 8:   endu, sub, -, -
 9:   unit, main, -, -
10:   +, x, y, $2
11:   par, $2, V, -
12:   par, z, R, -
13:   call, sub, -, -
14:   endu, main, -, -

egraf.gif (5838 bytes)

xseg    segment public code
        assume cs:xseg, ds:xseg, ss:xseg
        org 100h

main    proc	near
        call	near ptr _main_1
        mov	ax, 4C00h
        int	21h
main    endp
@1:		; (unit, sub, -, -)
_sub_2  proc	near
        push	bp
        mov	bp, sp
        sub	sp, 4
@2:		; (*, x, p, $1)
        mov	ax, word ptr [bp-2]
        mov	cx, word ptr [bp+10]
        imul	cx
        mov	word ptr [bp-4], ax
@3:		; (>, $1, y, 5)
        mov	ax, word ptr [bp-4]
        mov	si, word ptr [bp+4]
        mov	dx, word ptr [si-4]
        cmp	ax, dx
        jg	@5

@4:		; (jump, -, -, 7)
        jmp	@7
@5:		; (:=, x, -, 9)
        mov	ax, word ptr [bp-2]
        mov	si, word ptr [bp+8]
        mov	word ptr [si], ax
@6:		; (jump, -, -, 8)
        jmp	@8
@7:		; (:=, z, -, 9)
        mov	si, word ptr [bp+4]
        mov	ax, word ptr [si-6]
        mov	si, word ptr [bp+8]
        mov	word ptr [si], ax
@8:		; (endu, sub, -, -)
@sub_2: mov	sp, bp
        pop	bp
        ret
_sub_2  endp
@9:		; (unit, main, -, -)
_main_1 proc	near
        push	bp
        mov	bp, sp
        sub	sp, 8
@10:		; (+, x, y, $2)
        mov	ax, word ptr [bp-2]
        mov	dx, word ptr [bp-4]
        add	ax, dx
        mov	word ptr [bp-8], ax
@11:		; (par, $2, V, -)
        mov	ax, word ptr [bp-8]
        push	ax
@12:		; (par, z, R, -)
        lea	si, word ptr [bp-6]
        push	si
@13:		; (call, sub, -, -)
        sub	sp, 2
        push	bp
        call	near ptr _sub_2
        add	sp, 8
@14:		; (endu, main, -, -)
@main_1:mov	sp, bp
        pop	bp
        ret
_main_1 endp

xseg    ends
        end	main
  

Επιστροφή στις εκφωνήσεις