读书人

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

发布时间: 2012-02-07 17:45:36 作者: rapoo

求两个十六位数和并在屏幕上显示问题
大家帮我看一下这个程序,哪儿错了,结果怎么不对(显示错误的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下,改完之後就可以示正的果

读书人网 >汇编语言

热点推荐