Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 100h
- jmp main
- toSwap1 db 'a'
- toSwap2 db 'b'
- result dw ?
- numToNeg dw -9
- string db 'm', 'a', 'g', 's', 'h', 'i', 'm', 'i', 'm', 'v', 'e', 'n', 'e', 'h', 'e', 'n', 'i', 'm' ,0Dh,0Ah,'$'
- array db "0000", 0Dh,0Ah, 24h ; line feed return and stop symbol 24h=$ (ASCII).
- num1 dw 0xAC45
- main:
- COMMENT @
- PRINTN "2's complement of: -9"
- PRINTN "is: "
- push numToNeg
- call opposite
- call print_num
- PRINTN
- PRINTN "values before swap:"
- PRINTN "toSwap1 - a"
- PRINTN "toSwap2 - b"
- lea AX, toSwap1
- lea BX, toSwap2
- push AX
- push BX
- call swap
- ;PRINTN "values after swap:"
- ;PRINTN "toSwap1 - "
- mov AL, toSwap1
- call print_al_chr
- PRINTN
- PRINTN "toSwap2 - "
- mov AL, toSwap2
- call print_al_chr
- PRINTN
- push num1
- lea AX, array
- push AX
- call hex_to_string
- call print_ax_str
- mov AX, offset string
- push AX
- call bubble_sort
- @
- push numToNeg
- call opposite
- call print_num
- PRINTN
- lea AX, toSwap1
- lea BX, toSwap2
- push AX
- push BX
- call swap
- PRINTN
- lea AX, string
- call print_ax_str
- push AX
- call bubble_sort
- lea AX, string
- call print_ax_str
- PRINTN
- push num1
- lea AX, array
- push AX
- call hex_to_string
- call print_ax_str
- ret
- include magshimim.inc
- PROC opposite
- param1a equ 4
- push BP
- mov BP, SP
- mov AX, [BP + param1a]
- not AX
- add AX, 1
- pop BP
- retn 2
- ENDP opposite
- PROC swap
- param1b equ 10
- param2b equ 12
- localvar1b equ -2
- localvar2b equ -4
- push BP
- push AX
- push BX
- push DI
- mov BP, SP
- sub SP, 4
- mov BX, [BP + param1b]
- mov [BP + localvar1b], BX
- mov DI, [BP + param2b]
- mov [BP + localvar2b], DI
- mov AL, [BX]
- mov AH, [DI]
- xchg AL, [DI]
- xchg AH, [BX]
- mov SP, BP
- pop DI
- pop BX
- pop AX
- pop BP
- retn 4
- ENDP opposite
- PROC hex_to_string
- param1c equ 16
- param2c equ 14
- localvar1c equ -2
- localvar2c equ -4
- push BP
- push AX
- push BX
- push CX
- push DI
- push SI
- mov BP, SP
- sub SP, 4
- mov SI, [BP + param1c]
- mov [BP + localvar1c], SI
- mov DI, [BP + param2c]
- mov [BP + localvar2c], DI
- mov CX, 4
- get_char:
- mov AL, 0
- SHL SI, 1
- jnc step1
- add AL, 8
- step1:
- SHL SI, 1
- jnc step2
- add AL, 4
- step2:
- SHL SI, 1
- jnc step3
- add AL, 2
- step3:
- SHL SI, 1
- jnc step4
- add AL, 1
- step4:
- cmp AL, 10
- jl lesser
- add AL, 55
- jmp set_char
- lesser:
- add AL, 48
- jmp set_char
- set_char:
- mov BX, CX
- mov [DI], AL
- add DI, 1
- loop get_char
- mov SP, BP
- pop SI
- pop DI
- pop CX
- pop BX
- pop AX
- pop BP
- retn 4
- ENDP hex_to_string
- PROC bubble_sort
- param1d equ 16
- localvar1d equ -2
- push BP
- push AX
- push BX
- push CX
- push DX
- push SI
- push DI
- mov BP, SP
- sub SP, 2
- mov DI, [BP + param1d]
- mov [BP + localvar1d], DI
- mov SI, DI
- mov CL, 0
- getlength:
- add DI, 1
- add CL, 1
- cmp [DI], 24h
- jne getlength
- sub CL, 3; length - 1
- ;We'll use AL and AH for iterating
- ;over the loops
- mov AH, 0
- outerloop:
- mov AL, 0
- sub CL, AH
- innerloop:
- push AX
- mov AH, 0
- mov BX, SI
- add BX, AX; adding AL since AH is 0
- add BX, 1
- mov DL, [BX]
- mov DI, SI
- add DI, AX; adding AL since AH is 0
- mov DH, [DI]
- cmp DH, DL
- jl skip
- push DI
- push BX
- call swap
- skip:
- pop AX
- add AL, 1
- cmp AL, CL
- jl innerloop
- add CL, AH
- add AH, 1
- cmp AH, CL
- jl outerloop
- mov SP, BP
- pop SI
- pop DI
- pop DX
- pop CX
- pop BX
- pop AX
- pop BP
- retn 2
- ENDP bubble_sort
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement