`
javababy1
  • 浏览: 1169977 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

汇编一日一学(8)--比较两个字符串

 
阅读更多

;试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否完全相同,

;若相同则显示'MATCH',若不相同则显示'NO MATCH'.

DATA SEGMENT

string1 DB "I a$"

string2 DB "I am a student!$"

YES DB "MATCH", 0DH, 0AH, '$'

NO DB "NO MATCH", 0DH, 0AH, '$'

DATA ENDS

CODE SEGMENT

MAIN PROC FAR

ASSUME CS:CODE, DS:DATA, ES:DATA

STRAT:

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,data

MOV DS,AX

MOV ES,AX

;初始化

MOV AX,0

MOV CX,0

LEA SI,string1

LEA DI,string2

length1: ;string1的长度

SUB [SI],'$'

JZ length2

INC SI

INC AX

JNZ length1

length2: ;string2的长度

SUB [DI],'$'

JZ compare

INC DI

INC CX

JNZ length2

compare: ;设置CX为最大长度

CMP CX,AX

JGE lop

MOV CX,AX

lop:

LEASI, string1;设置串比较指令的初值

LEADI, string2

CLD

REPE

CMPSB;串比较

JNEdispNo

LEADX, YES;显示MATCH

JMPdisplay

dispNo:LEADX, NO;显示NO MATCH

display:MOVAH, 9;显示一个字符串的DOS调用

INT21H

RET

MAIN ENDP

CODE ENDS

END STRAT

//////////////////////////////////////////////////////

指令的基本功能:CLD DF=0

STD DF=1

/////////////////////////////////////////////////////

Direction Flag (DF)

- 方向标志,在串处理指令中控制处理信息的方向用。

当DF为1时,每次操作后使变址寄存器SI和DI减量,这样就使串

处理从高地址向低地址方向处理。当DF为0时,则使SI和DI增量

,使串处理从低地址向高地址方向处理。

///////////////////////////////////////////////////

有效地址传送器 LEA

相等/为零时重复执行串指令 REPE/REPZ

指令的汇编格式:REPE / REPZ (CX)=比较/扫描的次数

指令的基本功能:① (CX)!=0或ZF=0时,结束执行串指令,否则继续② ~ ④

   ② (CX)←(CX)-1

   ③ 执行串指令(CMPS或SCAS)

   ④ 重复执行①

不等/不为零时重复执行串指令 REPNE / PEPNZ

指令的汇编格式:REPNE / PEPNZ (CX)=比较/扫描的次数

指令的基本功能:① (CX)!=0或ZF=1,结束执行串指令,否则继续② ~ ④

   ② (CX)←(CX)-1

   ③ 执行串指令(CMPS或SCAS)

   ④ 重复执行①

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics