Advertisement
aNNiMON

СПиОС LR_6 VAR_10

Dec 15th, 2012
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Melnik Victor  ISPR A1
  2. ; LR_6    10 var
  3. ; Если длина симв. файла меньше N байт, то дополнить пробелами
  4. ; иначе урезать до размера N.
  5. CODESG SEGMENT PARA 'CODE'
  6.     ASSUME CS: CODESG, DS: CODESG, SS: CODESG, ES: CODESG
  7.        ORG 100h
  8.     BEGIN: JMP MAIN
  9.    
  10.         FILENAME db 'text.txt$'
  11.         SYMBOLS db '%'
  12.        
  13.         cmd db 3 dup(0), '$'
  14.         cmd_N dw 0
  15.        
  16.         handle dw 0
  17.         file_len dw 0
  18.        
  19.     MAIN PROC NEAR
  20.         CALL GET_PARAM
  21.         mov cmd_N, bx
  22.        
  23.         ; open file RW
  24.         mov ax, 3d02h
  25.         lea dx, FILENAME
  26.         int 21h
  27.         mov handle, ax
  28.        
  29.         ; get file size
  30.         mov ax, 4202h
  31.         mov bx, handle
  32.         mov cx, 0
  33.         mov dx, 0
  34.         int 21h
  35.         mov file_len, ax
  36.        
  37.         ; if (file_len < cmd_N)
  38.         mov bx, cmd_N
  39.         cmp ax, bx
  40.         jae @greater
  41.        
  42.         ; get count of symbols to write
  43.         mov cx, cmd_N
  44.         sub cx, ax
  45.         @write_symbols:
  46.             push cx
  47.             mov ah, 40h
  48.             mov cx, 1
  49.             mov bx, handle
  50.             lea dx, SYMBOLS
  51.             int 21h
  52.             pop cx
  53.         loop @write_symbols
  54.         jmp @close_file
  55.        
  56.       @greater: ; if (file_len > cmd_N)
  57.         ; move pointer to cmd_N
  58.         mov ax, 4200h
  59.         mov bx, handle
  60.         mov cx, 0
  61.         mov dx, cmd_N
  62.         int 21h
  63.         ; write EOF
  64.         mov ah, 40h
  65.         mov bx, handle
  66.         mov cx, 0
  67.         int 21h
  68.        
  69.       @close_file:
  70.         mov ah, 3eh
  71.         mov bx, handle
  72.         int 21h
  73.        
  74.         mov ah, 01h
  75.         int 21h
  76.         ret
  77.     MAIN ENDP
  78.    
  79.     ; get parameters from cmd
  80.     GET_PARAM PROC NEAR
  81.         mov al, ds:82h
  82.         sub al, 30h
  83.         mov dl, al
  84.         cbw
  85.         mov bl, 10
  86.         imul bl
  87.        
  88.         mov bx, ax
  89.        
  90.         mov al, ds:83h
  91.         sub al, 30h
  92.         js @one_symb
  93.         cbw
  94.         add bx, ax
  95.         ret
  96.        
  97.       @one_symb:
  98.         xor bx, bx
  99.         mov bl, dl
  100.         ret
  101.     GET_PARAM ENDP
  102.    
  103.     CODESG ENDS
  104. END BEGIN
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement