汇编语言任务1—字符串比较

任务1字符串比较

问题

#(若发现错误请大家严格加以斧正)
如下所示的数据区中给出两个字符串,请比较它们的大小,并将结果记录在result处:相等(E)、前大后小(A)、前小后大(B)
data segment
str1 db ‘Yan Tai’,0
str2 db ‘Yan Cheng’,0
result db 0
data ends
请在程序中加入足量的注释
报告内容:带注释的源程序及运行结果如下

DOSBox下的运行结果

源程序

汇编语言任务1—字符串比较_第1张图片
内联代码片

在DOSBox中的运行情况
assume cs:code,ds:data
data segment
str1 db 'Yan Tai',0
str2 db 'Yan Cheng',0
result db 0	
data ends
code segment
start:
mov ax,data
mov ds,ax
	
push ax
push bx
push si
push cx
mov cx,offset str2-offset str1
;offset做减法求得第一段字符串长度用于loop循环
mov si,0
mov di,0
begin:
mov al,str1[si]
cmp al,0
jz final	;(第一段短)第一个字符串结束则跳到长度比较
mov bl,str2[si]
cmp bl,0	
jz final	;(第二段短)第二字符串结束则比较字符串长度
cmp al,bl
je equal
ja above
jb below
loop begin
mov ax,0
mov bx,0
;以下是任意字符串字符比较结束仍不能决定大小时,直接比串长度
;空格符的Ascll码为32比大小写字母地Ascll码值小
final:
	
mov al,offset str2-offset str1
mov bl,offset result-offset str2	
cmp al,bl
ja above
jb below
mov result[0],'E'
jmp ok
;下面是两段字符串大小比较的三种结果
equal:
inc si
jmp begin
above:
mov result[0],'A'
jmp ok
below:
mov result[0],'B'
jmp ok
ok: mov ax,4c00h
int 21h
pop cx
pop si
pop bx
pop ax
code ends
end start


[结果是大于,数据段显示‘A](https://img-blog.csdnimg.cn/20200524232824371.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NpeGdvZDI2OTQ5MzI4NTY=,size_16,color_FFFFFF,t_70
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200524234803867.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NpeGdvZDI2OTQ5MzI4NTY=,size_16,color_FFFFFF,t_70)

你可能感兴趣的:(反汇编,字符串)