Microsoft (R) Macro Assembler Version 6.11 05/18/10 17:12:35 u:\ace_int.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 [ k db const dup (?); новый массив 00 ] 00C8 0064 con dw 100 ; размер нового массива = 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 56 push si 0001 50 push ax 0002 BE 0000 mov si,0 ; счетчик 0005 L3:inch al 0005 B0 00 1 mov al,0 0007 9A ---- 0000 E 1 call procinch 000C 3C 2E cmp al,'.' ; проверяем на окончание 000E 74 05 je L4 0010 88 00 mov [bx][si],al ;заполняем 0012 46 inc si 0013 EB F0 jmp L3 ; цикл 0015 89 36 00C8 R L4:mov con,si ; запоминаем размер 0019 58 pop ax 001A 5E pop si 001B C3 ret 001C vstavil endp 001C proveril proc ; si внутр. переменная, dx выходные данные 001C 56 push si 001D BE FFFF mov si,-1 ; счетчик 0020 BA 0000 mov dx,0 ; указатель на вариант 0023 46 L6:inc si 0024 3B 36 00C8 R cmp si,con ; проверка выхода 0028 74 10 je L7 002A 80 38 5F cmp byte ptr ds:[bx+si],95 ; Считаем в dx разницу в кол-ве заглавных и незаглавных 002D 77 08 ja L5 002F 80 38 40 cmp byte ptr ds:[bx+si],zag 0032 72 04 jb L16 0034 42 inc dx 0035 EB EC jmp L6 0037 4A L5:dec dx 0038 EB E9 L16:jmp L6 003A 5E L7:pop si 003B C3 ret 003C proveril endp 003C varodin proc ; si, di, ax - внутренние переменные 003C 50 push ax 003D 56 push si 003E 57 push di 003F BE FFFF mov si,-1 ;счетчики 0042 BF FFFF mov di,-1 0045 B8 0000 L8:mov ax,0 0048 46 inc si 0049 47 inc di 004A 3B 36 00C8 R cmp si,con ; условие выхода 004E 74 22 je L9 0050 80 38 5F cmp byte ptr [bx][si],95 ;проверка на загл. букву 0053 77 16 ja L10 0055 80 38 40 cmp byte ptr [bx][si],zag 0058 72 11 jb L10 005A 8A 00 mov al,[bx][si] ; считаем, что именно нужно вставить 005C 2C 40 sub al,zag 005E 98 cbw 005F F6 36 00CA R div desat 0063 80 C4 30 add ah,48 0066 88 61 64 mov [bx]+const+[di],ah ; вставляем 0069 EB DA jmp L8 006B 8A 00 L10:mov al,[bx][si] ; заносим без изменений в массив 006D 88 40 64 mov [bx]+const+[si],al 0070 EB D3 jmp L8 0072 5F L9:pop di 0073 5E pop si 0074 58 pop ax 0075 C3 ret 0076 varodin endp 0076 varvtoroi proc ; si, ax внутр., используется стэк, bp выходная 0076 56 push si 0077 50 push ax 0078 8B 0E 00C8 R mov cx,con ; задаем счетчики 007C BE 0000 mov si,0 007F B8 0000 mov ax,0 0082 BD 0001 mov bp,1 0085 8A 00 mov al,byte ptr[bx][si] ; сохраняем первый символ 0087 50 push ax 0088 46 loo2:inc si 0089 8A 00 mov al,byte ptr[bx][si] 008B 5F pop di 008C 3B F8 cmp di,ax ; проверяем символ на повтор 008E 74 02 je L11 0090 57 push di ; заносим в стэк нужные символы 0091 45 inc bp ; считаем новый размер массива 0092 50 L11:push ax 0093 E2 F3 loop loo2 ; зацикливаем 0095 8B F5 mov si,bp ; заполняем массив 0097 58 L12:pop ax 0098 88 40 64 mov [bx]+const+[si],al 009B 4E dec si 009C 83 FE 00 cmp si,0 009F 75 F6 jne L12 00A1 58 pop ax 00A2 5E pop si 00A3 C3 ret 00A4 varvtoroi endp 00A4 vivesti proc ; si,ax,dx,bp внутренние переменные 00A4 56 push si 00A5 50 push ax 00A6 52 push dx 00A7 55 push bp newline 00A8 9A ---- 0000 E 1 call procnl 00AD BE 0000 mov si,0 ; СЧЕТЧИК 00B0 3B 36 00C8 R cmp si,con 00B4 74 4E je L18 00B6 8A 00 L15:mov al, byte ptr [bx][si] ; ВЫВОД СИМВОЛОВ ИЗНАЧ МАССИВА outch al 00B8 52 1 push dx 00B9 50 1 push ax 00BA 8A D0 1 mov dl,al 00BC B4 02 1 mov ah,2 00BE CD 21 1 int 21h 00C0 58 1 pop ax 00C1 5A 1 pop dx 00C2 46 inc si 00C3 3B 36 00C8 R cmp si,con ; условие выхода 00C7 75 ED jne L15 00C9 83 FA 00 cmp dx,0 ; какой вар. использовался 00CC 75 04 jne L14 00CE 8B 2E 00C8 R mov bp,con ; если первый вар 00D2 BE 0000 L14:mov si,0 newline 00D5 9A ---- 0000 E 1 call procnl ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'0-if first var, other-second: ' outint dx ; вывод варианта 00DA 50 2 push ax 00DB 52 2 push dx 00DC B0 00 2 mov al,0 00DE 92 2 xchg ax,dx 00DF B6 01 2 mov dh,1 00E1 9A ---- 0000 E 2 call procoutnum 00E6 5A 2 pop dx 00E7 58 2 pop ax newline 00E8 9A ---- 0000 E 1 call procnl 00ED 8A 40 64 L13:mov al,[bx]+const+[si] ; вывод второго массива outch al 00F0 52 1 push dx 00F1 50 1 push ax 00F2 8A D0 1 mov dl,al 00F4 B4 02 1 mov ah,2 00F6 CD 21 1 int 21h 00F8 58 1 pop ax 00F9 5A 1 pop dx 00FA 46 inc si 00FB 3B F5 cmp si,bp ; условие выхода 00FD 75 EE jne L13 00FF 5D pop bp 0100 5A pop dx 0101 58 pop ax 0102 5E pop si 0103 C3 ret 0104 L18:outch '0' 0104 52 1 push dx 0105 50 1 push ax 0106 B2 30 1 mov dl,'0' 0108 B4 02 1 mov ah,2 010A CD 21 1 int 21h 010C 58 1 pop ax 010D 5A 1 pop dx 010E 5D pop bp 010F 5A pop dx 0110 58 pop ax 0111 5E pop si 0112 C3 ret 0113 vivesti endp 0113 start: ; В процедурах BX - указатель на первый массив, второй массив должен идти сразу за первым массивом, и оба они длины const 0113 B8 ---- R mov ax,data 0116 8E D8 mov ds,ax 0118 8D 1E 0000 R lea bx,n 011C E8 FEE1 call vstavil ; ввод newline 011F 9A ---- 0000 E 1 call procnl 0124 E8 FEF5 call proveril 0127 83 FA 00 cmp dx,0 ; проверка варианта 012A 75 05 jne L1 012C E8 FF0D call varodin ; первый вар 012F EB 03 jmp L2 0131 E8 FF42 L1:call varvtoroi ; второй вар 0134 E8 FF6D L2:call vivesti ; вывод newline 0137 9A ---- 0000 E 1 call procnl finish ;ФИНИШ 013C B4 4C 1 mov ah,4Ch 013E CD 21 1 int 21h 0140 code ends end start Microsoft (R) Macro Assembler Version 6.11 05/18/10 17:12:35 u:\ace_int.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 0140 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 001C code Length= 0020 Private varodin . . . . . . . . . . . . P Near 003C code Length= 003A Private varvtoroi . . . . . . . . . . . P Near 0076 code Length= 002E Private vivesti . . . . . . . . . . . . P Near 00A4 code Length= 006F Private vstavil . . . . . . . . . . . . P Near 0000 code Length= 001C Private Symbols: N a m e Type Value Attr ??0000 . . . . . . . . . . . . . Number 0001h ??0001 . . . . . . . . . . . . . Number 0001h L10 . . . . . . . . . . . . . . L Near 006B code L11 . . . . . . . . . . . . . . L Near 0092 code L12 . . . . . . . . . . . . . . L Near 0097 code L13 . . . . . . . . . . . . . . L Near 00ED code L14 . . . . . . . . . . . . . . L Near 00D2 code L15 . . . . . . . . . . . . . . L Near 00B6 code L16 . . . . . . . . . . . . . . L Near 0038 code L18 . . . . . . . . . . . . . . L Near 0104 code L1 . . . . . . . . . . . . . . . L Near 0131 code L2 . . . . . . . . . . . . . . . L Near 0134 code L3 . . . . . . . . . . . . . . . L Near 0005 code L4 . . . . . . . . . . . . . . . L Near 0015 code L5 . . . . . . . . . . . . . . . L Near 0037 code L6 . . . . . . . . . . . . . . . L Near 0023 code L7 . . . . . . . . . . . . . . . L Near 003A code L8 . . . . . . . . . . . . . . . L Near 0045 code L9 . . . . . . . . . . . . . . . L Near 0072 code const . . . . . . . . . . . . . Number 0064h con . . . . . . . . . . . . . . Word 00C8 data desat . . . . . . . . . . . . . Byte 00CA data k . . . . . . . . . . . . . . . Byte 0064 data loo2 . . . . . . . . . . . . . . L Near 0088 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 0113 code zag . . . . . . . . . . . . . . Number 0040h 0 Warnings 0 Errors