首页
社区
课程
招聘
阅读汇编代码中的疑惑
发表于: 2011-4-6 16:33 5224

阅读汇编代码中的疑惑

2011-4-6 16:33
5224
在看KSSD中的某一章节中,有如下的代码:
实现(2)编写程序,比较两个字符串是否相同,并输出比较结果。


DATA SEGMENT
STRING1 DB "AnyThing is possible." ;定义字符串1
STRING2 DB "Anything is possible." ;定义字符串2
MESS1 DB "Matched",13,10,'$'
MESS2 DB "No Matched",13,10,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
PUSH DS ;DX入栈
XOR AX,AX ;AX清零
PUSH AX ;AX入栈
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,STRING1 ;设置源串地址
LEA DI,STRING2 ;设置目标串地址
CLD ;设置操作方向DF,从低地址到高地址进行搜索
MOV CX,21 ;设置比较字符串的长度,也是循环的长度。
REPZ CMPSB ;用该命令前,要先设置好DS:[SI] ,ES:[DI]
JZ MATCH ;比较字符串是否相等,相等则跳到MATCH,不相等则顺序执行。
LEA DX,MESS2 ;显示字符串为Unmatched
JMP DISP
MATCH: LEA DX,MESS1 ;比较结束后,全部相同显示MESS1,Matched
DISP:
POP AX ;这段代码是我加的,加了后就不能正确显示结果了
POP DS ;这段代码是我加的,加了后就不能正确显示结果了

MOV AH,09H
INT 21H ;显示字符串"Matched",或者是"Unmatched"
ENDS
END START

有点疑惑就是:
1,数据定义时MESS1 DB "Matched",13,10,'$'  中的13,10分别用来做什么用的?
2,代码中为什么要
PUSH DS                        ;DX入栈
PUSH AX                        ;AX入栈
3,如果我在代码的最后改成
DISP:   
          POP AX
          POP DS
          MOV AH,09H
          INT 21H                        ;显示字符串"Matched",或者是"Unmatched"
那么结果会完全不同,不明白为什么,请教了!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 1149
活跃值: (833)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
2
1   0dh,0ah 相当于 转义字符实现
00001101 13 0D  CR (carriage return)  回车键
00001010 10  0A  LF (NL line feed, new line) 换行键
2   保护作用
3  不知道 你为何意。。lz  该书看看汇编了。。。。
第三点 是句真话。。
2011-4-6 16:45
0
雪    币: 508
活跃值: (89)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
谢谢你,在边看代码边看书,我学习汇编目的很简单就是兴趣,和我工作关系不大
第三点是这样的,原来的代码中是没有最后那两句pop的,能正确的显示Mathed 或 No Matched,但是我加了那两个pop后,结果就变了
2011-4-6 16:58
0
雪    币: 508
活跃值: (89)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
还有想给看雪纠正一个笔误吧,就是在看雪的KSSD的第一篇汇编基础中的汇编入门程序练习1,其中练习2.2.3的代码好像不是来实现文中所提的功能的:
(3)从键盘上输入一个4位十六进制数,分别将该数以十六进制和十进制形式显示出来。

而是实现一个要求输入一个a-z中的字母,并回显它的前一个,它本身,和它的后一个,呵呵
2011-4-6 17:10
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
INT 21,9 - Print String

AH = 09
DS:DX = pointer to string ending in "$"

returns nothing

- outputs character string to STDOUT up to "$"
- backspace is treated as non-destructive
- if Ctrl-Break is detected, INT 23 is executed

你加了个pop ds那ds:dx指向的位置就不一定是你的字符串了,如果想恢复现场,应该在int 21h之后pop,然后使用INT 21,4C - Terminate Process With Return Code退出程序。

求2L头像那丫头姓名
2011-4-6 17:54
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
太深奥了,看不懂,现在猜知道和别人的差距不是一点半点,而是几年啊,
2011-4-6 19:42
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢楼主
2018-8-22 21:52
0
游客
登录 | 注册 方可回帖
返回
//