tyrion

esercizio.s

Jul 1st, 2012
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. _EXIT=1
  2. _PRINTF=127
  3. _PUTCHAR=122
  4. .SECT .TEXT
  5. start:
  6.  
  7.     CALL com1
  8.     CALL com2
  9.     PUSH 0
  10.     PUSH _EXIT
  11.     SYS
  12.  
  13. com1:
  14.     PUSH BP
  15.     MOV BP,SP
  16.  
  17.     MOV CX,due-uno ! calcola la lunghezza in CX
  18.     MOV DI,0
  19. 1:  MOVB DL,uno(DI)
  20.     NOTB DL ! inverte bit a bit DL
  21.     MOVB tre(DI),DL
  22.     INC DI
  23.     LOOP 1b
  24.  
  25.     CALL print
  26.  
  27.     MOV SP,BP
  28.     POP BP
  29.     RET 0
  30.  
  31. com2:
  32.     PUSH BP
  33.     MOV BP,SP
  34.  
  35.     MOV CX,tre-due
  36.     MOV DI,0
  37. 1:  MOVB DL,due(DI)
  38.     XORB DL,1 ! inverte il bit finale
  39.     MOVB tre(DI),DL
  40.     INC DI
  41.     LOOP 1b
  42.  
  43.     CALL print
  44.  
  45.     MOV SP,BP
  46.     POP BP
  47.     RET 0
  48.  
  49. print:
  50.     PUSH CX
  51.     PUSH SI
  52.     PUSH BP
  53.     MOV BP,SP
  54.  
  55.     PUSH 0   ! valore segnaposto, viene rimpiazzato nel loop
  56.     PUSH fmt
  57.     PUSH _PRINTF
  58.  
  59.     MOV CX,8 ! yeah hard-coded
  60.     MOV SI,0
  61. 1:  MOVB AL,tre(SI)
  62.     MOVB -2(BP),AL
  63.     SYS
  64.     INC SI
  65.     LOOP 1b
  66.  
  67.     PUSH '\n'
  68.     PUSH _PUTCHAR
  69.     SYS
  70.  
  71.     MOV SP,BP
  72.     POP BP
  73.     POP SI
  74.     POP CX
  75.     RET
  76.  
  77. .SECT .DATA
  78. uno: .BYTE 0xff, 0x0, 0xf, 0x0f, 0xaa, 0x1, 0x1, 0x0
  79. due: .BYTE 0, 1, 0, 1, 0, 1, 1, 0
  80. tre: .SPACE 32
  81. fmt: .ASCIZ "%x "
Advertisement
Add Comment
Please, Sign In to add comment