. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(CPU工作原理)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第2章汇编测试题目,大家;来看看我错在那里了  [待解决] 回复[ 34次 ]   点击[ 1910次 ]  
cdzjf
[帖 主]   [ 发表时间: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、 传送指令能够更改所有通用寄存器的内容。
fishboy
[第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中就提到了,当然在后面的学习中会系统的介绍跳转指令。
happy
[第2楼]   [ 回复时间:2008-01-03 16:44 ]   [引用]   [回复]   [ top ] 
荣誉值:32
信誉值:0
注册日期:2007-07-14 19:06
同意楼上的说法,楼主的5次是怎么得到的呢?
zhuzhu
[第3楼]   [ 回复时间:2008-01-03 18:08 ]   [引用]   [回复]   [ top ] 
荣誉值:50
信誉值:0
注册日期:2007-07-08 09:33
我觉得楼主把每道题在附上自己的分析更好,光让别人找个答案没什么大的意思,没准楼主有些错误的思想藏在问题的分析中呢~_~

通过做题把知识都掌握了才是目的啊~
cdzjf
[第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向下一条
mouse
[第5楼]   [ 回复时间:2008-01-04 13:20 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
应该是6次吧,楼上的再想想
mouse
[第6楼]   [ 回复时间:2008-01-04 13:21 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
cpu读入指令后自动修改ip,如果是jmp指令,再执行后又会修改一次ip。
也就是说执行jmp指令,cpu会两次修改ip的。
cdzjf
[第7楼]   [ 回复时间:2008-01-05 23:58 ]   [引用]   [回复]   [ top ] 
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28
我只是有个不懂的是,这里有jmp ax,按说应该是个跳转,但这个应该跳到那里去?在这里应该是看不出来,既然看不出来,那如何能保证CPU可以继续的向下执行接下来的命令呢?
mouse
[第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了~
wesom
[第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的内容吗?
zhuzhu
[第10楼]   [ 回复时间:2008-01-09 10:38 ]   [引用]   [回复]   [ top ] 
荣誉值:50
信誉值:0
注册日期:2007-07-08 09:33
wesom :mov能更改cs和ip的内容吗?
--------------------
p31 正数第二行有楼上的答案。
cdzjf
[第11楼]   [ 回复时间:2008-01-09 22:38 ]   [引用]   [回复]   [ top ] 
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28
下列关于8086CPU的工作原理的描述错误的是__3___。  

这题我应该是没有错的
cdzjf
[第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
mouse
[第13楼]   [ 回复时间:2008-01-10 13:47 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
答案没错,不过这个"停留"怪怪的,说成:此时ip=?,cpu指向**指令更合适。  

:)_
zjszshqd
[第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次
jsh728
[第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第六 次
debugkkk
[第16楼]   [ 回复时间:2008-03-31 12:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21
IP读入前就改变,然后视具体指令再确定是否改变,书上有的
hexp
[第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才对吧?就这一句不明白,其他的都能理解.
duckgaga
[第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,我想这样子理解会容易理解一点吧。当然这只是我的看法而已,我也只是一个菜鸟……呵呵……
wlbbeyond
[第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第六 次
------------------
回复:我觉着他说的有道理
jinjianshuai
[第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被跳转了
dsnrpfpf
[第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
wjw0769
[第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依
wjw0769
[第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
总共六次
lz123
[第24楼]   [ 回复时间:2008-04-24 14:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-24 13:46
我也觉得是四次 呵呵
y2j2c1
[第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次。
duckgaga
[第26楼]   [ 回复时间:2008-05-04 23:48 ]   [引用]   [回复]   [ top ] 
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33
上面的已经分析得这么清楚了,答案是6次,为什么还会有4次的结果呢?我个人觉得应该是你们对指令的执行没有真正理解,应该回去原书第一版P30继续认真地看看,好好地理解一下,呵呵
dsnrpfpf
[第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)我晕,最后执行的那条执令修改二次
dsnrpfpf
[第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)我晕,最后执行的那条执令修改二次
bennie_xie
[第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指令写的程序不被执行,是无法改变内存单元的内容的。
deepblue
[第30楼]   [ 回复时间:2008-05-19 09:24 ]   [引用]   [回复]   [ top ] 
荣誉值:56
信誉值:0
注册日期:2008-01-19 14:51
请问楼上的,指令是不是存在内存中呢?
a指令写入的指令就是写在内存中了。

t命令执行指令是有可能改变内存单元的内容,而不是一定。所以不能选3
szjrabbit
[第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)

自己的分析不知道对不对,供大家参考
hidden
[第32楼]   [ 回复时间:2008-05-31 14:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:13
注册日期:2008-04-28 19:46
不明白的 看一下25楼的答案
hardyleumg
[第33楼]   [ 回复时间:2008-07-22 15:11 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-20 18:33
根据cs:ip的地址
---------------------------------
执行t
---------------------------------
读入本次执行命令长度N,
改变ip=ip+N,
执行命令
---------------------------------
请问IP改变的过程是不是这样的?
zhangmh7
[第34楼]   [ 回复时间:2008-07-25 18:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-24 22:34
还是23楼的wjw0769讲的比较清楚。
“IP值应该是在取指后” 和 “执行JMP指令后”才会修改
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved