Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _EXIT=1
- _PRINTF=127
- _PUTCHAR=122
- .SECT .TEXT
- start:
- CALL com1
- CALL com2
- PUSH 0
- PUSH _EXIT
- SYS
- com1:
- PUSH BP
- MOV BP,SP
- MOV CX,due-uno ! calcola la lunghezza in CX
- MOV DI,0
- 1: MOVB DL,uno(DI)
- NOTB DL ! inverte bit a bit DL
- MOVB tre(DI),DL
- INC DI
- LOOP 1b
- CALL print
- MOV SP,BP
- POP BP
- RET 0
- com2:
- PUSH BP
- MOV BP,SP
- MOV CX,tre-due
- MOV DI,0
- 1: MOVB DL,due(DI)
- XORB DL,1 ! inverte il bit finale
- MOVB tre(DI),DL
- INC DI
- LOOP 1b
- CALL print
- MOV SP,BP
- POP BP
- RET 0
- print:
- PUSH CX
- PUSH SI
- PUSH BP
- MOV BP,SP
- PUSH 0 ! valore segnaposto, viene rimpiazzato nel loop
- PUSH fmt
- PUSH _PRINTF
- MOV CX,8 ! yeah hard-coded
- MOV SI,0
- 1: MOVB AL,tre(SI)
- MOVB -2(BP),AL
- SYS
- INC SI
- LOOP 1b
- PUSH '\n'
- PUSH _PUTCHAR
- SYS
- MOV SP,BP
- POP BP
- POP SI
- POP CX
- RET
- .SECT .DATA
- uno: .BYTE 0xff, 0x0, 0xf, 0x0f, 0xaa, 0x1, 0x1, 0x0
- due: .BYTE 0, 1, 0, 1, 0, 1, 1, 0
- tre: .SPACE 32
- fmt: .ASCIZ "%x "
Advertisement
Add Comment
Please, Sign In to add comment