. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  [求]检测点3.1的标准答案  [待解决] 回复[ 21次 ]   点击[ 1083次 ]  
csta
[帖 主]   [ 发表时间:2009-04-08 08:12 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-08 01:35
如题...标题党了..
mess
[第1楼]   [ 回复时间:2009-04-08 16:39 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
如果报名了网站的汇编学习活动,可以把作业直接发到博客的汇编作业下面,有人给指出错误。

下面的是答案,建议自己先最后再对照,进而反思错误的地方 
第一空:2662H  
第二空:E626H  
第三空:E626H  
第四空:2662H  
第五空:D6E6H  
第六空:FD48H  
第七空:2C14H  
第八空:0000H  
第九空:00E6H  
第十空:0000H  
第十一空:0026H  
第十二空:000CH
sysop
[第2楼]   [ 回复时间:2009-04-15 10:16 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:1
注册日期:2008-06-04 14:46
我这个就做错了,
搞错了地位和高位的对应关系。。。。
yakoo5
[第3楼]   [ 回复时间:2009-04-16 17:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-16 15:54
前3句:
mov ax,1
mov ds,ax
mov ax,[0000]

执行第一句后:ax=0001H
执行第二句后:ds=0001H
执行第三句后:ax应该等于内存中从00010H地址开始的2个字节的内容,而其是从低位到高位存放。

我错在了DS上面,知道DS=0001H,但是读内存的时却是从0000:0001开始读的。
下次要注意了。
zhenglxd
[第4楼]   [ 回复时间:2009-04-17 14:17 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
我的答案 我的作业中都写了我的思考和分析答题过程 有兴趣的可以到我博客来看看 我也是初学的

检测点3.1
1.下面的程序执行前,ax=0,bx=0,写出每条汇编指令执行完后的相关寄存器的值.
mov ax,1     #分析:1送进ax
mov ds,ax    #分析:ax送进ds,即ds=1
mov ax,[0000]  AX=(2662)H
#分析: ds=1,ds:0=0:10H=62,ds:1=0:11H=26

mov bx,[0001]  BX=(E626)H
#分析: [01]=26,[02]=E6

mov ax,bx      AX=(E626)H #分析AX=BX
mov ax,[0000]  AX=(2662)H
mov bx,[0002]  BX=(D6E6)H
#分析 [02]=E6,[03]=D6

add ax,bx      AX=(FD48)H #分析ax=ax+bx
add ax,[0004]  AX=(2C14)
#分析 [04]=CC [05]=2E ax=ax+2Ecc

mov ax,0       AX=(0) #分析ax=0
mov al,[0002]  AX=(00E6)
#分析 [02]=E6 al=al+e6

mov bx,0       BX=(0) #分析BX=0
mov bl,[000c]  BX=(0026)H
#分析 [c]=26 bl=bl+26H

add al,bl      AX=(000c)
#分析 al=al+bl 超过的位数舍弃

2.各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,bX=0;
(1) 写出cpu执行指令序列(用汇编指令写出)
(2) 写出cpu执行每条指令后,cs,ip和相关寄存器中的数据.
(3) 再次体会:数据和程序有区别吗?如何确定内存中哪些信息是数据,哪些是程序?
答:
1 mov ax,6622H
# 此时CS=2000H,IP=3,DS=1000H,AX=6622H,BX=0
2 jmp 0ff0:0100
# 此时cs=0FF0H,IP=0100H,DS=1000H,AX=6622H,BX=0
# 注:实际指向物理内存为10000H,即指向1000:0
3 mov ax,2000H
# 此时cs=0FF0H,IP=0103H,DS=1000H,AX=2000H,BX=0
4 mov ds,ax
# 此时cs=0FF0H,IP=0105H,DS=2000H,AX=2000H,BX=0
5 mov ax,[0008]
# 此时cs=0FF0H,IP=0108H,DS=2000H,AX=C389H,BX=0
6 mov ax,[0002]
# 此时cs=0FF0H,IP=010BH,DS=2000H,AX=EA66H,BX=0

体会:
数据和程序在计算机中都是以2进制形式存放于每个内存单元中,
任何时候CS:IP(代码段寄存器和指令指针寄存器)所指向的物理地址段存放着当前要执行的指令(程序),而没有被cs:IP直接指向的时候他们又可以被当作独立的数据来调用。

深入理解:
内存单元中只存放二进制信息,指令和数据都是二进制信息的表现形式,
或者说cpu处理这些二进制信息时使用的方式,任何时候
被cs:ip指向的 二进制信息被当作程序或者指令来处理,在其他时候又可以被当作数据来调用。
jjy5331
[第5楼]   [ 回复时间:2009-04-20 19:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-20 09:42
对于4楼回答的测试点3。1的第一题的mov al,[0002]这句我认为是al是低位的所以取了e6如果是 mov ah,[0002] ah是高位的那就要取d6了。后面mov bl,[000c]同前面的一样是低位所以取26如果是mov bh,[000c]
那就要取e6了。还有最后的add al,bl 是e6+26=10c 因为结果要送入al这个低位,只能取两位所以从后向前取两位0c.这是我个人的见解不知道对不对。大家来讨论一下。
qvbear
[第6楼]   [ 回复时间:2009-04-21 03:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-07-31 18:57
对于4楼回答的测试点3。1的第一题的mov al,[0002]这句我认为是al是低位的所以取了e6如果是 mov ah,[0002] ah是高位的那就要取d6了。后面mov bl,[000c]同前面的一样是低位所以取26如果是mov bh,[000c]
那就要取e6了。还有最后的add al,bl 是e6+26=10c 因为结果要送入al这个低位,只能取两位所以从后向前取两位0c.这是我个人的见解不知道对不对。大家来讨论一下。
------------------


回复:我觉得你的说法是错误的

      mov al,[0002]   或者   mov ah,[0002]

     都应该取 e6 的

这是我的想法不知道对不对
qvbear
[第7楼]   [ 回复时间:2009-04-21 03:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2007-07-31 18:57
mov al,[0002]   或者   mov ah,[0002]


在执行这些命令的时候
操作的寄存器高位和低位都是一个字节
所以取得的数据也是以字节为单位的
所以应该都是取得e6   和后面的d6 没有任何关系的


请问我说的是对还是错?
1169205963
[第8楼]   [ 回复时间:2009-04-24 09:11 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-24 09:00
mov ax,1 
mov ds,ax 
mov ax,[0000] 

执行第一句后:ax=0001H 
执行第二句后:ds=0001H 
执行第三句后:ax应该等于内存中从00010H地址开始的2个字节的内容,而其是从低位到高位存放。 


不解的而且依旧不解:
我知道ds=0001H,所以段地址应该是0010,读内存的时却是从0010:0000开始读的。ds=1,ds:0=0:10H=62 感觉不能理解- -!
1169205963
[第9楼]   [ 回复时间:2009-04-24 09:12 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-24 09:00
回复:[第4楼]
------------------
检测点3.1 
1.下面的程序执行前,ax=0,bx=0,写出每条汇编指令执行完后的相关寄存器的值. 
mov ax,1     #分析:1送进ax 
mov ds,ax    #分析:ax送进ds,即ds=1 
mov ax,[0000]  AX=(2662)H 
#分析: ds=1,ds:0=0:10H=62,ds:1=0:11H=26       ||| 既然ds=1 了,为何ds:0=0:10H 而不是ds:0=1:10H
lyh1984
[第10楼]   [ 回复时间:2009-05-29 17:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-05-25 09:01
.下面的程序执行前,ax=0,bx=0,写出每条汇编指令执行完后的相关寄存器的值.  
mov ax,1     #分析:1送进ax  
mov ds,ax    #分析:ax送进ds,即ds=1  
mov ax,[0000]  AX=(2662)H  
#分析: ds=1,ds:0=0:10H=62,ds:1=0:11H=26       ||| 既然ds=1 了,为何ds:0=0:10H 而不是ds:0=1:10H 我也不理解呀,哪个能说说吗???
fengzhikuan
[第11楼]   [ 回复时间:2009-06-08 16:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-18 14:17
下面的程序执行前,ax=0,bx=0,写出每条汇编指令执行完后的相关寄存器的值.   
mov ax,1     #分析:1送进ax   
mov ds,ax    #分析:ax送进ds,即ds=1   
mov ax,[0000]  AX=(2662)H   
#分析: ds=1,ds:0=0:10H=62,ds:1=0:11H=26       ||| 既然ds=1 了,为何ds:0=0:10H 而不是ds:0=1:10H 


不知哪位大侠能解答下,谢谢
failure
[第12楼]   [ 回复时间:2009-07-16 03:30 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2009-07-15 01:04
回复:[第11楼]
------------------
ds:0=1:10H   怎么可能  1:10H物理地址是20H
failure
[第13楼]   [ 回复时间:2009-07-16 03:32 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2009-07-15 01:04
回复:[第4楼]
------------------
4楼我认为你第2题答案有个地方我不理解,希望解答
2 jmp 0ff0:0100 
# 此时cs=0FF0H,IP=0100H,DS=1000H,AX=6622H,BX=0 
# 注:实际指向物理内存为10000H,即指向1000:0 
这个地方IP应该改动2次的吧!!
hero520e
[第14楼]   [ 回复时间:2009-07-16 11:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-14 00:02
#分析: ds=1,ds:0=0:10H=62,ds:1=0:11H=26 |||既然ds=1 了,为何ds:0=0:10H 而不是ds:0=1:10H

DS=0001  mov ax,[0000]

也就是说DS:IP=0001:0000
w8806867
[第15楼]   [ 回复时间:2009-07-31 18:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-16 21:51
我认为只要数据的位数和寄存器的位数一致就可以了!
w8806867
[第16楼]   [ 回复时间:2009-07-31 18:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-07-16 21:51
回复:[第13楼]
------------------
jmp 0ff0:0100  
直接修改了CS:IP
最终的结果就是1000:0
iamqwy
[第17楼]   [ 回复时间:2009-08-01 17:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-03-16 19:29
ds:0物理地址10H,0:10物理地址10H,所以是同一个地址
zhonghuade
[第18楼]   [ 回复时间:2009-10-16 00:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-11 00:27
ds:0物理地址10H,0:10物理地址10H,所以是同一个地址
------------------
回复:能解释的再详细些吗?我是初学者,对于这个概念不是很清晰!
mojiangang
[第19楼]   [ 回复时间:2009-11-27 23:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-27 16:18
add ax,bx      AX=(FD48)H #分析ax=ax+bx 
add ax,[0004]  AX=(2C14) 
#分析 [04]=CC [05]=2E ax=ax+2Ecc 
我想问下 FD48H+2ECCH
不是等于12C14H吗?
q421226652
[第20楼]   [ 回复时间:2010-01-30 16:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-29 08:33
前3句:
mov ax,1
mov ds,ax
mov ax,[0000]

执行第一句后:ax=0001H
执行第二句后:ds=0001H
执行第三句后:ax应该等于内存中从00010H地址开始的2个字节的内容,而其是从低位到高位存放。

我错在了DS上面,知道DS=0001H,但是读内存的时却是从0000:0001开始读的。
下次要注意了。
------------------
回复:DS=OOOO1H  MOV AX,[00000]  读内存  DC*16+偏移  =0000:00010 开始的
q421226652
[第21楼]   [ 回复时间:2010-01-30 16:29 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-29 08:33
回复:[第18楼]
------------------
00010  ds: 
+ 0000  [0000] 
--------- 
00010 
所以地址就是0000:0010
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved