标题:
[菜鸟学汇编]代码分析(3)(代一生逍遥发)
[打印本页]
作者:
城市奔马
时间:
2006-11-25 13:30
标题:
[菜鸟学汇编]代码分析(3)(代一生逍遥发)
这节的目的是:学会使用ASSUME
DATAS1 SEGMENT ;数据段DATAS1定义
FIVE DB 5
DATAS1 ENDS
DATAS2 SEGMENT ;数据段DATAS2定义
SIX DB 6
DATAS2 ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS1,SS:STACKS
START:
MOV AX,DATAS1
MOV DS,AX
MOV AL,FIVE
ADD AX,30H
MOV DL,AL
MOV AH,2
INT 21H ;到这里,都不需要再解释,不懂的话看(1)(2)的内容
ASSUME DS:DATAS2 ;为什么要这样?把这三句的后两句拿掉,你可以发现输出为55
MOV AX,DATAS2 ;如果没有第一句,那么程序不能编译。详细解释见文章末尾。
MOV DS,AX
MOV AL,SIX
ADD AX,30H
MOV DL,AL
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START[br][br]
-=-=-=-=- 以下内容由
城市奔马
在
2006年11月25日 01:36pm
时添加 -=-=-=-=-
ASSUME DS:DATAS2
MOV AL,SIX
这里第一句告诉程序,找SIX这个东西,你要从DATAS2那里找。
第二句,把SIX的内容传给AL。可为什么是5,不是6呢?
因为,要把SIX的内容传给AL,首先要知道SIX的地址,地址是由段首地址和偏移地址构成。这里SIX就是段首,偏移地址为0。而段首地址,程序却记住了DATA1的段首地址。这就是为什么需要另外两句的原因![br][br]
-=-=-=-=- 以下内容由
城市奔马
在
2006年11月25日 01:37pm
时添加 -=-=-=-=-
没有第一句,结果就很明显了。
程序仍然会从DATA1里面找SIX,它不可能找到SIX这个标识符。所以程序会提示,SIX不可识别。
作者:
chinanic
时间:
2006-11-25 18:41
标题:
[菜鸟学汇编]代码分析(3)(代一生逍遥发)
强,偶拿汇编书看一好久,都没看完前面那些补码啊什么的。。。
作者:
一生逍遥
时间:
2006-11-26 10:20
标题:
[菜鸟学汇编]代码分析(3)(代一生逍遥发)
呵呵,可以发上来一起看啊。。。一起解决
欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/)
Powered by Discuz! 7.2