. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于第九章问题9.1的思考  [已解决] 回复[ 3次 ]   点击[ 361次 ]  
maskang
[帖 主]   [ 发表时间:2008-06-08 00:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2008-04-05 12:17
该例程实现了对当前代码段内代码的更改,但为什么对其运行没有影响呢?
代码如下:(我改动了一下)
assume cs:code
code segment
    s: 
    mov ax,bx
    mov si, offset s
    mov di, offset s1-----------改动(原为s0)
    mov ax,cs:[si]
    mov cs:[di],ax--------------定义为指令一
    s0:
    nop --------------------定义为指令二
    s1:----------------------------------改动(原并没标号)
    nop
code ends
end s
改动的目的是:确保来得及在处理器读取该地址时,指令已更改.
younggay
[第1楼]   [ 回复时间:2008-06-08 14:55 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
代码的更改只是复制一条代码到程序以前没有实际代码意义的代码处。对程序的运行能有什么影响呢?
你的程序复制运行到最后一条指令的时候就是s1处的被复制过来的mov ax,bx。
程序加载后的指令:
1408:0000 8BC3          MOV     AX,BX
1408:0002 BE0000        MOV     SI,0000
1408:0005 BF0F00        MOV     DI,000F
1408:0008 2E            CS:
1408:0009 8B04          MOV     AX,[SI]
1408:000B 2E            CS:
1408:000C 8905          MOV     [DI],AX
1408:000E 90            NOP
1408:000F 90            NOP
运行复制指令后的指令:
1408:0000 8BC3          MOV     AX,BX
1408:0002 BE0000        MOV     SI,0000
1408:0005 BF0F00        MOV     DI,000F
1408:0008 2E            CS:
1408:0009 8B04          MOV     AX,[SI]
1408:000B 2E            CS:
1408:000C 8905          MOV     [DI],AX
1408:000E 90            NOP
1408:000F 8BC3          MOV     AX,BX
楼主还有什么疑问么?
maskang
[第2楼]   [ 回复时间:2008-06-21 09:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2008-04-05 12:17
非常感谢,我明白了.
maskang
[第3楼]   [ 回复时间:2008-06-21 09:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2008-04-05 12:17
此贴由 贴主 于 [ 2008-06-21 09:49 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved