第一题:
将标号a处的8个数累加的和放到标号b处所在的单元中,下面选项中的程序正确的是______。
1、 assume cs:code
code segment
mov si,0
mov cx,8
s: add b,a[si]
inc si
loop s
mov ax,4c00h
int 21h
a db 1,2,3,4,5,6,7,8
b db 0
code ends
end
2、 assume cs:code,ds:data
data segment
a db 1,2,3,4,5,6,7,8
b db 0
data ends
code segment
start:
mov si,0
mov cx,8
s: mov al,a[si]
add b,al
inc si
loop s
mov ax,4c00h
int 21h
code ends
end start
3、 assume cs:code
data segment
a db 1,2,3,4,5,6,7,8
b db 0
data ends
code segment
mov ax,data
mov ds,ax
mov si,0
mov cx,8
start:
mov al,a[si]
add b,al
inc si
loop start
mov ax,4c00h
int 21h
code ends
end
4、 assume cs:code,ds:data
code segment
p: mov si,0
mov cx,8
mov ax,data
mov ds,ax
s: mov al,a[si]
mov ah,0
add b,ax
inc si
loop s
mov ax,4c00h
int 21h
code ends
data segment
a db 1,2,3,4,5,6,7,8
b dw 0
data ends
end p
=============================================
这题选4
先看答案1,从逻辑上没有错误,add b,a[si] 这一句错了,不可以2个内存相加要通过CPU的寄存器。
看答案2,数据标号使用要指明相关联段,虽在伪指令assume中声明了,可没有在代码段中关联。
答案3,没有在assume中声明数据段
第二题:
下列说法中正确的是______。
1、 当数据的标号不在代码段时,只要用assume伪指令将数据段和相应的段寄存器连接起来就可以了。
2、 数据标号和地址标号唯一的区别就是,数据标号既表示内存单元的地址,还表示内存单元的长度,而地址标号只表示内存单元的地址。
3、 直接定址表只可以存储数据的地址,不可以存储程序段的地址。
4、 在中断服务程序用到直接定址表时,和不在中断服务程序的使用一样,直接调用即可。
===============================================
这题选2
答案1,还要在代码段中关联;
答案3,可以存储程序段的地址,如seg a等
答案4,中断服务分内中断和外中断,在程序中用定址表有时不用段间跳转,可能没有保存段地址,不一定可以用
第三题:
关于直接定址表描述错误的是
1、 直接定址表和数据标号一样只是用来标记地址的。
2、 直接定址表可以方便的编写一些查表类的程序。
3、 直接定址表中包含了数据长度信息。
4、 直接定址表的数据可以定义在代码段。
============================================
这题选1
数据标号还指明数据长度
- [fancx] ========== 其它位不确定就先不管,那么这个数就是???? 00?? 01?? ?1?1, 10/31 09:44
- [游客] 博主的程序很有意思,学习了。 07/13 18:46
- [martian] 博主的主程序执行效果是在屏幕上延时显示26个字母,而非P289的实验16的要求,虽然实现了相应的子程 04/14 15:32
- [hihi] 不错,我第15章刚结束,复习一下! 04/14 15:32
- [jhszcn] 嘎嘎 04/14 14:25
- [wdm] 答案4,中断服务分内中断和外中断,在程序中用定址表有时不用段间跳转,可能没有保存段地址,不一定可以用 04/14 11:51
- [younggay] 对博主的分析没有异议。 04/14 11:40
- [younggay] 理解的不错啊。 我觉得挺正确。 04/14 10:48
- [jhszcn] 谢谢指正 04/13 22:05
- [jhszcn] To younggay: pushf call dword ptr后 04/10 17:54
- [w0922] 你好 !能不能到我的博客看哈 有个问题想请教哈你··· 就是我博客实验十分析的那个问题 04/18 15:19
- [jhszcn] 嘎嘎,谢谢大哥:) 03/27 19:38
- [wdm] 博主终于开通了。呵呵,这里的功能让你更好的穿梭与汇编网的各个版块,还能及时了解很多动态信息和自己论坛 03/26 09:54
[ younggay 发表于 2008-04-14 11:40 ]
对博主的分析没有异议。
[ wdm 发表于 2008-04-14 11:51 ]
答案4,中断服务分内中断和外中断,在程序中用定址表有时不用段间跳转,可能没有保存段地址,不一定可以用
------------------
我说一下我的看法。
由于标号的属性都是加载后就形成了,当程序运行将我们的中断程序写入其他内存段的时候,中断程序中的标号对应的地址就不能正确寻址到应该的地址了。所以,我们在中断程序中一般都是通过偏移量来重定位标号的地址的。这个我们在中断程序中调用一个sub程序的时候就有了些许体会。我们定位sub的时候,一般都是计算处sub到中断程序第一个数据地址的偏移量,然后再去jmp的。
不知道大家对我的看法怎么看。