Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как сравнивать строки в nasm 16 bits

иван Фролов Знаток (374), на голосовании 5 дней назад
я пытался сравнить через цикл, но если сравнить "cle" и "clear", то будет что равны, но если "cls" и "clear", то не будет
Голосование за лучший ответ
kaiu Высший разум (118779) 1 месяц назад
Для начала код показываете, чтобы попробовали.
А так если логика сравнения частичная, то все логично:
cle = cle ar
cls <> cle ar
иван ФроловЗнаток (374) 1 месяц назад
comapre_strs:
push si
push bx
push ax
__comapre_strs_comp:
mov ah, [bx]
cmp [si], ah
jne __comapre_strs_first_zero
inc si
inc bx
jmp __comapre_strs_comp
__comapre_strs_first_zero:
cmp byte [bx], 0
jne __comapre_strs_not_equal
mov cx, 1
pop si
pop bx
pop ax
ret
__comapre_strs_not_equal:
mov cx, 0
pop si
pop bx
pop ax
ret
kaiu Высший разум (118779) иван Фролов, точно не скажу, но где-то так
 ; сравнение строк на равенство 
; в bx адрес первой строки, в si адрес второй 
; результат если = то в cx=1 а иначе 0 
comapre_strs: 
	push bx  
	push si  
	push ax  
	mov cx, 1 ; изначально считаем, что строки равны 
	 
.comp: 
	mov ah, [bx] 
	cmp [si], ah 
	jne .not_equal ; если нет равенства, то далее сравнивать нет смысла  
	cmp ah, 0 
	je .equal_and_exit ; если встречен 0, то конец цикла 
	inc si 
	inc bx 
	jmp .comp 
	 
.not_equal 
	mov cx, 0 ; сообщаем, что строки не равны 
	 
.equal_and_exit:	 
	pop ax 
	pop si 
	pop bx	  
	ret 
Тут: NASM предоставляет решение - локальные метки. Локальные метки по сути те же метки, только перед их названием ставится точка Убрал дублирование части кода. Если у вас идет в стек push si push bx то брать назад
Похожие вопросы