. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于2的8次方的指令执行结果!!!  [待解决] 回复[ 12次 ]   点击[ 859次 ]  
huibianzhiwang
[帖 主]   [ 发表时间:2011-07-29 00:50 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2011-07-19 22:32
按照书中的思路,我在内存地址2000:0处输入指令: 
                                     mov ax,2
                                add ax,ax 
                                jmp 2000:2003
但是执行的时候,执行结果却并不是预期效果!出现好几种结果,
(1)第一次结果是2 其余每次都是4
(2)第一次是2,二三次是4 第五六次是8 ,然后居然变成了10
。。。。。。。。。。。。
我注意了cs:ip的指向,所以排除这点。有试过的朋友吗?我的问题出在哪里?你有同样类似的情况吗?或者其它什么的。
shihty5
[第1楼]   [ 回复时间:2011-07-29 01:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-07-29 01:16
为什么你的jmp是2000:2003?
是不是想写   jmp 2000:3
huibianzhiwang
[第2楼]   [ 回复时间:2011-07-29 07:27 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2011-07-19 22:32
没注意写错了,是这个意思!!!
chinatree
[第3楼]   [ 回复时间:2011-07-29 08:30 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
jmp 2000:3是死循环了吧
huibianzhiwang
[第4楼]   [ 回复时间:2011-07-30 22:47 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2011-07-19 22:32
死循环?这道题肯定是手动控制的~~~
yulin3192
[第5楼]   [ 回复时间:2011-08-03 13:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-07-29 12:18
这个郁闷了
不 会
kkfyjh
[第6楼]   [ 回复时间:2011-08-03 21:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-02 09:37
这是个死循环的,2000:0005执行完后又回到2000:0003,然后一直循环。。。
chinatree
[第7楼]   [ 回复时间:2011-08-03 22:29 ]   [引用]   [回复]   [ top ] 
荣誉值:118
信誉值:0
注册日期:2011-07-07 22:59
干脆用cx+loop啦
xxx7xxx
[第8楼]   [ 回复时间:2011-08-16 15:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-06 19:28
我也是这个问题。
minidxer
[第9楼]   [ 回复时间:2011-08-22 22:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-08-18 06:18
mov ax,1
add ax,ax
jmp 2000:0003

-------------------

1 执行 mov ax,1   执行后  ax=1; cs=2000; ip=3;
2 执行 add ax,ax  执行后  ax=2; cs=2000; ip=5;
3 执行 jmp 2000:0003  执行后 ax=2 cs=2000 ip=3;  (程序跳转到2000:0003处执行)
4 执行 add ax,ax 执行后 ax=4; cs=2000; ip=5;
5 执行 jmp 2000:0003  执行后 ax=4 cs=2000 ip=3;  (程序跳转到2000:0003处执行)
6 执行 add ax,ax 执行后 ax=8; cs=2000; ip=5;
....

 
引用:“(2)第一次是2,二三次是4 第五六次是8 ,然后居然变成了10 
。。。。。。。。。。。。 


10是对的 这里的10是十六进制形式表示的  10h的十进制是32 也就是2的5此方。


当程序执行结果 为 100H时 也就是我们要得结果了  2的8此方等于256 用十六进制表示是 100H



不知道你懂了没有
wuyudong
[第10楼]   [ 回复时间:2014-11-06 23:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-28 17:24
很详细
1461299415
[第11楼]   [ 回复时间:2014-11-13 11:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-11-08 19:06
对,就是这样!
tanyutang
[第12楼]   [ 回复时间:2017-03-29 23:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2017-03-08 18:22
mov ax,1 中的1是16进制  执行相加也是16进制相加 ,第五六次是8 是因为8加8等于16  这个是我们十进制表示  里面是用16进制表示就是10H  依次类推
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved