首页
社区
课程
招聘
编程语言
发表于: 2009-6-7 22:45 5159

编程语言

2009-6-7 22:45
5159
那位老大帮忙做下这道题,将3条指令(mov ax,1;add ax,ax;jmp 2000:0003)写入2000:0开始的内存单元,并 利用这3条指令计算2的8次方。
我是这样做的,首先进入debug
a 2000:0000
2000:0000 mov ax,1
2000:0003 add ax ax
2000:0005 jmp 2000:0003
2000:0007
不知道剩下的应该怎么完成,请高人指点一二

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
2
没有看懂楼主的问题
2009-6-7 23:14
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
DEBUG下执行 在2000:0000地址A命令输入mov ax,1   add ax,ax     jmp 2000:0003
后T或P命令执行后可观察到AX值的变化
第一次执行:1+1=2
二: 2+2=4
三:4+4=8
跳转2次实现2的3次方

那么跳转几次实现2的8次方
LZ试试
2000:0007处无需设置 应为2000:0005无条件跳转
2009-6-8 09:46
0
雪    币: 59
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
虽然没看懂,但支持一下
2009-6-8 10:59
0
雪    币: 290
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
貌似我记得这是王爽汇编语言上的一道题
2009-6-8 12:58
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
的确是王爽里没按的 一道题。我按照3楼的指点做了,可是结果不一样,将结果传上,看问题出在哪里:
-a 2000:0000
2000:0000 mov ax,1
2000:0003 add ax,ax
2000:0005 jmp 2000:0003
2000:0007
-t

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1376  ES=1376  SS=1376  CS=1376  IP=0102   NV UP EI NG NZ NA PO NC
1376:0102 0000          ADD     [BX+SI],AL                         DS:0000=CD
不知道执行T命令,显示的ax为什么没有变化
2009-6-8 14:29
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这样不是无限循环啊
2009-6-8 14:33
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
哪应该怎么操作啊,请高人将过程贴出,好好学习下
2009-6-8 14:36
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
2000:0000 mov ecx,7
2000:0003 mov eax,2
2000:0006 add eax,eax
2000:0007 loop 2000:0006

很久没用DEBUG了
2009-6-8 14:45
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
可惜这是4条语句
2009-6-8 14:46
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
9楼的不符合题目的要求啊!难道汇编真的这么难吗?好多高手都倒了,呜呜呜
2009-6-8 14:54
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
如果说3条指令来算2的8次方,我想一定要用到循环指令吧
2000:0000 mov ecx,7                 ;循环7次
2000:0003 mov eax,2                ;赋初值
2000:0006 add eax,eax             ;计算
2000:0007 loop 2000:0006        ;判断ecx的值,如果不等于零 跳转

对与6楼的问题
在debug中使用-T时,应该注意cs:ip的值
如果没有指向程序内存单元,请用R来改变

至于3条指令搞定,等待大大的解答
2009-6-8 15:02
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这是王爽汇编里的一道实验题,本来感觉应该是很基础的东西,只因为本人汇编学的差,才出来请教,没有想到这么复杂。对于12楼的答复不很满意,其距离题目的要求太远。其所说的“在debug中使用-T时,应该注意cs:ip的值”,是不是没有注意到指令中jmp 2000:0003就是将cs指定为2000,将ip指定为0003,已经实现了指令的循环,难道还需要再用r cs、r ip来改写段地址和偏移地址吗?期待高人解答!!!
2009-6-8 16:32
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
你注意一下我3楼的帖  我们是在2000:0000处执行的指令

你虽然修改了2000:0000-2000:0007之间的指令  但是你没有从2000:0000开始去执行指令

既然指令在2000:0000开始 应修改CS+IP

补充一句DEBUG下是WINDOW模拟的16位DOS 楼上各位将段寄存器看成32位的要出错
不能EAX
2009-6-8 17:07
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
14楼的看来比较专业,能把整个过程详细说一下吗?叫我们开开脑!!
2009-6-8 17:34
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
debug
-a
????:???? jmp 2000:0000
????:????
-a 2000:0000
2000:0000 mov ax,1
2000:0003 add ax,ax
2000:0005 jmp 2000:0003
2000:0007

T或P执行后 CS IP指向 2000:0000 实现修改CS+IP 实现方法很多
接下来实现的 大家试试
观察AX的值 注意AX的值是十六进制
2009-6-9 00:51
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
用a写好代码后

用r修改CS:IP的值指向你的代码地址

然后执行
2009-6-10 07:59
0
游客
登录 | 注册 方可回帖
返回
//