当前位置: 代码迷 >> 汇编语言 >> 容易的汇编程序,求大神帮解释一下其中几段
  详细解决方案

容易的汇编程序,求大神帮解释一下其中几段

热度:209   发布时间:2016-05-02 04:36:07.0
简单的汇编程序,求大神帮解释一下其中几段
这是一个判断两个字符串是否相等的程序,需要用户输入字符串。
源代码:

DATAS SEGMENT
    BUF DB 10H,?,10 DUP(?)  请问这里的10H,? 是做什么用的?直接写成BUF 10 DUP(?)  为什么运行时还没等用户输入,结果直接就是“Y” 
    BUF1 DB 10H,?,10 DUP(?)
DATAS ENDS
CODES SEGMENT
    ASSUME cs:codes, ES:DATAS,DS:DATAS   ;
START:
    MOV AX,DATAS
    MOV DS,AX
    LEA DX,BUF

    MOV AH,0AH
    INT 21H

    MOV DL,0AH
    MOV AH,02H
    INT 21H

    MOV AX,DATAS
    MOV DS,AX
    LEA DX,BUF1

    MOV AH,0AH
    INT 21H

    MOV DL,0AH
    MOV AH,02H
    INT 21H

    MOV AX,DATAS
    MOV ES,AX
    LEA SI,BUF
    LEA DI,BUF1
   ;比较字符串长度是否相等
    MOV AL,ES:[SI+1]  ;为什么si+1 ?如果没有加1 指向的是什么?[/color]
    MOV BL,DS:[DI+1]
    CMP AL,BL
    JNZ NO
    ;比较字符串的内容是否相等
    mov cl, [si+1]  ;*设置CX计数 这里设置的计数器对后面字符串内容的循环比较有影响吗?
    mov ch,0  ;************
    inc si  ;调指针指向后面实际输入的字符  为什么si+1 之后才指向后面实际输入的字符?如果没有加1 指向的是什么?
    inc di  ;************
    
    CM:
    INC SI
    INC DI
    MOV AL,ES:[SI]
    MOV BL,DS:[DI]
    CMP AL,BL
    JNZ NO
    LOOP CM
    
    mov dl, 'Y'  ;************显示‘Y’
    mov ah, 2  ;************
    int 21h  ;************
    jmp exit  ;************跳过显示‘N’的代码
    
    NO:
    MOV DL,'N'
    MOV AH,02H
    INT 21H

exit:    ;************
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

问题都在代码后面用红色字体标出来了,求教各位大神指点

------解决方案--------------------
引用:
非常感谢!!!!!
不好意思,再追问一下,以下两句

num1 db ? ;最终接收的字符数会放这里
chars1 db 10h dup(?) ;接收的字符会放在这里(包括最后输入的回车符)

最终用户的输入是存在num1与num2 当中, 那么chars1 与chars2 的功能是什么啊??

存你两次输入的字符