Microsoft (R) Macro Assembler Version 6.11 05/11/10 10:43:53 u:\ace_LIT.asm Page 1 - 1 include io.asm ; подключаем ввод-вывод C C .nolist ;§ ЇаҐв § ЇЁбЁ нв®Ј® д ©«  ў «ЁбвЁ­Ј C .list C 0000 stack segment stack ; СТЭК! 0000 0080 [ dw 128 dup (?) 0000 ] 0100 stack ends 0000 data segment = 0064 const equ 100 ; начальный размер массива 0000 0064 [ n db const dup (?); нач. массив 00 ] 0064 0064 con dw 100 ; размер нового массива 0066 0064 [ k db const dup (?); новый массив 00 ] = 0040 zag equ 64 ; для опрделения загл букв 00CA 0A desat db 10 ; вспомогательная переменная 00CB data ends 0000 code segment 'code' assume ss:stack, ds:data, cs:code 0000 vstavil proc ; si, al - внутренние переменные 0000 BE 0000 mov si,0 ; счетчик 0003 L3:inch al 0003 B0 00 1 mov al,0 0005 9A ---- 0000 E 1 call procinch 000A 3C 2E cmp al,'.' ; проверяем на окончание 000C 74 07 je L4 000E 88 84 0000 R mov n[si],al ;заполняем 0012 46 inc si 0013 EB EE jmp L3 ; цикл 0015 89 36 0064 R L4:mov con,si ; запоминаем размер 0019 C3 ret 001A vstavil endp 001A proveril proc ; si внутр. переменная, bx выходные данные 001A BE FFFF mov si,-1 ; счетчик 001D BB 0000 mov bx,0 ; указатель на вариант 0020 46 L6:inc si 0021 3B 36 0064 R cmp si,con ; проверка выхода 0025 74 14 je L7 0027 80 BC 0000 R 5F cmp n[si],95 ; Считаем в bx разницу в кол-ве заглавных и незаглавных 002C 77 0A ja L5 002E 80 BC 0000 R 40 cmp n[si],zag 0033 72 04 jb L16 0035 43 inc bx 0036 EB E8 jmp L6 0038 4B L5:dec bx 0039 EB E5 L16:jmp L6 003B C3 L7:ret 003C proveril endp 003C varodin proc ; si, di, ax - внутренние переменные 003C BE FFFF mov si,-1 ;счетчики 003F BF FFFF mov di,-1 0042 B8 0000 L8:mov ax,0 0045 46 inc si 0046 47 inc di 0047 3B 36 0064 R cmp si,con ; условие выхода 004B 74 2C je L9 004D 80 BC 0000 R 5F cmp n[si],95 ;проверка на загл. букву 0052 77 1B ja L10 0054 80 BC 0000 R 40 cmp n[si],zag 0059 72 14 jb L10 005B 8A 84 0000 R mov al,n[si] ; считаем, что именно нужно вставить 005F 2C 40 sub al,zag 0061 98 cbw 0062 F6 36 00CA R div desat 0066 80 C4 30 add ah,48 0069 88 A5 0066 R mov k[di],ah ; вставляем 006D EB D3 jmp L8 006F 8A 84 0000 R L10:mov al,n[si] ; заносим без изменений в массив 0073 88 84 0066 R mov k[si],al 0077 EB C9 jmp L8 0079 C3 L9:ret 007A varodin endp 007A varvtoroi proc ; bp, si, ax внутр., используется стэк, 007A 8B 0E 0064 R mov cx,con ; задаем счетчики 007E BE 0000 mov si,0 0081 B8 0000 mov ax,0 0084 BD 0001 mov bp,1 0087 8A 84 0000 R mov al,n[si] ; сохраняем первый символ 008B 50 push ax 008C 46 loo2:inc si 008D 8A 84 0000 R mov al,n[si] 0091 5F pop di 0092 3B F8 cmp di,ax ; проверяем символ на повтор 0094 74 02 je L11 0096 57 push di ; заносим в стэк нужные символы 0097 45 inc bp ; считаем новый размер массива 0098 50 L11:push ax 0099 E2 F1 loop loo2 ; зацикливаем 009B 8B F5 mov si,bp ; заполняем массив 009D 58 L12:pop ax 009E 88 84 0066 R mov k[si],al 00A2 4E dec si 00A3 83 FE 00 cmp si,0 00A6 75 F5 jne L12 00A8 C3 ret 00A9 varvtoroi endp 00A9 vivesti proc ; si,ax,bx,bp внутренние переменные newline 00A9 9A ---- 0000 E 1 call procnl 00AE BE 0000 mov si,0 ; СЧЕТЧИК 00B1 3B 36 0064 R cmp si,con 00B5 74 4E je L18 00B7 8A 84 0000 R L15:mov al,n[si] ; ВЫВОД СИМВОЛОВ ИЗНАЧ МАССИВА outch al 00BB 52 1 push dx 00BC 50 1 push ax 00BD 8A D0 1 mov dl,al 00BF B4 02 1 mov ah,2 00C1 CD 21 1 int 21h 00C3 58 1 pop ax 00C4 5A 1 pop dx 00C5 46 inc si 00C6 3B 36 0064 R cmp si,con ; условие выхода 00CA 75 EB jne L15 00CC 83 FB 00 cmp bx,0 ; какой вар. использовался 00CF 75 04 jne L14 00D1 8B 2E 0064 R mov bp,con ; если первый вар 00D5 BE 0000 L14:mov si,0 newline 00D8 9A ---- 0000 E 1 call procnl ;'0-if first var, other-second: ' outint bx ; вывод варианта 00DD 50 2 push ax 00DE 52 2 push dx 00DF B2 00 2 mov dl,0 00E1 8B C3 2 mov ax,bx 00E3 B6 01 2 mov dh,1 00E5 9A ---- 0000 E 2 call procoutnum 00EA 5A 2 pop dx 00EB 58 2 pop ax newline 00EC 9A ---- 0000 E 1 call procnl 00F1 8A 84 0066 R L13:mov al,k[si] ; вывод второго массива outch al 00F5 52 1 push dx 00F6 50 1 push ax 00F7 8A D0 1 mov dl,al 00F9 B4 02 1 mov ah,2 00FB CD 21 1 int 21h 00FD 58 1 pop ax 00FE 5A 1 pop dx 00FF 46 inc si 0100 3B F5 cmp si,bp ; условие выхода 0102 75 ED jne L13 0104 C3 ret 0105 L18:outch '0' 0105 52 1 push dx 0106 50 1 push ax 0107 B2 30 1 mov dl,'0' 0109 B4 02 1 mov ah,2 010B CD 21 1 int 21h 010D 58 1 pop ax 010E 5A 1 pop dx 010F C3 ret 0110 vivesti endp 0110 start: 0110 B8 ---- R mov ax,data 0113 8E D8 mov ds,ax 0115 E8 FEE8 call vstavil ; ввод newline 0118 9A ---- 0000 E 1 call procnl 011D E8 FEFA call proveril 0120 83 FB 00 cmp bx,0 ; проверка варианта 0123 75 05 jne L1 0125 E8 FF14 call varodin ; первый вар 0128 EB 03 jmp L2 012A E8 FF4D L1:call varvtoroi ; второй вар 012D E8 FF79 L2:call vivesti ; вывод newline 0130 9A ---- 0000 E 1 call procnl finish ;ФИНИШ 0135 B4 4C 1 mov ah,4Ch 0137 CD 21 1 int 21h 0139 code ends end start Microsoft (R) Macro Assembler Version 6.11 05/11/10 10:43:53 u:\ace_LIT.asm Symbols 2 - 1 Macros: N a m e Type finish . . . . . . . . . . . . . Proc flush . . . . . . . . . . . . . Proc inch . . . . . . . . . . . . . . Proc inint . . . . . . . . . . . . . Proc newline . . . . . . . . . . . . Proc outch . . . . . . . . . . . . . Proc outint . . . . . . . . . . . . . Proc outnum . . . . . . . . . . . . . Proc outstr . . . . . . . . . . . . . Proc outword . . . . . . . . . . . . Proc same . . . . . . . . . . . . . . Proc Segments and Groups: N a m e Size Length Align Combine Class code . . . . . . . . . . . . . . 16 Bit 0139 Para Private 'CODE' data . . . . . . . . . . . . . . 16 Bit 00CB Para Private stack . . . . . . . . . . . . . 16 Bit 0100 Para Stack Procedures, parameters and locals: N a m e Type Value Attr proveril . . . . . . . . . . . . P Near 001A code Length= 0022 Private varodin . . . . . . . . . . . . P Near 003C code Length= 003E Private varvtoroi . . . . . . . . . . . P Near 007A code Length= 002F Private vivesti . . . . . . . . . . . . P Near 00A9 code Length= 0067 Private vstavil . . . . . . . . . . . . P Near 0000 code Length= 001A Private Symbols: N a m e Type Value Attr ??0000 . . . . . . . . . . . . . Number 0001h ??0001 . . . . . . . . . . . . . Number 0000h L10 . . . . . . . . . . . . . . L Near 006F code L11 . . . . . . . . . . . . . . L Near 0098 code L12 . . . . . . . . . . . . . . L Near 009D code L13 . . . . . . . . . . . . . . L Near 00F1 code L14 . . . . . . . . . . . . . . L Near 00D5 code L15 . . . . . . . . . . . . . . L Near 00B7 code L16 . . . . . . . . . . . . . . L Near 0039 code L18 . . . . . . . . . . . . . . L Near 0105 code L1 . . . . . . . . . . . . . . . L Near 012A code L2 . . . . . . . . . . . . . . . L Near 012D code L3 . . . . . . . . . . . . . . . L Near 0003 code L4 . . . . . . . . . . . . . . . L Near 0015 code L5 . . . . . . . . . . . . . . . L Near 0038 code L6 . . . . . . . . . . . . . . . L Near 0020 code L7 . . . . . . . . . . . . . . . L Near 003B code L8 . . . . . . . . . . . . . . . L Near 0042 code L9 . . . . . . . . . . . . . . . L Near 0079 code const . . . . . . . . . . . . . Number 0064h con . . . . . . . . . . . . . . Word 0064 data desat . . . . . . . . . . . . . Byte 00CA data k . . . . . . . . . . . . . . . Byte 0066 data loo2 . . . . . . . . . . . . . . L Near 008C code n . . . . . . . . . . . . . . . Byte 0000 data procflush . . . . . . . . . . . L Far 0000 External procinch . . . . . . . . . . . . L Far 0000 External procinint . . . . . . . . . . . L Far 0000 External procnl . . . . . . . . . . . . . L Far 0000 External procoutnum . . . . . . . . . . . L Far 0000 External start . . . . . . . . . . . . . L Near 0110 code zag . . . . . . . . . . . . . . Number 0040h 0 Warnings 0 Errors