Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _EXIT = 1
- .SECT .TEXT
- start:
- PUSH b
- PUSH a
- CALL con ! Z
- PUSH c
- PUSH a
- CALL con ! Z
- PUSH d
- PUSH a
- CALL con ! Z
- PUSH e
- PUSH a
- CALL con ! NZ
- PUSH f
- PUSH a
- CALL con ! NZ
- PUSH 0
- PUSH _EXIT
- SYS
- dim:
- PUSH CX
- PUSH DI
- PUSH BP
- MOV BP,SP
- MOV AX,'.'
- MOV CX,-1
- MOV DI,8(BP) !; il primo argomento
- REPNZ SCASB
- NEG CX
- DEC CX
- MOV AX,CX
- MOV SP,BP
- POP BP
- POP DI
- POP CX
- RET 2
- equ: ! equ(alfa, beta)
- PUSH CX
- PUSH SI
- PUSH DI
- PUSH BP
- MOV BP,SP
- PUSH 10(BP)
- CALL dim
- MOV CX,AX
- MOV DI,10(BP)
- MOV SI,12(BP)
- REPZ CMPSB
- MOV AX,CX
- INC AX
- MOV SP,BP
- POP BP
- POP DI
- POP SI
- POP CX
- RET 4
- con: ! con(alfa, gamma)
- PUSH CX
- PUSH BX
- PUSH SI
- PUSH DI
- PUSH BP
- MOV BP,SP
- PUSH 12(BP)
- CALL dim !; ottieni la lunghezza di alfa
- MOV CX,AX
- DEC CX !; in modo che scasb non consumi il punto finale
- MOV BX,14(BP)
- MOVB AL,(BX) !; metti in ax il primo byte di gamma
- MOV DI,12(BP)
- REPNZ SCASB !; verifica se il primo carattere di gamma e' in alfa
- INC BX !; BX ora punta al secondo carattere di gamma
- PUSH BX
- CALL dim !; ottieni la lunghezza di gamma
- MOV CX,AX
- DEC CX !; fa finire la CMPSB prima del punto finale di gamma
- MOV SI,BX
- REPZ CMPSB
- MOV SP,BP
- POP BP
- POP DI
- POP SI
- POP BX
- POP CX
- RET 4
- .SECT .DATA
- hw:
- .ASCIZ "L" !; cosi alfa non e' zero, easier to debug
- a: .ASCII "sciao belu."
- b: .ASCII "bel."
- c: .ASCII "ao ."
- d: .ASCII "u."
- e: .ASCII "ao :("
- f: .ASCII "zciao"
Advertisement
Add Comment
Please, Sign In to add comment