汇编语言王爽第二版课后答案Word格式.docx
- 文档编号:20735413
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:30
- 大小:23.99KB
汇编语言王爽第二版课后答案Word格式.docx
《汇编语言王爽第二版课后答案Word格式.docx》由会员分享,可在线阅读,更多相关《汇编语言王爽第二版课后答案Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
第2题说明:
因为段的起始地址要为16的倍数。
所以当段地址小于1001H或大于2000H时CPU都无法寻到。
检测点(第33页)
答:
CPU修改了4次IP的值。
情况如下:
第1次:
执行完movax,bx后
第2次:
执行完subax,ax后
第3次:
读入jmpax后
第4次:
执行完jmpax后
最后IP的值为0
]
实验1查看CPU和内存,用机器指令和汇编指令编程(第33页)
-----------------------------------------------------
1.预备知识:
Debug的使用
<
此部分略>
2.实验任务(第43页)
(1)
(2)
(3)
通过DEBUG中的D命令查看到主板的生产日期[以月、日、年,分隔符为'
/'
的格式]存储在内存ffff:
0005~ffff:
000C(共8个字节单元中)处。
此生产日期不能被改变,因为其具有‘只读’属性。
(4)
通过向内存中的显存写入数据,使计算机根据写入的数据进行ASCII转换,并将转换后且可打印的字符输出到屏幕上。
注:
关于显存的详细讨论不在此题范围>
第三章寄存器(内存访问)
检测点(第52页)
(1)(题目:
略)
2662H
E626H
D6E6H
FD48H
2C14H
0000H
00E6H
0026H
000CH
提示:
此题可在DEBUG中利用E命令在本机上按照题目中所给出的内存单元及其数据进行相应地修改,然后再用A命令进行写入(题目中所给出的)相应的汇编指令,最后再进行T命令进行逐步执行,以查看相应结果。
1.指令序列如下:
movax,6622h
jmp0ff0:
0100
movax,2000h
movds,ax
movax,[0008]
movax,[0002]
2.写出CPU执行每条指令后,CS、IP和相关寄存器中的数值。
-
指令序列↓
寄存器→
CS
IP
DS
AX
BX
初始值→
2000H
0000
1000H
0003
6622H
/
>
0005
】
0008
C389H
000B
EA66H
?
3.再次体会:
数据和程序有区别吗如何确定内存中的信息哪些是数据,哪些是程序?
(略)
检测点(第66页)
movax,2000H
movss,ax
movsp,10H
movax,1000H
movsp,0H
实验2用机器指令和汇编指令编程(第70页)
---------------------------------------
2.实验任务
(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
从第一空开始依次如下:
ax=5BEA
ax=5CCA
bx=30F0
bx=6029
sp=FE220FE5CCA
sp=FC220FC6029
sp=FE6029
sp=100H5CCA
sp=FE220FE30F0
sp=FC220FC2E39
说明:
此题可能因机子软、硬件环境不同而导致答案不一致!
(2)仔细观察图的实验过程,然后分析:
为什么2000:
0~2000:
f中的内容会发生改变?
因为用T指令进行调试时,会产生中断。
而为了保护现场,CPU则先将标志寄存器进栈、再把当前CS的值进栈,最后将IP的值进栈。
关于中断的详细内容的讨论不在此题范围>
第五章[BX]和loop指令
实验4[BX]和loop的使用(第113页)
-------------------------------
(1)编程,向内存0:
200~0:
23F依次传送数据0~63(3FH)。
:
程序如下:
assumecs:
codesg
codesgsegment
movax,0020h
movds,ax
movbx,0
movdl,0
movcx,40h
s:
mov[bx],dl
incdl
~
incbx
loops
movax,4c00h
int21h
codesgends
end
(2)编程,向内存0:
23F依次传送数据0~63(3FH),程序中只能使用9条指令,9条指令中包括“movax,4c00h”和“int21h”。
》
movbl,0
mov[bx],bl
incbl
movax,4c00h
\
(3)下面的程序的功能是将“movax,4c00h”之前的指令复制到内存0:
200处,补全程序。
上机调试,跟踪运行结果。
code
codesegment
movax,code;
code为所填写的数据
moves,ax
movcx,18h;
18h为所填写的数据
moval,[bx]
moves:
[bx],al
codeends
1.因为题目的要求是把代码段内的指令当作数据,复制到目的地址。
所以,源数据段ds和代码段cs相同,通过movax,code/movds,ax('
符号是指两条指令的分隔)来设置源数据段。
2.可以先假设要复制8位[1h~0ffh]数据(因为我们肉眼就可以看出此程序的长度不可能大于0ffh个字节)的字节数(如:
10h),把程序补全,以便通过编译。
这时我们以准确的第一空所填内容code与假想的第二空内容10h将程序补充完整并将其编译、连接、运行,接着进行DEBUG,在DEBUG时我们可用R命令查看CX的值,这时我们可以看到CX的值为1D,由此我们可以算出该程序的长度[1Dh-5h]=18h,之所以减5是为了满足题目的要求(因为movax,4c00h/int21h这两条指令的长度等于5)
第六章包含多个段的程序
:
检测点(第119页)
-------------------
dw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start:
movax,0
movcx,8
movax,[bx]
,
movcs:
[bx],ax;
此条指令为所填指令
addbx,2
endstart
·
dw0,0,0,0,0
movax,cs;
cs为所填第一空
movss,ax
movsp,1ah;
此条指令为所填第二空
#
push[bx]
popcs:
[bx];
此条指令为所填第三空
实验5编写、调试具有多个段的程序(第123页)
-----------------------------------------
1.保持不变
2.<
考虑不同机子环境不同,答案无法统一>
,X-1
4.(N/16+1)*16[说明:
N/16只取整数部分]
?
+3,X+4
第3个仍然可以正确执行。
因为如果把end指令后的标号start去掉后,编译器便会顺序执行程序。
换句话说:
当未给编译器预先的通知,要求其从哪开始执行程序时,编译器就自动以'
至上向下'
的顺序进行编译执行源程序。
(5)完整程序如下:
asegment
db1,2,3,4,5,6,7,8
aends
bsegment
bends
csegment
db0,0,0,0,0,0,0,0
cends
start:
movax,a
movax,c
s1:
movax,es:
[bx]
add[bx],ax
loops1
movax,b
!
s2:
loops2
endstart
(6)完整程序如下:
dw1,2,3,4,5,6,7,8
dw0,0,0,0,0,0,0,0
"
movsp,10h
movax,a
第七章更灵活的定位内存地址的方法
实验6实践课程中的程序(第147页)
-------------------------------
(2)编程:
完成问题中的程序。
问题完整程序如下:
codesg,ss:
stacksg,ds:
datasg
stacksgsegment
stacksgends
datasgsegment
db'
1.display'
2.brows'
$
3.replace'
4.modify'
datasgends
movax,stacksg
movsp,16
movax,datasg
movcx,4
;
外循环
pushcx
movsi,3
s0:
内循环
moval,[bx+si]
andal,b
mov[bx+si],al
incsi
loops0
addbx,16
popcx
loops
int21h
。
第八章数据处理的两个基本问题
实验7寻址方式在结构化数据访问中的应用(第160页)
----------------------------------------------
完整程序如下:
codesg,ds:
data,es:
table
datasegment
1975'
'
1976'
1977'
1978'
1979'
1980'
1981'
1982'
1983'
1984'
1985'
1986'
1987'
1988'
1989'
1990'
1991'
1992'
1993'
1994'
1995'
以上是表示21年的21个字符串
dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
以上是表示21年公司总收的21个dword型数据
dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw11542,14430,45257,17800
以上是表示21年公司雇员人数的21个word型数据
dataends
tablesegment
db21dup('
yearsummne'
)
tableends
[
movax,data
movax,table
movsi,0
movdi,0
movcx,21
|
s:
进入循环
[di],al
moval,[bx+1]
[di+1],al
moval,[bx+2]
[di+2],al
moval,[bx+3]
[di+3],al
以上8句的作用是存放年份
movax,54h[bx];
第一个'
年收入'
的段基址为54H
movdx,56h[bx]
5h[di],ax
7h[di],dx
以上4句的作用是存放公司总收入
movax,0A8h[si];
人数'
的段基址为0A8H
0Ah[di],ax
以上2句是存放公司的人数
movax,54h[bx]
divwordptrds:
0A8h[si]
0dh[di],ax
以上3句是存放人均收入
addbx,4
addsi,2
adddi,16
以上3句是为下一次循环时存放数据做准备
3个寄存器递增的速度决定了所要存取的数据的位置的偏移地址
loops;
跳到标号s处
程序说明:
此程序虽然可以达到预期效果(读者可以自行调试验证),但实现方法比较简单,读者有兴趣的话可以寻找一种更具结构化的设计方法来完成。
第九章转移指令的原理
检测点(第170页)
(1)若要使jmp指令执行后,CS:
IP指向程序的第一条指令,在data段中应该定义哪些数据
code,ds:
data
db0,0,0
jmpwordptr[bx+1];
段内间接转移
.
;
解题理由:
为了使IP的值经跳转后变为0,则需保证ds:
[bx+1]处的字型单元数据为0000H,
所以定义3个字节型数据0就符合“应该”的要求
(2)补全程序,使jmp指令执行后,CS:
IP指向程序的第一条指令。
ddh
mov[bx],bx;
源操作数bx为所填内容
mov[bx+2],cs;
源操作数cs为所填内容
jmpdwordptrds:
[0]
(3)用Debug查看内存,结果如下:
2000:
1000BE0006000000......
则此时,CPU执行指令:
moves,ax
jmpdwordptres:
[1000H]
后,(CS)=,(IP)=
为了使本机环境[2000:
1000至2000:
1005]中的数据与题目中所给出的数据一致,可以通过编写程序来完成,完整程序如下:
movax,2000h
movbx,1000h
movwordptr[bx].0,0BEH
movwordptr[bx].2,6h
movwordptr[bx].4,0
运行完上6句则使2000:
1000--2000:
1005中的数据依次为:
BE,00,06,00,00,00
以上6句则按题目中的数据进行初始化,以便使运行环境符合题目要求
jmpdwordptres:
[1000h]
经上机调试得出:
CS=0006H,IP=00BEH
检测点(第172页)
从标号s处开始所要填写的四条指令依次如下:
第一条指令:
movcl,[bx]
第二条指令:
movch,0
第三条指令:
jcxzok
第四条指令:
incbx
检测点(第173页)
补全程序,利用loop指令,实现在内存2000H段中查找第一个值为0的byte,找到后,将它的偏移地址存储在dx中。
movcl,[bx]
movch,0
inccx;
此条指令为题目要求补全的指令
loop
ok:
decbx
movdx,bx
解答提醒:
此题可用假设法来完成(比如设2000:
0000至2000:
0003的内容依次为:
1E06000A)。
此题要注意loop指令的使用规则,同时要注意区别[内存单元]与[内存单元中的数据(或内容)]的不同。
实验8分析一个奇怪的程序(第174页)
---------------------------------
分析下面的程序,在运行前思考:
这个程序可以正确返回吗
运行后再思考:
为什么是这种结果
通过这个程序加深对相关内容的理解。
nop
nop
movdi,offsets
movsi,offsets2
movax,cs:
[si]
[di],ax
s0:
jmpshorts
s1:
s2:
jmpshorts1
程序可以正常返回。
详细分析:
在此题中较为深入地考察了‘段内直接短转移’[形如:
jmpshort标号]的概念。
我们知道程序中:
movdi,offsets
movsi,offsets2
movax,cs:
movcs:
四条指令的作用是将标号s2处的一条指令复制到标号s处。
这时我们应该关心所复制的语句"
jmpshorts1"
对程序的影响:
我们知道在段内直
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 第二 课后 答案