|
主题 : : [求]检测点3.1的标准答案 [待解决] |
回复[ 21次 ]
点击[ 1083次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-04-08 08:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-04-08 01:35 |
|
|
|
|
|
[第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 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-04-15 10:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:1
注册日期:2008-06-04 14:46 |
我这个就做错了,
搞错了地位和高位的对应关系。。。。 | | |
|
|
|
|
[第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开始读的。
下次要注意了。 | | |
|
|
|
|
[第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指向的 二进制信息被当作程序或者指令来处理,在其他时候又可以被当作数据来调用。 | | |
|
|
|
|
[第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.这是我个人的见解不知道对不对。大家来讨论一下。 | | |
|
|
|
|
[第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 的
这是我的想法不知道对不对 | | |
|
|
|
|
[第7楼]
[ 回复时间:2009-04-21 03:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-07-31 18:57 |
mov al,[0002] 或者 mov ah,[0002]
在执行这些命令的时候
操作的寄存器高位和低位都是一个字节
所以取得的数据也是以字节为单位的
所以应该都是取得e6 和后面的d6 没有任何关系的
请问我说的是对还是错? | | |
|
|
|
|
[第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 感觉不能理解- -! | | |
|
|
|
|
[第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 | | |
|
|
|
|
[第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 我也不理解呀,哪个能说说吗??? | | |
|
|
|
|
[第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
不知哪位大侠能解答下,谢谢 | | |
|
|
|
|
[第12楼]
[ 回复时间:2009-07-16 03:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:2
注册日期:2009-07-15 01:04 |
回复:[第11楼]
------------------
ds:0=1:10H 怎么可能 1:10H物理地址是20H | | |
|
|
|
|
[第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次的吧!! | | |
|
|
|
|
[第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 | | |
|
|
|
|
[第15楼]
[ 回复时间:2009-07-31 18:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-07-16 21:51 |
|
|
|
|
|
[第16楼]
[ 回复时间:2009-07-31 18:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-07-16 21:51 |
回复:[第13楼]
------------------
jmp 0ff0:0100
直接修改了CS:IP
最终的结果就是1000:0 | | |
|
|
|
|
[第17楼]
[ 回复时间:2009-08-01 17:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-16 19:29 |
ds:0物理地址10H,0:10物理地址10H,所以是同一个地址 | | |
|
|
|
|
[第18楼]
[ 回复时间:2009-10-16 00:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-10-11 00:27 |
ds:0物理地址10H,0:10物理地址10H,所以是同一个地址
------------------
回复:能解释的再详细些吗?我是初学者,对于这个概念不是很清晰! | | |
|
|
|
|
[第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吗? | | |
|
|
|
|
[第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 开始的 | | |
|
|
|
|
[第21楼]
[ 回复时间:2010-01-30 16:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-01-29 08:33 |
回复:[第18楼]
------------------
00010 ds:
+ 0000 [0000]
---------
00010
所以地址就是0000:0010 | | |