当前位置: 代码迷 >> 汇编语言 >> 检测示范点13.1 (2)
  详细解决方案

检测示范点13.1 (2)

热度:172   发布时间:2016-05-02 04:28:18.0
检测试点13.1 (2)
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的值
 
------解决思路----------------------
offset s - offset ok,s 在前面 (0010) ok 在后面 (0023) 的啊,即 应该是 0010-0023 吧,而不是你上面说的 0023-0010
  相关解决方案