Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. org  100h
  2.  
  3. jmp main
  4.    
  5.     toSwap1     db 'a'
  6.     toSwap2     db 'b'
  7.     result      dw ?
  8.     numToNeg    dw -9
  9.     string      db  'm', 'a', 'g', 's', 'h', 'i', 'm', 'i', 'm', 'v', 'e', 'n', 'e', 'h', 'e', 'n', 'i', 'm' ,0Dh,0Ah,'$'
  10.     array       db "0000", 0Dh,0Ah, 24h ; line feed   return   and  stop symbol 24h=$ (ASCII).  
  11.     num1        dw 0xAC45
  12.  
  13.  
  14. main:
  15.     COMMENT @
  16.     PRINTN "2's complement of: -9"
  17.     PRINTN "is: "
  18.     push numToNeg
  19.     call opposite
  20.     call print_num
  21.     PRINTN
  22.    
  23.    
  24.     PRINTN "values before swap:"
  25.     PRINTN "toSwap1 - a"
  26.     PRINTN "toSwap2 - b"
  27.    
  28.     lea AX, toSwap1
  29.     lea BX, toSwap2
  30.     push AX
  31.     push BX
  32.     call swap
  33.     ;PRINTN "values after swap:"
  34.     ;PRINTN "toSwap1 - "
  35.     mov AL, toSwap1
  36.     call print_al_chr
  37.     PRINTN
  38.     PRINTN "toSwap2 - "
  39.     mov AL, toSwap2
  40.     call print_al_chr
  41.     PRINTN
  42.    
  43.     push num1
  44.     lea AX, array
  45.     push AX
  46.     call hex_to_string
  47.    
  48.     call print_ax_str
  49.    
  50.     mov AX, offset string
  51.     push AX
  52.     call bubble_sort
  53.     @
  54.    
  55.     push numToNeg
  56.     call opposite
  57.     call print_num
  58.     PRINTN
  59.    
  60.     lea AX, toSwap1
  61.     lea BX, toSwap2
  62.     push AX
  63.     push BX
  64.     call swap
  65.     PRINTN
  66.    
  67.     lea AX, string
  68.     call print_ax_str
  69.     push AX
  70.     call bubble_sort
  71.     lea AX, string
  72.     call print_ax_str
  73.     PRINTN
  74.    
  75.     push num1
  76.     lea AX, array
  77.     push AX
  78.     call hex_to_string
  79.     call print_ax_str
  80.    
  81.     ret  
  82.  
  83.  
  84. include magshimim.inc
  85.  
  86. PROC opposite
  87.     param1a equ 4
  88.    
  89.     push BP
  90.     mov BP, SP
  91.    
  92.     mov AX, [BP + param1a]
  93.     not AX
  94.     add AX, 1
  95.    
  96.     pop BP
  97.            
  98.     retn 2            
  99. ENDP opposite
  100.  
  101. PROC swap
  102.     param1b equ 10
  103.     param2b equ 12
  104.    
  105.     localvar1b equ -2
  106.     localvar2b equ -4
  107.    
  108.     push BP
  109.    
  110.     push AX
  111.     push BX
  112.     push DI
  113.    
  114.     mov BP, SP
  115.    
  116.     sub SP, 4
  117.    
  118.     mov BX, [BP + param1b]
  119.     mov [BP + localvar1b], BX
  120.    
  121.     mov DI, [BP + param2b]
  122.     mov [BP + localvar2b], DI
  123.    
  124.     mov AL, [BX]
  125.     mov AH, [DI]
  126.     xchg AL, [DI]
  127.     xchg AH, [BX]
  128.    
  129.     mov SP, BP
  130.     pop DI
  131.     pop BX
  132.     pop AX
  133.     pop BP
  134.    
  135.     retn 4
  136. ENDP opposite
  137.  
  138. PROC hex_to_string
  139.     param1c equ 16
  140.     param2c equ 14
  141.    
  142.     localvar1c equ -2
  143.     localvar2c equ -4
  144.    
  145.     push BP
  146.    
  147.     push AX
  148.     push BX
  149.     push CX
  150.     push DI
  151.     push SI
  152.    
  153.     mov BP, SP
  154.    
  155.     sub SP, 4
  156.    
  157.     mov SI, [BP + param1c]
  158.     mov [BP + localvar1c], SI
  159.    
  160.     mov DI, [BP + param2c]
  161.     mov [BP + localvar2c], DI
  162.    
  163.     mov CX, 4    
  164. get_char:
  165.     mov AL, 0
  166.     SHL SI, 1
  167.     jnc step1
  168.     add AL, 8
  169. step1:
  170.     SHL SI, 1
  171.     jnc step2
  172.     add AL, 4
  173. step2:
  174.     SHL SI, 1
  175.     jnc step3
  176.     add AL, 2
  177. step3:
  178.     SHL SI, 1
  179.     jnc step4
  180.     add AL, 1
  181. step4:
  182.     cmp AL, 10
  183.     jl lesser
  184.     add AL, 55
  185.     jmp set_char
  186. lesser:    
  187.     add AL, 48
  188.     jmp set_char
  189. set_char:
  190.     mov BX, CX
  191.     mov [DI], AL
  192.     add DI, 1
  193.    
  194.     loop get_char
  195.    
  196.     mov SP, BP
  197.     pop SI
  198.     pop DI
  199.     pop CX
  200.     pop BX
  201.     pop AX
  202.     pop BP      
  203.          
  204.     retn 4
  205. ENDP hex_to_string
  206.                  
  207. PROC bubble_sort
  208.     param1d equ 16
  209.    
  210.     localvar1d equ -2
  211.    
  212.     push BP
  213.    
  214.     push AX
  215.     push BX
  216.     push CX
  217.     push DX
  218.     push SI
  219.     push DI
  220.    
  221.     mov BP, SP
  222.     sub SP, 2
  223.    
  224.     mov DI, [BP + param1d]
  225.     mov [BP + localvar1d], DI
  226.    
  227.     mov SI, DI
  228.     mov CL, 0
  229. getlength:
  230.     add DI, 1
  231.     add CL, 1
  232.     cmp [DI], 24h
  233.     jne getlength
  234.    
  235.     sub CL, 3; length - 1
  236.    
  237.     ;We'll use AL and AH for iterating
  238.    ;over the loops
  239.    mov AH, 0
  240. outerloop:
  241.    mov AL, 0
  242.    sub CL, AH
  243. innerloop:
  244.    push AX
  245.    mov AH, 0
  246.    
  247.    mov BX, SI
  248.    add BX, AX; adding AL since AH is 0
  249.    add BX, 1
  250.    mov DL, [BX]
  251.    
  252.    mov DI, SI
  253.    add DI, AX; adding AL since AH is 0
  254.    mov DH, [DI]
  255.    
  256.    cmp DH, DL
  257.    jl skip
  258.    
  259.    push DI
  260.    push BX
  261.    call swap
  262.              
  263.    
  264. skip:
  265.    pop AX          
  266.    add AL, 1
  267.    cmp AL, CL
  268.    jl innerloop          
  269.    
  270.    add CL, AH
  271.    add AH, 1
  272.    cmp AH, CL
  273.    jl outerloop
  274.    
  275.    mov SP, BP
  276.    
  277.    pop SI
  278.    pop DI
  279.    pop DX
  280.    pop CX
  281.    pop BX
  282.    pop AX
  283.    
  284.    pop BP
  285.    
  286.    retn 2
  287. ENDP bubble_sort
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement