返回列表 发帖

[菜鸟学汇编]代码分析(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不可识别。

[菜鸟学汇编]代码分析(3)(代一生逍遥发)

呵呵,可以发上来一起看啊。。。一起解决

TOP

[菜鸟学汇编]代码分析(3)(代一生逍遥发)

强,偶拿汇编书看一好久,都没看完前面那些补码啊什么的。。。

TOP

返回列表 回复 发帖