生成EXE之后用Debug加载后,查看寄存器内容如下:
ds=0b2d es=0b2d ss=0b3d cs=0b3e ip=0000
程序的起始地址的段地址是_____。
1、 0b3e
2、 0b2d
3、 0b3d
4、 0
解析:此题检测的不是本章内容,是第4章中提到的关于程序在内存中的加载问题.即,程序在内存中加载后,ds中的内容为程序在内存区的段地址,而这个内存区的偏移地址为0,故,程序所在内存区的地址:ds:0,
而内存区的前256个字节用来放置PSP的,所以程序的开始地址为sa(此时为ds值)*16+0+256,表示为偏移地址为:sa+10h:0
/*此题我做了三次,前两次都没过去,一直都没认为此题做错,后来才想起应该是这题错了.才又去看书,惭愧!!!*/
下列指令不能执行的是_____。
1、 mov ax,10h[bx]
2、 mov ax,10h[di]
3、 mov ax,[di+si]
4、 mov ax,10h[bx][si]
解析:
di与si不能直接使用,必须与通用寄存器配合,而且这两个寄存器也不能分做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
在空白区域添加的指令序列合理的是_____。
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
解析:
此题看似简单.第一个选项很容易排除,因为ax为16位寄存器,故每次取值都是word类型,那10H个字节,只须8次就可取完,故排除;
第二个选项在si与di增值时出错,步长应为2.
第三个着实让我恼火了一回,看似都正常,却忘了一件事,栈是先进后出的,如果用栈做此题唯一要做的就是步长为负值.故此选项排除.
- [sbjcm33] 原来你是把实验1和2放一起的,好办法,我怎么没想到呢,把它们分成了两个程序。 具体的内容我就不看了 12/06 01:34
- [rotapple] 却没有放入段地址,而此处要明确的是:seg code 的含义是指段地址 ============= 06/23 16:56
- [Wednesday] 分析透彻,收藏!哈哈 11/09 17:26
- [Wednesday] 公布答案了,哈哈。 11/05 23:03
- [mqmelon] 不用客气,共同进步! 11/02 10:03
- [feemess] 谢谢指点.我的下一次答题要在32个小时之后了.一直都认为第一题没错.看来.要认真看书才是 10/28 00:08
- [mqmelon] 谢谢,我会努力去做. 10/27 23:18
- [游客] mqmelon同学,你能有这样的认识首先说明你的学习态度是对的,只要有正确的学习态度,就能够学好,以 10/25 11:56
- [sunshine] 呵呵 10/25 09:49
- [mqmelon] 谢谢,十分谢谢。 10/24 17:10