|
主题 : : 第七章论坛检测题解答 [待解决] |
回复[ 22次 ]
点击[ 1414次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-05-26 18:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21 |
生成EXE之后用Debug加载后,查看寄存器内容如下:
ds=0b2d es=0b2d ss=0b3d cs=0b3e ip=0000
程序的起始地址的段地址是_____。 3
1、 0b3e
2、 0b2d
3、 0b3d
4、 0
注解:详见课本P86页,PSP段的段地址为SA,,可用段地址为SA+10,即程序的起始地址的段地址=ds+10h
下列指令不能执行的是_____。 3
1、 mov ax,10h[bx]
2、 mov ax,10h[di]
3、 mov ax,[di+si]
4、 mov ax,10h[bx][si]
注解:详见课本P134,SI和DI是8086CPU中功能详见的寄存器,SI和DI不能分成两个8位寄存器来使用。
对如下程序要实现将datasg段中的字符串"welcome to masm!"复制到它后续的数据区中,
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
db '................'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov si,0
________
________
mov ax,4c00h
int 21h
codesg ends
end start
在空白区域添加的指令序列合理的是_____。 4
1、 mov di,10h
mov cx,10h
s: mov ax,[si]
mov [di],ax
add si,2
add di,2
loop s
2、 mov di,10h
mov cx,8
s: mov ax,[si]
mov [di],ax
inc si
inc di
loop s
3、 mov ss,ax
mov sp,32
mov cx,8
s: mov ax,[si]
push ax
add si,2
loop s
4、 mov cx,8
s: mov ax,[si]
mov [si+10h],ax
add si,2
loop s
三人行必有我师,欢迎大家拿出自己的观点 | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-05-29 09:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48 |
呵呵,题都对了网站该有提示了,把不清楚的可以拿出来讨论讨论,这样发上来可能让别人偷懒了,反而害了人家;) | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-05-31 15:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-05-26 16:47 |
|
|
|
|
|
[第3楼]
[ 回复时间:2008-06-19 11:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-06-10 05:21 |
下列指令不能执行的是_____。 3
1、 mov ax,10h[bx]
2、 mov ax,10h[di]
3、 mov ax,[di+si]
4、 mov ax,10h[bx][si]
注解:详见课本P134,SI和DI是8086CPU中功能详见的寄存器,SI和DI不能分成两个8位寄存器来使用。
mov ax,[di+si] 这个不太明白,是不能分成两个8位的,你怎么知道他当8位的用了 | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-07-11 22:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-06-27 20:49 |
试答:因为ax,是16位的,而[di+si]仍是8位寄存器,因前后不一致,故不能执行 | | |
|
|
|
|
[第5楼]
[ 回复时间:2008-07-14 15:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16 |
是啊。有道理啊。程序的起始地址与实际指令的执行起始地址是有区别的。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2008-07-20 14:31 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-18 07:43 |
mov ax,[di+si] 这个不太明白,
-----------------------------------------------
mov ax,[di+si] 中的 di和si,不能一起 用,这个就 是 错误 的 根本原因! | | |
|
|
|
|
[第7楼]
[ 回复时间:2008-07-23 21:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16 |
是的。si或者di要么独立使用,要么与bx或bp联合使用。当然idata也可以。
有一下几种形式:
[si],[si+idata],[si+bx],[si+bp],[si+bx+idata],[si+bp+idata]
同样si也是如此。 | | |
|
|
|
|
[第8楼]
[ 回复时间:2008-07-23 21:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16 |
|
|
|
|
|
[第9楼]
[ 回复时间:2008-08-03 13:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-07-22 15:49 |
生成EXE之后用Debug加载后,查看寄存器内容如下:
ds=0b2d es=0b2d ss=0b3d cs=0b3e ip=0000
程序的起始地址的段地址是_____。 3
1、 0b3e
2、 0b2d
3、 0b3d
4、 0
对于这道题我想问个问题,程序的起始地址等于DS+10H这个我已经知道,可是这里的cs=0b3e,就表示0b3d并不在代码段里面,这样也能是程序的起始地址么,请高手解答 | | |
|
|
|
|
[第10楼]
[ 回复时间:2008-08-04 12:24 ]
[引用]
[回复]
[ top ] | |
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16 |
我想你可能只见到程序的起始处的段地址为cs的程序代码。想想,如果一个程序有多个段,如data数据段,stack栈段,table表段,代码段code等等,在这些段的放置顺序当中,从前之后依次为,data,stack,table,code,即将code代码放到最后,那么程序的起始处的段地址为data段的段地址,加上一定的偏移量后才是code的段地址。
举例如下。
assume ds:data,cs:code
data segment
dw 0,0,0,0,0
data ends
code segment
start:----------(代码段内容省略)
code ends
end start
如果,ds=0b2d,那么data=0b3d. code=0b3e.
因此,你要区分程序的起始处和程序实际执行处的区别。该段程序的起始处为data段,而实际执行代码处为code段。这里,0b3d在程序里面,只不过在程序的data段中,用来存放程序所需读取的数据或者往里面写入数据 | | |
|
|
|
|
[第11楼]
[ 回复时间:2009-01-04 16:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2008-12-15 16:17 |
这个问题主要是 大家对程序这个词还没有理解透喔。
课本p79(第二版)开始部分“2.源程序中的“程序””
最后一句话:这里说的程序就是指源程序中最终由计算机执行、处理的指令或数据。
大家看清楚了,程序不仅仅指指令,还有数据啊,但这个数据是是计算机要处理的数据,是客户的数据(客户要使用的,计算的)。 | | |
|
|
|
|
[第12楼]
[ 回复时间:2009-01-04 16:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2008-12-15 16:17 |
还有大家真正理解了cs,ds,es,ss ,ip 里内容的作用,好加载后这些数据的关系。这样就好了。别针对个别的问题非得整个标准答案。理解了就好了!! | | |
|
|
|
|
[第13楼]
[ 回复时间:2009-01-15 16:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-12-12 12:10 |
试答:因为ax,是16位的,而[di+si]仍是8位寄存器,因前后不一致,故不能执行
------------------
回复:书上说di和si不能分成2个8位寄存器使用,没将它就是8位寄存器啊? | | |
|
|
|
|
[第14楼]
[ 回复时间:2009-04-16 09:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-03-22 17:01 |
si和di本身是16位寄存器吧。
和ax是一樣的。有误导吧。 | | |
|
|
|
|
[第15楼]
[ 回复时间:2009-04-23 20:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-02-27 19:42 |
si和di本身是16位寄存器吧。
和ax是一樣的。有误导吧。
同感! | | |
|
|
|
|
[第16楼]
[ 回复时间:2010-04-08 15:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-12-18 17:03 |
si和di都是16位的寄存器啊。。。书上的意思是不能分为SH或SL等8位吧。。。 | | |
|
|
|
|
[第17楼]
[ 回复时间:2010-10-06 14:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-16 18:13 |
楼上正解,si和di本身也是16位寄存器,只不过不能分成两个8位寄存器,还有不能一起使用。 | | |
|
|
|
|
[第18楼]
[ 回复时间:2011-05-08 20:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-25 00:59 |
寄存器间接寻址里面 ,只能是基址和变址相加减,不能两个基址寄存器相加减,或两个变址寄存器相加减。
基址寄存器 bx,bp
变址寄存器 si,di | | |
|
|
|
|
[第19楼]
[ 回复时间:2011-05-27 11:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-13 09:38 |
我答错3次了,日,我错的是最后一题,第一次选1,因为16个字母嘛,我就以为循环10H次,后来明白了就选2,因为没看清楚就选了,再后来以为是其它题错了。 | | |
|
|
|
|
[第20楼]
[ 回复时间:2012-11-02 11:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-09-27 15:52 |
|
|
|
|
|
[第21楼]
[ 回复时间:2013-02-18 00:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2013-02-02 01:48 |
|
|
|
|
|
[第22楼]
[ 回复时间:2013-07-29 00:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25 |
第八章,p162页有答案:mov ax,[di+si]是错误的。原因可能是硬规定,或王老师为方便教学屏蔽了,只记两者不同时出现就好。 | | |