Ввод двух строк и их сравнение - Assembler

Формулировка задачи:

Доброго времени суток! Нужно написать программу в которой были реализованы следующие действия: Ввод двух строк и их сравнение. В поиске были похожие темы, но текст их мягко сказать непонятен, помогите написать эту программу как можно проще и понятнее. Заранее спасибо!Добавлено через 4 часа 57 минутМне знакомый скинул код но у меня по чему то не работает не могли бы вы его поправить и прокомментировать...
.MODEL SMALL
   .STACK 100h
   .DATA
str1 DB 10,13,'first string: $'
str2 DB 10,13,'second string: $'
res DB 10,13,'result: $'
strrav DB 10,13,'ravno: $'
strnerav DB 10,13,'ne ravno: $'
buf1  db 40 dup(?)
buf2  db 40 dup(?)
   .CODE
start:
   mov  ax,@data
   mov  ds,ax                      
   mov  ah,9h
   mov  dx,OFFSET str1      
   int  21h
   mov bx,0
start1: ;VVod 1 str
   mov ah,1
   int 21h
   cmp al,13
   je start2
   mov buf1[bx],al
   inc bx
   jmp start1
start2:
   mov ah,9h
   mov dx, OFFSET str2
   int 21h
   mov di,0
   start3:   ;VVod 2 str
   mov ah,1
   int 21h
   cmp al,13
   je start4
   mov buf2[di],al
   inc di
   jmp start3
start4: ;sravnenie
   cmp bx,di  
   jne start6
   mov ax,0
   mov dx,0
start44:
   cmp di,0
   je start5
   mov al,buf1[di]
   cmp al,buf2[di]
   jne start6
   dec di
jmp start44
start5: ;vivod ranestva
   mov ah,9h
   mov dx, OFFSET strrav
   int 21h
   jmp start7
start6: ; vivod ne ravenstva
   mov ah,9h
   mov dx, OFFSET strnerav  
   int 21h
start7:
   .exit 0
   END start

Код к задаче: «Ввод двух строк и их сравнение - Assembler»

textual
.model small
.stack 100h
.data
m_f db 'Первая строка длиннее второй на $'
m_s db 'Вторая строка длиннее первой на $'
m_b db ' байт$'
m_e db 'Строки равны$'          
buf db 82 dup(?)
.code
out_msg macro msg       ;Выводит строку на экран.
        push ax
        push dx
        mov ah,9
        lea dx,msg
        int 21h
        pop dx
        pop ax
        endm
start:  mov ax,@data
    mov ds,ax
    mov ah,3fh      ;Ввод первой строки.
        mov bx,0        ;Ноль означает клавиатуру.
        mov cx,82       ;Максимальное число вводимых символов(80) плюс 2 (для 0ah и 0dh).
        lea dx,buf      ;Адрес области памяти для вводимой строки.
        int 21h
        push ax         ;Запоминаем длину первой строки в стеке(она на 2 больше реальной длины, но это для сравнения неважно).
        mov ah,3fh      ;Ввод второй строки.
        int 21h         ;Длина второй строки в ax
        pop bx          ;В bx длина первой строки.
        sub ax,bx       ;Сравниваем длины.
        js @f           ;Если результат вычитания отрицательный, первая строка длиннее второй.
        je @e           ;Поднят zf - строки равны.
        out_msg m_s     ;Результат вычитания положительный - вторая строка больше первой.
        call out_b      
        out_msg m_b
        jmp exit        
@f:     neg al          ;Получаем модуль результата вычитания.
        out_msg m_f
        call out_b
        out_msg m_b
        jmp exit
@e:     out_msg m_e
exit:   mov ax,4c00h
    int 21h
out_b proc              ;Выводит двузначное число.
        xor ah,ah
        mov bl,10
        div bl
        or ax,3030h
        int 29h
        mov al,ah
        int 29h
        ret
out_b endp
end start

8   голосов, оценка 4.750 из 5


СОХРАНИТЬ ССЫЛКУ