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, -, -
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