新编汇编程序设计课后答案.docx
- 文档编号:25764459
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:54
- 大小:117.10KB
新编汇编程序设计课后答案.docx
《新编汇编程序设计课后答案.docx》由会员分享,可在线阅读,更多相关《新编汇编程序设计课后答案.docx(54页珍藏版)》请在冰豆网上搜索。
新编汇编程序设计课后答案
第2章8086的指令系统
〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12345678H,[21200H]~[21203H]依次存放2A4CB765H,说明下列每条指令执行完后AX寄存器的内容。
(1)movax,1200h
(2)movax,bx
(3)movax,[1200h]
(4)movax,[bx]
(5)movax,[bx+1100h]
(6)movax,[bx+si]
(7)movax,[bx][si+1100h]
〔解答〕
(1)AX=1200H
(2)AX=0100H
(3)AX=4C2AH;偏移地址=bx=0100h
(4)AX=3412H;偏移地址=bx=0100h
(5)AX=4C2AH;偏移地址=bx+1100h=1200h
(6)AX=7856H;偏移地址=bx+si=0100h+0002h=0102h
(7)AX=65B7H;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h
〔习题2.2〕指出下列指令的错误
(1)movcx,dl
(2)movip,ax
(3)moves,1234h
(4)moves,ds
(5)moval,300
(6)mov[sp],ax
(7)movax,bx+di
(8)mov20h,ah
〔解答〕
(1)两操作数类型不匹配
(2)IP指令指针禁止用户访问
(3)立即数不允许传给段寄存器
(4)段寄存器之间不允许传送
(5)两操作数类型不匹配
(6)目的操作数应为[SI]
(7)源操作数应为[BX+DI]
(8)立即数不能作目的操作数
〔习题2.3〕已知数字0~9对应的格雷码依次为:
18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。
leabx,table
moval,8
xlat
〔解答〕
leabx,table;获取table的首地址,BX=200H
moval,8;传送欲转换的数字,AL=8
xlat;转换为格雷码,AL=12HP35
〔习题2.4〕什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应哪两种指令?
〔解答〕
堆栈是一种按“先进后出”原则存取数据的存储区域,位于堆栈段中,使用SS段寄存器记录其段地址;它的工作原则是先进后出;堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。
〔习题2.5〕已知SS=2200H、SP=00B0H,画图说明执行下面指令序列时,堆栈区和SP的内容如何变化?
movax,8057h
pushax
movax,0f79h
pushax
popbx
pop[bx]
〔解答〕
movax,8057h
pushax
movax,0f79h
pushax
popbx;bx=0f79h
pop[bx];DS:
[0f79h]=8057h
〔习题2.6〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:
moval,89h
addal,al
addal,9dh
cmpal,0bch
subal,al
decal
incal
〔解答〕
moval,89h;AL=89hCFZFSFOFPF
addal,al;AL=12h10011
;10001001
+10001001
100010010
addal,9dh;AL=0afh00101
;00010010
+10011101
10101111
cmpal,0bch;AL=0afh10101
;10101111
-10111100
*01000011
subal,al;AL=00h01001
decal;AL=0ffh00101
;00000000
-00000001
*11111111
incal;AL=00h01001
;11111111
+00000001
*11111111
〔习题2.7〕设X、Y、Z均为双字数据,分别存放在地址为X、X+2;Y、Y+2;Z、Z+2的存储单元中,它们的运算结果存入W单元。
阅读如下程序段,给出运算公式。
movax,X
movdx,X+2
addax,Y
adcdx,Y+2
addax,24
adcdx,0
subax,Z
sbbdx,Z+2
movW,ax
movW+2,dx
〔解答〕
W=X+Y+24-Z
〔习题2.8〕请分别用一条汇编语言指令完成如下功能:
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。
(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
(3)用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。
(4)用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果送回该存储单元中。
(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。
〔解答〕
(1)ADDDX,BX
(2)ADDAL,[BX+SI]
(3)ADD[BX+0B2H],CX
(4)ADDWORDPTR[0520H],3412H
(5)ADDAL,0A0H
〔习题2.9〕设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。
movax,X;ax=X
imulY;DX.AX=X*Y
movcx,ax;cx=X*Y的低16位
moxbx,dx;bx=X*Y的高16位
movax,Z;ax=Z
cwd
addcx,ax;cx=Z的低16位+X*Y的低16位
adcbx,dx;bx=Z的高16位+X*Y的高16位+低位进位
subcx,540;cx=Z的低16位+X*Y的低16位-540
sbbbx,0;bx=Z的高16位+X*Y的高16位+低位进位-低位借位
movax,V;ax=V
cwd
subax,cx;ax=V的低16位-(Z的低16位+X*Y的低16位-540)
sbbdx,bx;dx=V的高16位-(Z的高16位+X*Y的高16位+低位进位-低位借位)-低位借位
idivX;/X
〔解答〕
[V-(X*Y+Z-540)]/X
AX存商,DX存余数
〔习题2.10〕指出下列指令的错误:
(1)xchg[si],30h
(2)popcs
(3)sub[si],[di]
(4)pushah
(5)adcax,ds
(6)add[si],80h
(7)inal,3fch
(8)outdx,ah
〔解答〕
(1)xchg的操作数不能是立即数
(2)不应对CS直接赋值
(3)两个操作数不能都是存储单元
(4)堆栈的操作数不能是字节量
(5)adc的操作数不能是段寄存器
(6)没有确定是字节还是字操作
(7)in不支持超过FFH的直接寻址
(8)out只能以AL/AX为源操作数
〔习题2.11〕给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。
movax,1470h
andax,ax
orax,ax
xorax,ax
notax
testax,0f0f0h
〔解答〕
movax,1470h;AX=1470HCFZFSFOFPF
andax,ax;AX=1470H00000
;0001010001110000
orax,ax;AX=1470H00000
xorax,ax;AX=0000H01001
notax;AX=FFFFH01001
testax,0f0f0h;AX=FFFFH00101
注意:
MOV和NOT指令不影响标志位;其他逻辑指令使CF=OF=0,根据结果影响其他标志位。
〔习题2.12〕假设例题2.32的程序段中,AX=08H,BX=10H,请说明每条指令执行后的结果和各个标志位的状态。
〔解答〕
指令;执行结果CFOFSFZFPF
movsi,ax;SI=AX=0008H-----
shlsi,1;SI=2*AX=0010H00000
addsi,ax;SI=3*AX=0018H00001
movdx,bx;DX=BX=0010H00001
movcl,03h;CL=03H00001
shldx,cl;DX=8*BX=0080H0u000
subdx,bx;DX=7*BX=0070H00000
adddx,si;DX=7*BX+3*AX=0088H00001
注意:
逻辑左移N次相当于无符号整数乘以2的N次方,逻辑右移N次相当于无符号整数除以2的N次方。
移位指令根据移位的数据设置CF,根据移位后的结果影响SF,ZF,PF。
在进行一位移位时,根据最高符号位是否改变设置OF,如改变则OF=1。
另外,程序注释用“u”表示标志无定义(不确定),“-”表示无影响。
〔习题2.13〕编写程序段完成如下要求:
(1)用位操作指令实现AL(无符号数)乘以10
(2)用逻辑运算指令实现数字0~9的ASCII码与非压缩BCD码的互相转换
(3)把DX.AX中的双字右移4位
〔解答〕
(1);不考虑进位
movbl,al
movcl,3
shlal,cl;*8
addal,bl;shlbl,1
addal,bl
;考虑进位
xorah,ah
movbx,ax
movcl,3
shlax,cl
addax,bx;shlbx,1
addax,bx
(2)数字0~9的ASCII码是:
30h~39h
非压缩BCD码的0~9是:
00h~09h
方法一:
andal,0fh;实现ASCII到非压缩BCD码的转换
oral,30h;实现非压缩BCD码到ASCII的转换
方法二:
xoral,30h;求反D5D4位,其他不变
;即高4位为3,则变为0;高4位为0,则变为3
(3)movcl,4
again:
shrdx,1;实现逻辑右移
;采用“sardx,1”,则实现算术右移
rcrax,1
deccl
jnzagain
〔习题2.14〕已知AL=F7H(表示有符号数-9),分别编写用SAR和IDIV指令实现的除以2的程序段,并说明各自执行后,所得的商是什么?
〔解答〕
(1)用sar编写
moval,0f7h;-9送AL11111001
saral,1;结果:
AL=11111100B=0FBH即-5
(2)用idiv编写
moval,0f7h;-9送al
cbw;字节符号扩展位字
movbl,2;注意除数不可为立即数
idivbl;结果:
商为al=fch(-4)
;余数:
ah=ffh(-1)
结论:
符号数的除法用idiv准确。
〔习题2.15〕已知数据段500h~600h处存放了一个字符串,说明下列程序段执行后的结果:
movsi,600h
movdi,601h
movax,ds
moves,ax
movcx,256
std
repmovsb
〔解答〕
〔习题2.16〕说明下列程序段的功能
cld
movax,0fefh
movcx,5
movbx,3000h
moves,bx
movdi,2000h
repstosw
〔解答〕
将es:
di(即3000:
2000h或32000h)开始的5个单元的内容置为0fefh。
〔习题2.17〕指令指针IP是通用寄存器还是专用寄存器?
有指令能够直接它赋值吗?
哪类指令的执行会改变它的值?
〔解答〕
指令指针IP不是通用寄存器,不可直接赋值,属于专用寄存器。
有且仅有循环、转移、子程序调用和返回、中断类等指令可以改变它的值。
〔习题2.18〕控制转移类指令中有哪三种寻址方式?
〔解答〕
控制转移类指令的寻址方式:
相对寻址、直接寻址方式和间接寻址方式(又可以分成寄存器和存储器间接寻址)。
〔习题2.19〕什么是短转移shortjump、近转移nearjump和远转移farjump?
什么是段内转移和段间转移?
8086有哪些指令可以实现段间转移?
〔解答〕
短转移:
指段内-128~127之间的转移,位移量用一个字节表示
近转移:
指段内±32K之间的转移,位移量用一个字表示
远转移:
指段间1MB范围的转移
段内转移:
指在同一个代码段内的转移,可以是短转移或者近转移
段间转移:
指转移到另外一个代码段,就是远转移
8086/8088CPU的JMP、CALL和INTn指令可以实现段间转移
〔习题2.20〕8086的条件转移指令的转移范围有多大?
实际编程时,你如何处理超出范围的条件转移?
〔解答〕
8086的条件转移的转移范围:
在当前指令地址的+127~-128之内。
如条件转移的转移范围超出此范围,可在此范围内安排一条无条件转移,再转移到范围外的目标地址。
〔习题2.21〕假设DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]=2450H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?
(1)JMPBX
(2)JMPTABLE[BX]
(3)JMP[BX][SI]
〔解答〕
(1)转移的有效地址EA=BX=1256H
(2)转移的有效地址EA=[DS:
20A1H+1256H]=[232F7]=3280H
(3)转移的有效地址EA=[DS:
1256H+528FH]=264E5H=2450H
〔习题2.22〕判断下列程序段跳转的条件
(1)xorax,1e1eh
jeequal
(2)testal,10000001b
jnzthere
(3)cmpcx,64h
jbthere
〔解答〕
(1)AX=1e1eh(异或后为0)
(2)AL的D0或D7至少有一位为1
(3)CX(无符号数)<64h
〔习题2.23〕设置CX=0,则LOOP指令将循环多少次?
例如:
movcx,0
delay:
loopdelay
〔解答〕
216次。
〔习题2.24〕假设AX和SI存放的是有符号数,DX和DI存放的是无符号数,请用比较指令和条件转移指令实现以下判断:
(1)若DX>DI,转到above执行;
(2)若AX>SI,转到greater执行;
(3)若CX=0,转到zero执行;
(4)若AX-SI产生溢出,转到overflow执行;
(5)若SI≤AX,转到less_eq执行;
(6)若DI≤DX,转到below_eq执行。
〔解答〕
(1)若DX>DI,转到above执行
cmpdx,di
jaabove;=jnbeabove
(2)若AX>SI,转到greater执行
cmpax,si
jggreater;=jnlegreater
(3)若CX=0,转到zero执行
cmpcx,0
jzzero;=jcxzzero
(4)若AX-SI产生溢出,转到overflow执行;
cmpax,si
jooverflow
(5)若SI≤AX,转到less_eq执行;
cmpsi,ax;cmpax,si
jleless_eq;jgeless_eq
(6)若DI≤DX,转到below_eq执行。
cmpdi,dx;cmpdx,di
jbebelow_eq;jaebelow_eq
〔习题2.25〕有一个首地址为array的20个字的数组,说明下列程序段的功能。
movcx,20
movax,0
movsi,ax
sum_loop:
addax,array[si]
addsi,2
loopsum_loop
movtotal,ax
〔解答〕
将首地址为array得20个字的数组求和,并将结果存入total单元中。
〔习题2.26〕按照下列要求,编写相应的程序段:
(1)起始地址为string的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。
(2)从主存buffer开始的4个字节中保存了4个非压缩BCD码,现按低(高)地址对低(高)位的原则,将它们合并到DX中。
(3)编写一个程序段,在DX高4位全为0时,使AX=0;否则使AX=-1。
(4)有两个64位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成buffer1-buffer2功能。
(5)假设从B800h:
0开始存放有100个16位无符号数,编程求它们的和,并把32位的和保存在DX.AX中。
(6)已知字符串string包含有32KB内容,将其中的’$’符号替换成空格。
(7)有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出)存于原处。
(8)统计以’$’结尾的字符串srting的字符个数。
〔解答〕
(1)解答:
movsi,0
movdl,string[si];第1个字符送dl寄存器:
movdl,stirng[0]
movsi,5
movdh,string[si];第6个字符送dh寄存器:
movdl,stirng[5]
(2)解答:
xorsi,si;si清零
moval,buffer[si];第一字节
incsi
movah,buffer[si];第二字节
movcl,4
shlah,cl;BCD码移到高半字节
oral,ah;组合成压缩BCD码
movdl,al;存入dl寄..
incsi
moval,buffer[si];第三字节
incsi
movah,buffer[si];第四字节
movcl,4
shlah,cl;BCD码移到高半字节
oral,ah;组合成压缩BCD码
movdh,al;存入dh寄..
(3)解答:
testdx,0f000h;testdh,0f0h
jznext;jnznext
movax,-1;movax,0
jmpagain
next:
movax,0;movax,0ffffh
again:
...
(4)解答:
movax,wordptrbuffer1
subax,wordptrbuffer2;先减低16位
movdx,wordptrbuffer1+2
sbbdx,wordptrbuffer2+2;后减高16位,需减低16位的借位
(5)解答:
movax,0b800h
movds,ax;段地址
xorsi,si;地址偏移量si=0
xordx,dx;和的高字dx=0
新版汇编语言程序设计【课后习题答案】钱晓捷主编电子工业出版社第3章8086的指令系统(全)
(2010-12-1920:
46:
44)
转载▼
标签:
杂谈
第3章汇编语言程序格式
〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?
伪指令有什么主要作用?
〔解答〕
伪指令语句与硬指令语句的本质区别是能不能产生CPU动作;
伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。
〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成?
〔解答〕
为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符;
汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?
,@)组成,不能以数字开头。
〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。
〔解答
保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。
汇编语言对大小写不敏感。
如定义字节数和字符串的DB就是伪指令助记符。
〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成?
〔解答〕
汇编语句有执行性语句和说明性语句;
执行性语句由标号、硬指令助记符、操作数和注释四部分组成;
说明性语句由名字、伪指令助记符、参数和注释四部分组成
〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。
〔解答〕
⒈编辑文本编辑程序汇编语言源程序.asm
⒉汇编汇编程序目标模块文件.obj
⒊连接连接程序可执行文件.exe或.com
⒋调试调试程序应用程序
〔习题3.6〕将第2章习题2.36采用简化段定义格式编写成一个完整的源程序。
〔解答〕
;简化段定义格式
.modelsmall;定义程序的存储模式(小模式)
.stack;定义堆栈段(默认1024个字节)
.data;定义数据段
str1db'InputNumber:
0~9:
',0dh,0ah,'$'
str2db'Error!
',0dh,0ah,'$'
.cade;定义代码段
.startup;说明程序的起始点,建立ds,ss的内容。
movah,09h;显示str1字符串
movdx,offsetstr1
int21h
getkey:
movah,1;调用DOS功能
int21h
cmpal,'0'
jberror;小于0,出错处理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新编 汇编程序 设计 课后 答案