| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 yijun 于 2014-10-27 23:32 编辑  
 
assume cs:code 
data segment 
        db 'conversation', 0 
data ends 
 
code segment 
        start:        mov ax, data 
                        mov ds, ax 
                        mov si, 0 
                        mov ax, 0b800h 
                        mov es, ax 
                        mov di, 12*160 
                         
                s:        cmp byte ptr [si], 0 
                        je ok                        ;如果是0跳出循环 
                        mov al, [si] 
                        mov es:[di], al 
                        inc si 
                        add di, 2 
                        mov bx, offset s - offset ok;设置从标号ok到标号s的转移位移 
                        ;mov ax, offset s 
                        ;mov ax, offset ok 
                        int 7ch;转移到标号s处 
                         
                ok:        nop 
                        mov ax, 4c00h 
                        int 21h 
code ends 
end start 
 
编译后debug 
 
debug 13_2.EXE 
 
-u 
1419:0000 B81814        MOV     AX,1418 
1419:0003 8ED8          MOV     DS,AX 
1419:0005 BE0000        MOV     SI,0000 
1419:0008 B800B8        MOV     AX,B800 
1419:000B 8EC0          MOV     ES,AX 
1419:000D BF8007        MOV     DI,0780 
1419:0010 803C00        CMP     BYTE PTR [SI],00 
1419:0013 740E          JZ      0023 
1419:0015 8A04          MOV     AL,[SI] 
1419:0017 26            ES: 
1419:0018 8805          MOV     [DI],AL 
1419:001A 46            INC     SI 
1419:001B 83C702        ADD     DI,+02 
1419:001E BBEDFF        MOV     BX,FFED 
1419:0021 CD7C          INT     7C 
1419:0023 90            NOP 
1419:0024 B8004C        MOV     AX,4C00 
1419:0027 CD21          INT     21 
 
这一句 
mov bx, offset s - offset ok 
为什么变成了 
MOV     BX,  FFED 
 
 
理论上应该是 
MOV     BX, 0023 - 0010      ;------->MOV     BX, 0013 
 
 
为什么会变成了FFED呢, 
我用这两句测试时 
;mov ax, offset s 
;mov ax, offset ok 
 
 
都能正确得到offset s  和offset ok的值 
 
 
 |   
 
 
 
 |