tyrion

homework.s

Jun 7th, 2012
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     _EXIT = 1
  2. .SECT .TEXT
  3. start:
  4.     PUSH b
  5.     PUSH a
  6.     CALL con ! Z
  7.  
  8.     PUSH c
  9.     PUSH a
  10.     CALL con ! Z
  11.  
  12.     PUSH d
  13.     PUSH a
  14.     CALL con ! Z
  15.  
  16.     PUSH e
  17.     PUSH a
  18.     CALL con ! NZ
  19.  
  20.     PUSH f
  21.     PUSH a
  22.     CALL con ! NZ
  23.  
  24.     PUSH 0
  25.     PUSH _EXIT
  26.     SYS
  27.  
  28. dim:
  29.     PUSH CX
  30.     PUSH DI
  31.     PUSH BP
  32.     MOV BP,SP
  33.  
  34.     MOV AX,'.'
  35.     MOV CX,-1
  36.     MOV DI,8(BP) !; il primo argomento
  37.  
  38.     REPNZ SCASB
  39.     NEG CX
  40.     DEC CX
  41.     MOV AX,CX
  42.  
  43.     MOV SP,BP
  44.     POP BP
  45.     POP DI
  46.     POP CX
  47.  
  48.     RET 2
  49.  
  50. equ: ! equ(alfa, beta)
  51.     PUSH CX
  52.     PUSH SI
  53.     PUSH DI
  54.     PUSH BP
  55.     MOV BP,SP
  56.  
  57.     PUSH 10(BP)
  58.     CALL dim
  59.  
  60.     MOV CX,AX
  61.     MOV DI,10(BP)
  62.     MOV SI,12(BP)
  63.     REPZ CMPSB
  64.     MOV AX,CX
  65.     INC AX
  66.  
  67.     MOV SP,BP
  68.     POP BP
  69.     POP DI
  70.     POP SI
  71.     POP CX
  72.     RET 4
  73.  
  74. con: ! con(alfa, gamma)
  75.     PUSH CX
  76.     PUSH BX
  77.     PUSH SI
  78.     PUSH DI
  79.     PUSH BP
  80.     MOV BP,SP
  81.  
  82.     PUSH 12(BP)
  83.     CALL dim !; ottieni la lunghezza di alfa
  84.     MOV CX,AX
  85.     DEC CX !; in modo che scasb non consumi il punto finale
  86.  
  87.     MOV BX,14(BP)
  88.     MOVB AL,(BX) !; metti in ax il primo byte di gamma
  89.     MOV DI,12(BP)
  90.     REPNZ SCASB !; verifica se il primo carattere di gamma e' in alfa
  91.  
  92.     INC BX !; BX ora punta al secondo carattere di gamma
  93.     PUSH BX
  94.     CALL dim !; ottieni la lunghezza di gamma
  95.     MOV CX,AX
  96.     DEC CX !; fa finire la CMPSB prima del punto finale di gamma
  97.  
  98.     MOV SI,BX
  99.     REPZ CMPSB
  100.  
  101.     MOV SP,BP
  102.     POP BP
  103.     POP DI
  104.     POP SI
  105.     POP BX
  106.     POP CX
  107.     RET 4
  108. .SECT .DATA
  109. hw:
  110. .ASCIZ "L" !; cosi alfa non e' zero, easier to debug
  111. a: .ASCII "sciao belu."
  112. b: .ASCII "bel."
  113. c: .ASCII "ao ."
  114. d: .ASCII "u."
  115. e: .ASCII "ao :("
  116. f: .ASCII "zciao"
Advertisement
Add Comment
Please, Sign In to add comment