. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  8位位移=标号处的地址-JMP指令后第一个字节的地址,这个“8位位移”具体是什么含义?  [待解决] 回复[ 5次 ]   点击[ 593次 ]  
ycxdtdz
[帖 主]   [ 发表时间:2012-08-11 15:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-12-11 10:36
8位位移=标号处的地址-JMP指令后第一个字节的地址,这个“8位位移”具体是什么含义?4
fpamc
[第1楼]   [ 回复时间:2012-08-13 07:34 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:4
注册日期:2012-01-01 16:36
-128~127这个范围。。
就是jmp指令的下一条指令的第一个字节的地址+(-128~127)这个范围的数。
就能实现转移到那个地址。。
zanghufei
[第2楼]   [ 回复时间:2012-09-15 13:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2012-08-28 15:01
9.3 章节   建议楼主仔细阅读下..
caoqun523
[第3楼]   [ 回复时间:2012-11-08 00:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-01 20:45
(8位空间)11111111=256也就是说往上-128,往下127个字节的距离
hky987654321
[第4楼]   [ 回复时间:2013-08-04 23:52 ]   [引用]   [回复]   [ top ] 
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25
“8位位移”出现得确实突兀。
先不讲位移。“8位”就是“字节范围”的意思。可以这样理解,字节由8个2进制位组成,每个2进制位有0和1两种状态,因此,以字节为范围,包含的2进制位共有256个组合,即从8个0000 0000至8个1111 1111,用16进制数表示为从00H ~ FFH。
“8位位移”就是以jmp处的“内存地址”为原点0,在其上下,共256个地址的范围内cs:ip发生的位置移动。当cs:ip移向地址编码小于jmp处时,则位移为负值[-128~0),用补码表示这些负值;当移向地址编码大于jmp处时,位移为正数(0~127],用原码表示这些数。
ackzoro
[第5楼]   [ 回复时间:2015-09-25 17:50 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-01-07 21:39
8位位移,即8位长度的位移。

例如:
11110000

标号处的地址比较好理解,就是标号所在的偏移地址。

JMP指令后第一个字节的地址
这个需要解释下CPU运行指令的过程,首先会读入jmp指令存到缓存区,然后修改IP指向下一个指令
即ip = ip + jmp指令长度,然后再执行缓存区的jmp指令。
这就是为什么是JMP指令后的第一个字节的原因了。

上面的内容都明白了就比较好理解了。
举个例子
0BBD:0000  s: MOV AX, 0000H
0BBD:0003     JMP s
0BBD:0005     ADD AX, 0001H

s的偏移地址为 0000
读入jmp指令到缓存区后,偏移地址0003 + 2(jmp指令长度) = 0005H
8位位移等于多少?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved