首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

求两个十六位数和并在屏幕上显示有关问题

2012-02-07 
求两个十六位数和并在屏幕上显示问题大家帮我看一下这个程序,哪儿错了,结果怎么不对(显示错误的0002)啊Ass

求两个十六位数和并在屏幕上显示问题
大家帮我看一下这个程序,哪儿错了,结果怎么不对(显示错误的0002)啊

Assembly code
DATA    SEGMENT        DW    1234H        DW    5678HBUF        DB    4 DUP (?)        DB    '$'DATA    ENDSSTACK    SEGMENT PARA STACK 'STACK'POINT    DB    100 DUP(?)STACK    ENDSCODE    SEGMENT        ASSUME    CS:CODE, DS:DATA, SS:STACKSTART:    MOV    AX, DATA        MOV    DS, AX        MOV    AX, STACK                MOV     SS, AX        MOV    SP, OFFSET POINT + 100        MOV    AX, [0000]        ADD    AX, [0002]        MOV    BL, 4        MOV    DI, OFFSET BUF        MOV    CL, 12NEXT0:    ROR    AX, CL        MOV    DL, AL        AND    DL, 0FH        ADD    DL, 30H        CMP    DL, 3AH        JC    NEXT1        ADD    DL, 7NEXT1:    MOV    [DI], DL        INC    DI        DEC    BL        JNZ    NEXT0        MOV DX, OFFSET BUF        MOV    AH, 09h        INT    21H        MOV    AH, 4CH        INT 21HCODE    ENDS        END    START    


[解决办法]
那两指令应采用下面这样的形式:
MOV AX, ds:[0000]
ADD AX, ds:[0002]
这是因为不加上 DS: 的段修饰符的话,汇编程序会把 [0002] 当做 2 这样的立即数,而不是你初衷的内存地址。这算是个约定吧,可能来源最初汇编程序设计上的问题,但却一直保留下来了。
[解决办法]
MOV AX, [0000]
ADD AX, [0002]
 将上面的改成
MOV AX, ds:[0000]
ADD AX, ds:[0002]

我在dos下試過,改完之後就可以顯示正確的結果

热点排行