(1)生成EXE之后用Debug加载后,查看寄存器内容如下:
ds=0b2d es=0b2d ss=0b3d cs=0b3e ip=0000
程序的起始地址的段地址是__3___。
1、 0b3e
2、 0b2d
3、 0b3d
4、 0
分析:问题问程序的起始地址的段地址。开始以为就是cs中的值,因为程序是从cs:ip处开始执行的嘛。结果第一次没有通过,后来才明白程序的起始地址应该是psp后紧接的那个地址,载入内存时cs:ip的指向只是说明程序从哪里开始执行而已。这里所指的程序是指可执行文件第一部分内容(源程序中定义的数据被编译连接后的机器码+汇编指令编译连接后的机器码),所以答案应该是psp的段地址+10H=ds+10h=0b2d+10h=0b3d,故选3。
(2)下列指令不能执行的是__3___。
1、 mov ax,10h[bx]
2、 mov ax,10h[di]
3、 mov ax,[di+si]
4、 mov ax,10h[bx][si]
分析:书上用两个变量寻址是用的是[bx+si]或[bx+di]的形式,并没有[di+si]的形式。 另外其余的方式都是正确的,故选3
(3)对如下程序要实现将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
分析:学了书上的内容很容易就只到答案是4
- [baizengfei] 学习了,我就是死在这道题上的。。。。。。 01/06 12:14
- [qinaode12] 主要是换成用列的顺序去修改显存简化了程序!因为每列字符的Ascii码值是相同的,因此可以只对数据段中 12/14 20:42
- [qinaode12] 程序我都是编译连接运行了的,要是我没有运行成功,我是不会写上去的。呵呵!今天又写了一个简单点的,是用 12/14 20:11
- [deepblue] 你说的不错,我想按你的思路是能实现的。 但是你的程序我试了一下有问题啊 。 12/13 16:02
- [qinaode12] 很慢啊。慢慢来!呵呵! 12/13 12:18
- [martian] 博主检测点做到第7张了,博客上没有什么帖子,不知道学习进度如何啊? 12/10 19:44
- [qinaode12] 我有分析的哦。呵呵。你没仔细看,在关键地方我是加了分析,或注意的。 12/09 18:04
- [mouse] 光有答案啊,分析呢?答案做对了但并不代表分析一定对了. 建议看看这篇文章 http://ww 12/04 10:16
- [mess] 可以当个手册查查,用翻译软件翻译一下错误信息也能猜测个大概:-) 11/28 13:58
- [游客] 支持一下。 11/26 18:55