итягнути вміст В
& логічне і
В
...: ax, ax ; (ax) = 0 bx, bx ; (bx) = 0 si, si ; (si) = 0
mov al, a +1 ; (al) = (@ (a1) +1) si, ax ; (si) = (ax) di, di ; (di) = 0 di, si ; (di) = (si)
xor ax, ax ; (ax) = 0 di ; (di) t = (di) (t-1) -1
... proc bp ; ((sp): = (sp) -2) & ((@ ( ss) + (@ (sp))) = (bp)) bp, sp ; (bp) = (sp) ax ; ((sp): = (sp) -2) & ((@ (ss) + (@ ( sp))) = (ax)) ah, 0 ; (ah) = 0 al, 2 ; (al) = 2
int 10h ; (sp) t = (sp) (t-1) -2, (sp) = (Flags), (sp) t = (sp) (t-1) -2, (sp) = (ip), (ip) = (132)
pop ax ; ((ax) = (@ (ss) + (@ (sp)))) & ((sp): = (sp) +2) bp ; ((bp) = (@ (ss) + (@ (sp)))) & ((sp): = (sp) +2)
ret; RET
ClrScr endp
Верифікація
. Без розгалужень
mov ax, di S1 a1 [si], al S2 si S3
Іcпользуем метод зворотної хвилі:
В В В В
. З розгалуженням
cmp si, 0
je Konecal, bl
...
Konec: bx, bxbl, dlina_1
Для доказу того, що
(si> 0) (si = 0)
{if si = 0 then al = al-bl else bx = 0}
(bx = 0)
Необхідно довести три умови істинності:
1) без побічних ефектів (si> 0)
2) ((si> 0) (si = 0)) & (si> 0) {al = al-bl} (al = al-blbx = 0)
((si> 0) (si = 0)) & (si> 0) (al-bl = al-bl bx = 0) True
) ((si> 0) (si = 0)) & (si = 0) {bx = 0} (al = al-blbx = 0)
((si> 0) (si = 0)) & (si = 0) (al = al-bl0 = 0) <...