Advertisement
Ladies_Man

#NUP LAB_4 Result (PDP-11)

Jun 1st, 2014
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .globl mm
  2. .psect code,gbl,ro,i,con,rel
  3. mm::   
  4.            
  5. ;=======PROLOGUE================
  6.             ;stack: ret,ac,av
  7.         mov R2, -(SP)
  8.         mov R3, -(SP)
  9.         mov R4, -(SP)
  10.         mov R5, -(SP)       ;5,4,3,2,ret,ac,av
  11.  
  12.         sub #102., SP           ;str[0]...[100],p,5,4,3,2,ret,ac,av
  13.         clrb (SP)       ;str[0] = '\0'
  14.         mov 114.(SP), R3        ;R3 = av
  15.         mov 112.(SP), R4        ;R4 = ac
  16.         dec R4          ;use 'ac' as 'i'. 'i' start value = 1
  17.         beq EXIT
  18.         tst (R3)+               ;av[i=1]
  19.         mov SP, R2
  20.         add #100., R2           ;R2 = &p
  21.  
  22. ;=======STARTLOOP===============
  23.  
  24. loop:   mov (R3), R1            ;R1 = av[i]
  25.         call strtoi
  26.         mov R0, R5              ;n = strtoi (av[i], &p)
  27.  
  28.         bpl ten         ;if (NegFlag == 0)
  29.         clr R5
  30.         br A
  31. ten:    cmp R5, #12     ;cmp 'n' and 10d
  32.         bmi A           ;if (NegFlag == 1)
  33.         mov #12, R5     ;R5 = n = 10
  34.  
  35. ;-------IF1---------------------
  36.  
  37. A:      tst (R2)                ;sam p
  38.         beq VANO        ;-VANO!-
  39.         mov (R2), R0
  40.         tstb (R0)       ;
  41.         bne ELSE
  42.  
  43. VANO:   tst (R3)+               ;new av[i]
  44.         dec R4                  ;i++ (still use 'ac' as 'i')
  45.  
  46. ;-------IF2---------------------
  47.  
  48.         bne B           ;if (ac != 0) goto B
  49.         mov #miss, -(SP)        ;miss,str[100],p,5,4,3,2...
  50.         call printf             ;printf( "\rMissing parameter!\r\n" )
  51.  
  52. .psect data,rel,con,gbl,rw,d
  53. miss:   .byte 15,115,151,163,163,151,156,147,40,160,141,162,141,155,145,164,145,162,41,15,12,0
  54.         .even
  55. .psect code,rel,con,gbl,ro,i
  56.  
  57.         tst (SP)+               ;str[100],p,5,4,3,2,ret,ac,av
  58.         br EXIT
  59.  
  60. ;-------XTRTOI------------------
  61. B:      mov (R3), R1            ;R1 = av[i]
  62.                                 ;R2 = &p
  63.         call strtoi
  64.         mov R0, R1              ;R1 = c = strtoi( av[i], &p )
  65.         br C
  66.  
  67. ;-------ELSE--------------------
  68. ELSE:   movb @100.(SP), R1  ;c = *p
  69.  
  70. ;-------STRNSET-----------------
  71. C:      mov R2, -(SP)           ;save &p
  72.         mov (R3), R0            ;R0 = av[i]
  73.                                 ;R1 = c
  74.         mov R5, R2              ;R2 = n
  75.         call strnset            ;strnset( av[i], c, n )
  76.         mov (SP)+, R2       ;str[100],p,5,4,3,2,ret,ac,av
  77.  
  78. ;-------STRCAT------------------
  79.         mov SP, R1
  80.         mov (R3)+, -(SP)    ;av[i],str[100],p,5,4,3,2...
  81.         mov R1, -(SP)           ;&str[100],av[i],str[100],p,5,4,3,2...
  82.         call strcat             ;strcat( str, av[i] )
  83.  
  84.         mov #fmt, 2(SP)     ;&str[100],&fmt,str[100],p,5,4,3,2...
  85.         call strcat             ;strcat( str, "\r\n" )
  86.  
  87. .psect data,gbl,rel,con,rw,d
  88. fmt:    .byte 15,12,0
  89.         .even
  90. .psect code,gbl,rel,con,i,ro
  91.  
  92.         cmp (SP)+, (SP)+    ;str[100],p,5,4,3,2,ret,ac,av
  93.         dec R4          ;i++
  94.         bne loop
  95.  
  96. ;=======ENDLOOP=================
  97.  
  98. EXIT:   mov SP, R0
  99.         mov R0, -(SP)       ;&str[100],p,5,4,3,2...
  100.         mov #strend, -(SP)  ;&strend,&str[100],str[100],p,5,4,3,2...
  101.         call printf             ;printf( "\r%s\r\n", str )
  102.  
  103. .psect data,gbl,rel,con,d,rw
  104. strend: .byte 15,45,163,15,12,0
  105. .psect code,gbl,rel,con,i,ro
  106.  
  107.         cmp (SP)+, (SP)+    ;str[100],p,5,4,3,2,p,ret,ac,av
  108.  
  109. ;=======EPILOGUE================
  110.  
  111.         add #102., SP       ;clean stack
  112.         mov (SP)+, R5
  113.         mov (SP)+, R4
  114.         mov (SP)+, R3
  115.         mov (SP)+, R2
  116.         mov #17., R0
  117.         return
  118. .end
  119.  
  120. =====test1=====================
  121. .run main
  122. Argv: 011 110001
  123. 111001
  124. Returned value is 17
  125.  
  126. =====test2=====================
  127. .run main
  128. Argv: "011 110001"
  129.     110001
  130. Returned value is 17
  131.  
  132. ====launch:=====================
  133. macro func                  ;func -> func.asm
  134. macro xfunc1                    ;strtoi2 -> strtoi2.asm
  135. macro xfunc2                    ;strnset -> strnse.asm
  136. cc main                     ;main -> main.c
  137. asm main                    ;main.c -> main.asm
  138. clink main,func,xfunc1,xfunc2           ;link them all and standard library to same library
  139.  
  140. ====with libraries=============     ;<- better way!
  141. lib/create mylib xfunc1,xfunc2
  142. link/linklibrary:sy:cc/linklibrary:mylib main,func
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement