彙編——從鍵盤輸入兩個字串,用串操作指令判斷是否相等
阿新 • • 發佈:2018-12-05
本文的程式碼示例是從鍵盤輸入兩個字串,然後藉助串操作指令 CMPSB 進行判斷。
CMPSB 指令的功能:用DS:[SI]所指的位元組單元內容減去ES:[DI]所指位元組單元內容,並且根據指令執行結果設定標誌位,然後根據DF的內容修改變址暫存器SI和DI的內容。若DF=,0,則根據串的型別是位元組還是字,將變址暫存器加1或加2(本文串型別是位元組,所以加1);若DF=1,則根據串的型別是位元組還是字,將變址暫存器減1或減2(本文串型別是位元組,所以減1)。
DATA SEGMENT STR1 DB 50 DB 50 DUP(?) COUNT EQU $-STR1 STR2 DB 50 DB 50 DUP(?) RESULT DB ? SAME DB 'The two strings are the same.','$' NSAME DB 'The two strings are not the same.','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,COUNT MOV DX,OFFSET STR1 ;輸入第一個字串 MOV AH,0AH INT 21H MOV AH,02H ;回車換行 MOV DL,0DH INT 21H MOV DL,0AH INT 21H MOV AH,0AH MOV DX,OFFSET STR2 ;輸入第二個字串 INT 21H MOV AH,02H ;回車換行 MOV DL,0DH INT 21H MOV DL,0AH INT 21H LEA SI,STR1 LEA DI,STR2 CLD LEA DX,SAME REPZ CMPSB JZ NEXT LEA DX,NSAME NEXT: MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START
注意點:
1.因為要用到ES段,所以在給資料段DS賦地址之後,還要給附加段ES賦地址。
2.因為要輸入兩個字串,並且最後有結果提示語輸出,所以在兩次輸入字串之後進行了回車換行。彙編中回車換行需要0AH和0DH一起使用。
3.CLD是將DF標誌位清零。