|
主题 : : 第2章汇编测试题目,大家;来看看我错在那里了 [待解决] |
回复[ 34次 ]
点击[ 1910次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-01-03 16:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28 |
下列地址信息与0020H:03EFH确定的内存地址不同的是__2___。
1、 5EFH
2、 203H:00EFH
3、 005EH:000FH
4、 0002H:05CFH
指令执行后AX中的数据是:__2__
mov ax,936aH
mov bx,79b8H
add al,bl
1、 1c22H
2、 9322H
3、 9422H
4、 1d22H
CPU从1000:0处开始执行指令当执行完1000:10处的指令后CPU几次修改IP__2___。
1000:0 mov ax,8
1000:3 jmp ax
1000:5 mov ax,0
1000:8 mov bx,ax
1000:10 jmp bx
1、 4
2、 5
3、 6
4、 7
在DEBUG中,__1__选项中的命令可以修改内存单元的内容
1、 a
2、 d
3、 t
4、 u
下列说法中正确的是:__4__
1、 一条指令被执行后,IP的值进行改变。
2、 当CPU执行完当前指令返回debug后CPU就闲下来不再进行工作。
3、 e命令可将所有内存单元中的数据进行改变。
4、 CPU将CS:IP所指向的内存单元中的数据当作指令来执行。
下列关于8086CPU的工作原理的描述错误的是__3___。
1、 汇编程序员可以通过对各种寄存器中内容的修改实现对CPU的控制。
2、 CPU在访问内存时,采用“段地址*16+偏移地址”的形式给出要访问的内存单元的物理地址。
3、 任意时刻,CS:IP指向的内容即是此刻CPU正在执行的指令。
4、 传送指令能够更改所有通用寄存器的内容。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-01-03 16:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42 |
CPU从1000:0处开始执行指令当执行完1000:10处的指令后CPU几次修改IP__2___。
================
对IP的修改,一是指令加载后会将IP修改为该指令后一条的指令的IP;二是,指令对IP的修改,比如一些跳换指令。楼主是忽略了第二点。这个在debug中就提到了,当然在后面的学习中会系统的介绍跳转指令。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-01-03 16:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:32
信誉值:0
注册日期:2007-07-14 19:06 |
|
|
|
|
|
[第3楼]
[ 回复时间:2008-01-03 18:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:50
信誉值:0
注册日期:2007-07-08 09:33 |
我觉得楼主把每道题在附上自己的分析更好,光让别人找个答案没什么大的意思,没准楼主有些错误的思想藏在问题的分析中呢~_~
通过做题把知识都掌握了才是目的啊~ | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-01-04 12:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28 |
CPU从1000:0处开始执行指令当执行完1000:10处的指令后CPU几次修改IP__2___。
================
我认为是5次,是因为每次cpu在执行命令前先找当当前IP所指的物理地址,然后就修改1次IP,然后在执行指令,这样一来,共有5条指令,第一条指令在执行前就修改1次,以指向下一条,依此执行完5条以后CPU应该指向下一条,所以是5次,不知道这样对不?
1000:0 mov ax,8
第1次改了以后IP停留在此条1000:3 jmp ax
第2次改了以后IP停留在此条1000:5 mov ax,0
第3次改了以后IP停留在此条1000:8 mov bx,ax
第4次改了以后IP停留在此条1000:10 jmp bx
第5次修改,是IP向下一条 | | |
|
|
|
|
[第5楼]
[ 回复时间:2008-01-04 13:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
|
|
|
|
|
[第6楼]
[ 回复时间:2008-01-04 13:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
cpu读入指令后自动修改ip,如果是jmp指令,再执行后又会修改一次ip。
也就是说执行jmp指令,cpu会两次修改ip的。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2008-01-05 23:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28 |
我只是有个不懂的是,这里有jmp ax,按说应该是个跳转,但这个应该跳到那里去?在这里应该是看不出来,既然看不出来,那如何能保证CPU可以继续的向下执行接下来的命令呢? | | |
|
|
|
|
[第8楼]
[ 回复时间:2008-01-06 15:25 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
CPU从1000:0处开始执行指令当执行完1000:10处的指令后CPU几次修改IP__2___。
1000:0 mov ax,8
1000:3 jmp ax
1000:5 mov ax,0
1000:8 mov bx,ax
1000:10 jmp bx
-------
这是楼上说的题。
怎么会看不出来呢,只要ax的值能确定,调转后的内存数据能知道就行了啊。
jmp ax执行的时候,ax=8,这个楼上应该明白吧,那就搞定了,剩下的就是jmp指令的事情了,具体的看p31页。
执行完jmp ax指令,就开始执行mov bx,ax了~ | | |
|
|
|
|
[第9楼]
[ 回复时间:2008-01-08 23:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-01-06 17:59 |
下列关于8086CPU的工作原理的描述错误的是__3___。
1、 汇编程序员可以通过对各种寄存器中内容的修改实现对CPU的控制。
2、 CPU在访问内存时,采用“段地址*16+偏移地址”的形式给出要访问的内存单元的物理地址。
3、 任意时刻,CS:IP指向的内容即是此刻CPU正在执行的指令。
4、 传送指令能够更改所有通用寄存器的内容。
//mov能更改cs和ip的内容吗? | | |
|
|
|
|
[第10楼]
[ 回复时间:2008-01-09 10:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:50
信誉值:0
注册日期:2007-07-08 09:33 |
wesom :mov能更改cs和ip的内容吗?
--------------------
p31 正数第二行有楼上的答案。 | | |
|
|
|
|
[第11楼]
[ 回复时间:2008-01-09 22:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28 |
下列关于8086CPU的工作原理的描述错误的是__3___。
这题我应该是没有错的 | | |
|
|
|
|
[第12楼]
[ 回复时间:2008-01-09 22:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28 |
CPU从1000:0处开始执行指令当执行完1000:10处的指令后CPU几次修改IP__2___。
1000:0 mov ax,8
1000:3 jmp ax
1000:5 mov ax,0
1000:8 mov bx,ax
1000:10 jmp bx
-------
这是楼上说的题。
怎么会看不出来呢,只要ax的值能确定,调转后的内存数据能知道就行了啊。
jmp ax执行的时候,ax=8,这个楼上应该明白吧,那就搞定了,剩下的就是jmp指令的事情了,具体的看p31页。
执行完jmp ax指令,就开始执行mov bx,ax了~
------------------
回复:
1000:0 mov ax,8
第1次改了以后IP停留在此条1000:3 jmp ax
1000:5 mov ax,0
第3次改了以后IP停留在此条1000:8 mov bx,ax
第4次改了以后IP停留在此条1000:10 jmp bx
第6次修改,是IP向下一条
应该是6次修改IP | | |
|
|
|
|
[第13楼]
[ 回复时间:2008-01-10 13:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
答案没错,不过这个"停留"怪怪的,说成:此时ip=?,cpu指向**指令更合适。
:)_ | | |
|
|
|
|
[第14楼]
[ 回复时间:2008-02-27 20:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2008-02-24 16:09 |
这一题我没好好看题,结果没通过第二章,没看指令内容只看到五条指令两个jmp就判断了7,看了指令内容后我觉得是6
1000:0 mov ax,8 执行后IP=3 一次
1000:3 jmp ax 执行后IP=5,然后IP=8两次
1000:5 mov ax,0
1000:8 mov bx,ax 执行后IP=10 一次
1000:10 jmp bx IP=next然后IP=8 两次
总共6次 | | |
|
|
|
|
[第15楼]
[ 回复时间:2008-03-11 22:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-07 20:58 |
1000:0 mov ax,8 读入后执行前IP=3第一次,执行后不变
1000:3 jmp ax 读入后执行前IP=5第二次,执行后IP=8第三次
1000:5 mov ax,0 因IP=8,所以不执行
1000:8 mov bx,ax 读入后执行前IP=a(就是10)第四次,执行后不变
1000:a jmp bx 读入后执行前IP=c第五次,执行后IP=8第六 次 | | |
|
|
|
|
[第16楼]
[ 回复时间:2008-03-31 12:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21 |
IP读入前就改变,然后视具体指令再确定是否改变,书上有的 | | |
|
|
|
|
[第17楼]
[ 回复时间:2008-04-10 11:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-02-28 13:57 |
jsh728:非常感谢你的讲解,但是"1000:8 mov bx,ax 读入后执行前IP=a(就是10)第四次,执行后不变"这里为什么读入执行前IP=A呢?,应该是B才对吧?就这一句不明白,其他的都能理解. | | |
|
|
|
|
[第18楼]
[ 回复时间:2008-04-11 13:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33 |
jsh728:非常感谢你的讲解,但是"1000:8 mov bx,ax 读入后执行前IP=a(就是10)第四次,执行后不变"这里为什么读入执行前IP=A呢?,应该是B才对吧?就这一句不明白,其他的都能理解.
------------------
回复:我也来发表一下看法,读入后执行前(应该是叫取指吧),IP修改为下一条待执行的指令的地址,因此IP=A,我想这样子理解会容易理解一点吧。当然这只是我的看法而已,我也只是一个菜鸟……呵呵…… | | |
|
|
|
|
[第19楼]
[ 回复时间:2008-04-12 17:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:6
注册日期:2008-04-05 14:23 |
1000:0 mov ax,8 读入后执行前IP=3第一次,执行后不变
1000:3 jmp ax 读入后执行前IP=5第二次,执行后IP=8第三次
1000:5 mov ax,0 因IP=8,所以不执行
1000:8 mov bx,ax 读入后执行前IP=a(就是10)第四次,执行后不变
1000:a jmp bx 读入后执行前IP=c第五次,执行后IP=8第六 次
------------------
回复:我觉着他说的有道理 | | |
|
|
|
|
[第20楼]
[ 回复时间:2008-04-14 20:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-04-01 21:36 |
CPU从1000:0处开始执行指令当执行完1000:10处的指令后CPU几次修改IP__2___。
1000:0 mov ax,8
1000:3 jmp ax
1000:5 mov ax,0
1000:8 mov bx,ax
1000:10 jmp bx
1、 4
2、 5
3、 6
4、 7
这个错了,应该是4次,mov ax,8一次 jmp ax一次,mov bx,ax一次,最后jmp bx,而那个mov ax,0被跳转了 | | |
|
|
|
|
[第21楼]
[ 回复时间:2008-04-19 15:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-04-19 13:41 |
我个人觉的是四次
1000:0 mov ax,8 执行完后ip=0003 修改一次
1000:3 jmp ax 读入这条执令时ip=0005(ip=ip+2)执行完后ip=0008(请注意跳转)所以这里修改了二次
1000:5 mov ax,0 这条执令没有被执行
1000:8 mov bx,ax 执行这条执令后ip=000a(ip=ip+2) 又修改一次
1000:10 jmp bx 这个偏移地址为10,我想这条执令好像也没有被执行,因为执行完mov bx,ax后ip=000a
而这里为10 | | |
|
|
|
|
[第22楼]
[ 回复时间:2008-04-21 21:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-04-20 22:34 |
仔细分析了上述的一些解答,觉得你们对CPU取指和执行指令的顺序理解不正确,这导致答案五花八门的原因,IP值应该是在取指后和执行JMP指令后才会更改的。下面是我的分析:
——当前IP=0,CPU从1000:0处取指(MOV AX,8),取指后IP=3
——CPU执行刚取的指令MOV AX,8,执行后IP依 | | |
|
|
|
|
[第23楼]
[ 回复时间:2008-04-21 21:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-04-20 22:34 |
仔细分析了上述的一些解答,觉得你们对CPU取指和执行指令的顺序理解不正确,这导致答案五花八门的原因,IP值应该是在取指后和执行JMP指令后才会更改的。下面是我的分析:
——当前IP=0,CPU从1000:0处取指(MOV AX,8),取指后IP=3
——CPU执行刚取的指令MOV AX,8 执行后IP依然为3,然后CPU从1000:3处取指(JMP AX),取指后IP=5
——CPU执行刚指的指令JMP AX 执行后IP的值变成了AX的值8,然后CPU从1000:8处取指(MOV BX,AX),取指后IP=10
——CPU执行刚指的指令MOV AX,BX 执行后IP的值依然为10,然后CPU从1000:10处取指(JMP BX)取指后IP=12
——CPU执行刚指的指令JMP BX后IP=8
总共六次 | | |
|
|
|
|
[第24楼]
[ 回复时间:2008-04-24 14:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-04-24 13:46 |
|
|
|
|
|
[第25楼]
[ 回复时间:2008-05-02 20:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-04-30 22:14 |
是6次,我就这样理解的,读指令时改变一次,运行时如果就jmp指令,运行后要变一次。
读 mov ax,8 读完后IP=3,运行完后IP不变,AX=8
读jmp ax 读完后IP=5,运行完后IP=8,这一句IP变了2次
1000:5 mov ax,0 这句跳过了没执行
读mov bx,ax 读完后IP=A,运行完后不变
读jmp bx 读完后IP=C,运行完后IP=8
算一下,是不是变了6次。 | | |
|
|
|
|
[第26楼]
[ 回复时间:2008-05-04 23:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33 |
上面的已经分析得这么清楚了,答案是6次,为什么还会有4次的结果呢?我个人觉得应该是你们对指令的执行没有真正理解,应该回去原书第一版P30继续认真地看看,好好地理解一下,呵呵 | | |
|
|
|
|
[第27楼]
[ 回复时间:2008-05-05 08:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-04-19 13:41 |
我个人觉的是四次
1000:0 mov ax,8 执行完后ip=0003 修改一次
1000:3 jmp ax 读入这条执令时ip=0005(ip=ip+2)执行完后ip=0008(请注意跳转)所以这里修改了二次
1000:5 mov ax,0 这条执令没有被执行
1000:8 mov bx,ax 执行这条执令后ip=000a(ip=ip+2) 又修改一次
1000:10 jmp bx 这个偏移地址为10,我想这条执令好像也没有被执行,因为执行完mov bx,ax后ip=000a
而这里为10....(应该是六次..10就是a)我晕,最后执行的那条执令修改二次 | | |
|
|
|
|
[第28楼]
[ 回复时间:2008-05-05 08:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-04-19 13:41 |
我个人觉的是四次
1000:0 mov ax,8 执行完后ip=0003 修改一次
1000:3 jmp ax 读入这条执令时ip=0005(ip=ip+2)执行完后ip=0008(请注意跳转)所以这里修改了二次
1000:5 mov ax,0 这条执令没有被执行
1000:8 mov bx,ax 执行这条执令后ip=000a(ip=ip+2) 又修改一次
1000:10 jmp bx 这个偏移地址为10,我想这条执令好像也没有被执行,因为执行完mov bx,ax后ip=000a
而这里为10....(应该是六次..10就是a)我晕,最后执行的那条执令修改二次 | | |
|
|
|
|
[第29楼]
[ 回复时间:2008-05-19 01:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-04 08:14 |
在DEBUG中,__1__选项中的命令可以修改内存单元的内容
1、 a
2、 d
3、 t
4、 u
我觉得应该选3,因为a指令写的程序不被执行,是无法改变内存单元的内容的。 | | |
|
|
|
|
[第30楼]
[ 回复时间:2008-05-19 09:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:56
信誉值:0
注册日期:2008-01-19 14:51 |
请问楼上的,指令是不是存在内存中呢?
a指令写入的指令就是写在内存中了。
t命令执行指令是有可能改变内存单元的内容,而不是一定。所以不能选3 | | |
|
|
|
|
[第31楼]
[ 回复时间:2008-05-20 19:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-20 15:04 |
CPU从1000:0处开始执行指令当执行完1000:10处的指令后CPU几次修改IP__2___。
1000:0 mov ax,8
1000:3 jmp ax
1000:5 mov ax,0
1000:8 mov bx,ax
1000:10 jmp bx
(1)当前cs=1000,ip=0,读入的指令是mov ax,8 读入后ip=ip+3=3(第一次修改ip)
(2)指令执行后,cs=1000,ip=3,读入的指令是jmp ax,读入后ip=ip+2=5(第二次修改ip)
(3)指令执行后,cs=1000,ip=8(第三次修改ip)
(4)当前cs=1000,ip=8,读入的指令是mov bx,ax,读入后ip=ip+2=10(第四次修改ip)
(5)当前参数=1000,ip=10,读入的指令是jmp bx,读入后ip=ip+2=12(第五次修改ip)
(6)指令执行后,ip=bx=ax=0(第六次修改ip)
自己的分析不知道对不对,供大家参考 | | |
|
|
|
|
[第32楼]
[ 回复时间:2008-05-31 14:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:13
注册日期:2008-04-28 19:46 |
|
|
|
|
|
[第33楼]
[ 回复时间:2008-07-22 15:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-20 18:33 |
根据cs:ip的地址
---------------------------------
执行t
---------------------------------
读入本次执行命令长度N,
改变ip=ip+N,
执行命令
---------------------------------
请问IP改变的过程是不是这样的? | | |
|
|
|
|
[第34楼]
[ 回复时间:2008-07-25 18:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-24 22:34 |
还是23楼的wjw0769讲的比较清楚。
“IP值应该是在取指后” 和 “执行JMP指令后”才会修改 | | |