这节的目的是:学会使用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不可识别。 |