;kód szegmens kod segment para public 'code' assume cs:kod,ds:adat,ss:verem,es:nothing start: push ds ;visszatérés segmensének mentése xor ax, ax ;offset mindig 0 push ax ;visszatérés offsetjének mentése mov ax, adat ;mert nincsen 'mov ds, adat' mov ds, ax ;főprogram kezdődik push offset tomb1 push offset tomb2 push 4 call skalar add sp, 6 ;főprogram vége vege: retf ;visszatérés a hívó programhoz skalar proc push bp ;bp mentése mov bp, sp ;bp = si push cx ;használt regiszterek mentése push si push di push cx push bx push dx xor dx, dx ;részeredményeket dx ben gyüjtjük mov cx, [bp+4] cmp cx, 0 ;jcxz skalvege is eleg lenne je skalvege ;ez a két utasítás helyett mov si, [bp+6] mov di, [bp+8] xor bx, bx ;tömbindex ism: mov al, [si + bx] mul byte ptr [di + bx] add dx, ax inc bx loop ism ;dec cx; cmp cx, 0; jne ism mov ax, dx ;végeredmény ax-be skalvege: pop dx ;mentések visszatöltése pop bx pop cx pop di pop si pop cx pop bp ret skalar endp kod ends ;adat szegmens adat segment para public 'data' tomb1 db 3, 2, 5, 2, 0, 7, 4 tomb2 db 1, 5, 1, 2, 4, 1, 3 tomb3 db 2, 1, 3, 2, 1, 2, 4 adat ends ;verem szegmens verem segment para stack dw 64 dup (0) ;helyfoglalás verem ends end start