汇编语言: 试编写一段程序,要求比较两个字符串 string1 和 string2 所含字符是否相等,如相 等则显示“MATCH”, 若不相同则显示“NO MATCH”。

试编写一段程序,要求比较两个字符串 string1 和 string2 所含字符是否相等,如相 等则显示“MATCH”, 若不相同则显示“NO MATCH”。
2017年5月25日23:54:01

data segment

str1 db '123456','$'
len1 equ $-str1

str2 db '123456','$'
len2 equ $-str2

match db 'MATCH!','$'
nomatch db 'NO MATCH!','$'
data ends

stack segment stack
 dw 20h dup(?) 
top label word
stack ends

code segment
    assume cs:code,ds:data,ss:stack
main proc far 

    mov ax,data
    mov ds,ax
    mov es,ax  ;this is important



    mov ax,stack
    mov ss,ax
    lea sp,top

    mov ah,len1
    mov al,len2

    cmp al,ah
    jne no

    mov ch,0
    mov cl,al

    lea si,str1
    lea di,str2
    cld
    repe cmpsb
    jne no

yes:
    lea dx,match
    mov ah,09h
    int 21h 
    jmp exit    

no: lea dx,nomatch
    mov ah,09h
    int 21h 

exit: 
    mov ah,4ch
    int 21h

main endp
 code  ends
  end main
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一段使用汇编语言实现比较两个字符串程序,实现了上述要求: ``` DATA SEGMENT STR1 DB 'Hello, World$' STR2 DB 'Hello, World$' MSG1 DB 'Match$' MSG2 DB 'No Match$' DATA ENDS CODE SEGMENT START: MOV AX, @DATA MOV DS, AX ; 初始化数据段寄存器 MOV SI, OFFSET STR1 ; 将 STR1 的地址存放到 SI 寄存器中 MOV DI, OFFSET STR2 ; 将 STR2 的地址存放到 DI 寄存器中 MOV CX, 0 ; 初始化计数器 CX COMPARE: MOV AL, [SI] ; 将 SI 指向的字符存放到 AL 寄存器中 CMP AL, [DI] ; 将 DI 指向的字符与 AL 中的字符进行比较 JNE NOMATCH ; 如果不相等,跳转到 NOMATCH 标签 INC SI ; 指向下一个字符 INC DI ; 指向下一个字符 INC CX ; 计数器 CX 加一 CMP AL, '$' ; 判断是否比较完整个字符串 JNE COMPARE ; 如果没有比较完,继续比较 MATCH: MOV DX, OFFSET MSG1 ; 将 MSG1 的地址存放到 DX 寄存器中 MOV AH, 09H ; 显示字符串 INT 21H ; 调用 DOS 中断显示字符串 JMP END ; 跳转到 END 标签 NOMATCH: MOV DX, OFFSET MSG2 ; 将 MSG2 的地址存放到 DX 寄存器中 MOV AH, 09H ; 显示字符串 INT 21H ; 调用 DOS 中断显示字符串 END: MOV AH, 4CH ; 退出程序 INT 21H ; 调用 DOS 中断退出程序 CODE ENDS END START ``` 程序使用了数据段和代码段,其中数据段定义了两个比较字符串 STR1 和 STR2,以及两个消息字符串 MSG1 和 MSG2。代码段中,程序首先将数据段的地址存放到数据段寄存器中,然后将要比较两个字符串的地址分别存放到 SI 和 DI 寄存器中,计数器 CX 初始化为零。接着程序使用循环来比较两个字符串中的每个字符,如果比较字符相同,计数器 CX 加一,否则直接跳转到 NOMATCH 标签。如果所有字符比较完了,程序会跳转到 MATCH 标签,显示消息 MSG1,否则跳转到 NOMATCH 标签,显示消息 MSG2。最后程序退出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值