. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于实验8的问题,请指点  [待解决] 回复[ 2次 ]   点击[ 279次 ]  
tulesheng
[帖 主]   [ 发表时间:2010-06-20 11:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-05-30 05:34
13C4:0005 B80000        MOV     AX,0000 
13C4:0008 90            NOP 
13C4:0009 90            NOP 
13C4:000A BF0800        MOV     DI,0008 
13C4:000D BE2000        MOV     SI,0020 
13C4:0010 2E            CS: 
13C4:0011 8B04          MOV     AX,[SI] 
13C4:0013 2E            CS: 
13C4:0014 8905          MOV     [DI],AX 
13C4:0016 EBF0          JMP     0008 
13C4:0018 B80000        MOV     AX,0000 
13C4:001B CD21          INT     21 
13C4:001D B80000        MOV     AX,0000 
13C4:0020 EBF6          JMP     0018 
13C4:0022 90            NOP 
13C4:0023 B8C805        MOV     AX,05C8

从“13C4:0020 EBF6          JMP     0018 ”看F6表示的距离应该是18-22=-4(标号处的地址-jmp指令后的第一个字节的地址。但从补码上看F6又是-10

不解
请指点
scuzg
[第1楼]   [ 回复时间:2010-06-27 08:34 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
楼主这样算就对了:
        
 18h-22h
=24-34
=-10
towersimper
[第2楼]   [ 回复时间:2010-07-23 08:53 ]   [引用]   [回复]   [ top ] 
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16
13C4:0005 B80000        MOV     AX,0000 
13C4:0008 90            NOP 
13C4:0009 90            NOP 
13C4:000A BF0800        MOV     DI,0008 
13C4:000D BE2000        MOV     SI,0020 
13C4:0010 2E            CS: 
13C4:0011 8B04          MOV     AX,[SI] 
13C4:0013 2E            CS: 
13C4:0014 8905          MOV     [DI],AX 
13C4:0016 EBF0          JMP     0008 
13C4:0018 B80000        MOV     AX,0000 
13C4:001B CD21          INT     21 
13C4:001D B80000        MOV     AX,0000 
13C4:0020 EBF6          JMP     0018 
13C4:0022 90            NOP 
13C4:0023 B8C805        MOV     AX,05C8

从“13C4:0020 EBF6          JMP     0018 ”看F6表示的距离应该是18-22=-4(标号处的地址-jmp指令后的第一个字节的地址。但从补码上看F6又是-10

不解
请指点
------------------
回复:不可能把s1:mov ax,0   ;占3个字节
        int 21h           ;占2个字节
        mov ax,0          ;占3个字节
s2:jmp short s1           ;占2个字节
s2处的指令执行后跳至s1处指示的指令,向前偏移10个字节,即-10。在机器码中使用补码来表示负数的。
同学“13C4:0020 EBF6          JMP     0018 ”看F6表示的距离应该是18-22=-4算法是错的,因为因为这里的18和22都是十六进,18h-22h=-(22h-18h)其中被减数个位上的2要比减数8小,向被减数高位上2的借位,因为是十六进制,借来的1相当于16,而16+2-8=A(即十进制的10),所以最后结果为-AH或者-10。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved