大连理工大学计算机原理习题3答案概要.docx
《大连理工大学计算机原理习题3答案概要.docx》由会员分享,可在线阅读,更多相关《大连理工大学计算机原理习题3答案概要.docx(14页珍藏版)》请在冰豆网上搜索。
大连理工大学计算机原理习题3答案概要
习题3:
1、8086系统中,请说明下列指令的源操作数的寻址方式是什么?
1)MOVAX,1234H立即寻址
2)MOVAX,[1234H]直接寻址
3)MOVAX,[BX]间接寻址
4)MOVAX,1234H[BX+SI]相对基址变址寻址
5)MOVSB数据串寻址
6)INAL,DX间接端口寻址
2、请在下表中画出下列数据段以十六进制表示的各单元值(表格中每个单元表示一个字节),并写出变量var1,var2,var3的偏移地址和cnt的值。
0030H
dataSEGMENTpara
ORG30H
var1DB-2,‘A’,2dup(‘23’)
var2DW-1
cntEQU$-var1
var3DWvar2
dataENDS
答:
var1:
0030,var2:
0036,var3:
0038,cnt=8.
3、以下程序实现将变量var进行var*10+600的操作,并将计算结果保存在变量result中,当程序执行到地址M5的时候,请在以下表格中画出当前堆栈指针的位置和堆栈里的内容(程序断点可以用标号,在堆栈中可用寄存器名代表保存的内容,SS的内容不用指定,表格的每个单元表示一个字)。
(6分)
datasegment
vardw1000
resultdd?
dataends
ss_segsegmentstack
db100dup(?
)
ss_segends
codesegment
assumecs:
code,ds:
data,ss:
ss_seg
mainprocfar
pushds
movax,0
pushax
movax,data
movds,ax
movax,var
M1:
callCaculate
M2:
dw10
M3:
dw600
M4:
leabx,result
mov[bx],ax
mov[bx+2],dx
ret
mainendp
Caculateproc
pushbp
movbp,sp
pushsi
pushbx
movbx,[bp+2]
movsi,cs:
[bx]
mulsi
M5:
addax,cs:
2[bx]
addbx,4
mov[bp+2],bx
popbx
popsi
popbp
ret
Caculateendp
codeends
endmain
答:
如下图,此时栈顶指针指向比bx所在单元地址小1的堆栈单元。
4、问答题
1)若AL=81H,则执行指令CBW后AH的内容为多少?
答:
AH的内容为FFH.
2)若BL=BEH,执行下列指令序列,则每执行一步,BL和CF的值为多少?
SHLBL,1;BL=__7CH___,CF=_1___
MOVCL,2
SHRBL,CL;BL=__1FH___,CF=___0___
ORBL,80
SARBL,1;BL=__CFH___,CF=___1___
RORBL,CL;BL=___F3H__,CF=___1___
INCCL
RCLBL,CLBL=___9FH__,CF=____1__
3)什么是短跳转、近跳转、远跳转?
答,短跳转,是段内直接跳转,把IP的内容加上一个字节的补码数作为新的IP,跳转范围为-128~127.
近跳转,是段内直接跳转,把IP的内容加上一个字的补码数作为新的IP,跳转范围为-32768~32767.
远跳转,是段间直接跳转。
4)若当前SP=1000H,CS=B000H,IP=0100H,且当前FLAG=2345H,则执行指令INT21H以后,SP的值变为多少?
堆栈段中6个存储单元0FFFH、0FFEH、0FFDH、0FFCH、0FFBH、0FFAH的值分别是多少?
答:
SP=0FFAH,(0FFFH)=23H,(0FFEH)=45H,(0FFDH)=B0H,(0FFCH)=00H,(0FFB)=01H,(0FFA)=00H.
5、请写出程序段实现下列功能
例如:
从160H端口读取1个字节
MOVDX,160H
INAL,DX
1)将一个8位数20H写入到地址为20H的端口;
答:
MOVAL,20H
OUT20H,AL
2)若AL=56H,BL=57H,将这两个压缩格式BCD码相加并将结果保存到存储单元[2000H]中;
答:
ADDAL,BL
DAA
MOV[2000H],AL
3)将2个32位无符号数DAT1和DAT2相乘,结果保存在64位无符号数中,请编写程序段。
movax,data
movds,ax
leasi,result
subax,ax
mov[si+4],ax
mov[si+6],ax
movax,wordptrdata1
mulwordptrdata2
mov[si],ax
mov[si+2],dx
movax,wordptrdata1+2
mulwordptrdata2
add[si+2],ax
adc[si+4],dx
adcwordptr[si+6],0
movax,wordptrdata2+2
mulwordptrdata1
add[si+2],ax
adc[si+4],dx
adcwordptr[si+6],0
movax,wordptrdata2+2
mulwordptrdata1+2
adc[si+4],ax
adc[si+6],dx
movax,4c00h
int21h
4)求数据段偏移地址为1000H开始的一个字符串的长度,字符串以ASCII码0为结束符,长度要求包括结束符;(提示:
初始化AL=0CX=0FFFFH,然后使用REPNZSCASB命令,最后根据CX的值计算字符串长度)
答:
movax,ds
moves,ax
movdi,1000h
moval,0
movcx,0FFFFH
cld
repnescasb
movax,0FFFFH
subax,cx
movcx,ax
6.什么是寻址方式?
8086/8088共有哪几种寻址方式?
答:
获得数据或者数据地址信息的方式称为寻址方式。
1隐含寻址2立即寻址3寄存器寻址4直接寻址5间接寻址6基址寻址7变址寻址8基址变址寻址9相对基址变址寻址10数据串寻址11直接端口寻址12间接端口寻址
13段内直接寻址14段内间接寻址15段间直接寻址16段间间接寻址
7.设DS=6000H,ES=2000H,SS=1500H,SI=00A0H,BX=0800H,BP=1200H,变量VAR地址为0050H.请分别指出下列指令源操作数的寻址方式?
并计算除立即寻址外的其他寻址方式下源操作数的地址。
(1)MOVAX,BX
(2)MOVDL,80H(3)MOVAX,VAR
(4)MOVAX,VAR[BX][SI](5)MOVAL,‘B’(6)MOVDI,ES:
[BX]
(7)MOVDX,[BP](8)MOVBX,20H[BX]
答:
(1)寄存器寻址,无地址
(2)立即寻址(3)直接寻址,物理地址为60050H(4)相对基址变址寻址,物理地址为608F0H(5)立即寻址(6)间接寻址,物理地址为20800H(7)间接寻址,物理地址为16200H(8)基址寻址,物理地址为60820H
8.试说明指令MOVBX,5[BX]与指令LEABX,5[BX]的区别。
答:
第一个指令是将DS段内,便偏移地址为(BX+5,BX+6)的内容传送给BX,第二个指令取地址,是把BX+5送给BX。
9.设堆栈指针SP的初值为2300H,AX=50ABH,BX=1234H.执行指令PUSHAX后,SP=?
再执行指令PUSHBX及POPAX之后,SP=?
AX=?
BX=?
答:
SP=SP-2=22FEH,执行后面指令后SP=22FEH,AX=BX=1234H
10.指出下列指令的错误:
(1)MOVAH,CX
(2)MOV33H,AL(3)MOVAX,[SI][DI](4)MOV[BX],[SI](5)OUT230H,AX(6)MUL39H
答:
(1)两操作数字长不相等
(2)立即数不能作为目的操作数(3)两个变址寄存器不能同时使用(4)不能对两个存储器操作(5)端口地址超过8位,必须用间接寻址(6)立即数不能作为mul指令的操作数。
11.已知AL=7BH,BL=38H,试问执行指令ADDAL,BL后,AF、CF、OF、PF、SF和ZF的值各为多少?
答:
AF=1,CF=0,OF=1,PF=0,SF=1,ZF=0
12.试判断下列程序执行后,BX中的内容
MOV CL,3
MOV BX,0B7H
ROLBX,1
RORBX,CL
答:
BX=C02DH
13.按下列要求写出相应的指令或程序段:
(1)写出两条使AX内容为0的指令;
(2)使BL寄存器中的高4位和低4位互换;
(3)屏蔽CX寄存器的b11、b7和b3位;
(4)测试DX中的b0和b8位是否为1。
答:
(1)subax,axxorax,ax
(2)movcl,4
rolbl,cl
(3)andcx,0F777H
(4)testdx,0101H
14.分别指出以下两个程序段的功能:
(1)MOVCX,10
LEASI,FIRST
LEADI,SECOND
STD
REPMOVSB
(2)CLD
LEADI,[1200H]
MOVCX,0FF00H
XORAX,AX
REPSTOSW
答:
(1)将数据段中最高地址为first的10个字节数据按照减地址方向传送到扩展段中以second为最高地址的十个字节
(2)将扩展段中偏移地址1200H单元开始的0FF00H个字单元清零
15.已知AX=8060H,DX=03F8H,端口PORT1的地址是48H,内容为40H;PORT2的地址是84H,内容是65H.请指出下列执行后的结果。
(1)OUTDX,AL
(2)INAL,PORT1(3)OUTDX,AX(4)INAX,48H(5)OUTPORT2,AX
答:
(1)将60H写入地址为03F8H的端口中
(2)AL=40H(3)将8060H写入地址为03F8H的端口中(4)从48H端口读入16位数据放到ax中(5)将8060H写入地址为84H的端口中
16.单项选择:
(1)微处理器的主要组成部件是(B)
A.运算器、存储器和内部总线;B.运算器、控制器和存储器;C.存储器接口、I/O接口和运算器;D.运算器、控制器和寄存器
(2)下列指令中,CPU对其执行能够产生控制信号M/IO=0和RD=0的是(B)
A.MOV[50H],ALB.MOVAL,[50H]C.OUT10H,ALD.INAL,10H
(3)8086CPU组成的PC机数据线分别是(D)
A.8条单向线B.16条单向线C.8条双向线D.16条双向线
(4)可用作简单输入接口的电路是(C)
A.译码器B.锁存器C.三态缓冲器D转换器
17.多项选择:
(1)在8086CPU的下列寄存器中,可用作寄存器间接寻址的有(ACDE)
A.SIB.CXC.BXD.BPE.DI
(2)设SP=50H,执行指令RET0004H后,寄存器SP的内容是(E)
A.54HB.50HC.4EHD.4CHE.58H
18.简答题:
1)无符号数比较指令有哪些?
如何通过标志位进行判断的?
答:
JB/JNAE/JC;CF=1;小于/不大于转移JNB/JAE/JC;CF=0;高于等于/不高于转移
JBEshort_label;小于等于转移JNAshort_label;不大于转移:
测试条件:
CF|ZF=1
JNBEshort_label;不小于等于;转移JAshort_label;大于转移:
测试条件:
CF|ZF=0
2)有符号数比较指令有哪些?
如何通过标志位进行判断的?
答:
JLshort_label;小于转移JNGEshort_label;不大于等于转移:
测试条件:
SF^OF=1
JNLshort_label;不小于转移JGEshort_label;大于等于转移:
测试条件:
SF^OF=0
JNLEshort_label;不小于等于转移JGshort_label;大于转移:
测试条件:
(SF^OF)|ZF=0
JLEshort_label;小于等于转移JNGshort_label;不大于转移:
测试条件:
(SF^OF)|ZF=1
3)试述传送类指令有哪些?
简述lea、lds、les、Xlat指令的功能?
答:
mov,push,pop,xchg,in,out,xlat,lea,lds,les,lahf,sahf,pushf,popf
Lea:
有效地址传送指令;lds将源操作数指定的四个字节传送到指定的寄存器及DS寄存器中;les将源操作数指定的四个字节传送到指定的寄存器及ES寄存器中;xlat:
(bx+al)=>al
4)简述MUL、IMUL、DIV、IDIV、CBW、CWD指令的功能?
答:
MUL无符号乘法.IMUL整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
DIV无符号除法.IDIV整数除法.以上两条,结果回送:
商回送AL,余数回送AH,(字节运算);或商回送AX,余数回送DX,(字运算).
CBW字节转换为字.(把AL中字节的符号扩展到AH中去)
CWD字转换为双字.(把AX中的字的符号扩展到DX中去)
5)试述逻辑移位操作指令有哪些?
如何使用?
答:
SHL逻辑左移.
SAL算术左移.(=SHL)操作数整体左移,每次的最高位移到CF,空余位补0
SHR逻辑右移.操作数整体右移,每次的最低位移到CF,空余位补0
SAR算术右移.操作数整体右移,每次的最低位移到CF,空余位补符号数
ROL循环左移.操作数整体左移,每次的最高位移到CF,最低位用原来最高位补
ROR循环右移.操作数整体右移,最低位移到CF,最高位用原来最低位补
RCL通过进位的循环左移.类似ROL循环左移,但CF加入到循环圈中
RCR通过进位的循环右移.类似ROR循环左移,但CF加入到循环圈中
6)试述串操作指令有哪些?
如何使用?
答:
MOVS串传送指令MOVSB:
ES:
[DI]←DS:
[SI],SI←SI±1,DI←DI±1
MOVSW:
ES:
[DI]←DS:
[SI],SI←SI±2,DI←DI±2使用前缀REP,可完成多次数据传送
STOS存入串指令STOSB:
ES:
[DI]←AL,DI←DI±1;STOSW:
ES:
[DI]←AX,DI←DI±2可使用REP前缀
LODS从串中取数LODSB:
AL←DS:
[SI],SI←SI±1;LODSW:
AX←DS:
[SI],SI←SI±2
SCAS串扫描指令,在数据中查找AL或AX中的内容SCASB:
AL-ES:
[DI],DI←DI±1;SCASW:
AX-ES:
[DI],DI←DI±2可使用REPE/REPZ或REPNE/REPNZ,仅影响标志位
CMPS串比较指令,两个MEM操作数的比较,源操作数-目的操作数CMPSB:
DS:
[SI]-ES:
[DI],SI←SI±1,DI←DI±1;CMPSW:
DS:
[SI]-ES:
[DI],SI←SI±2,DI←DI±2可使用REPE/REPZ或REPNE/REPNZ,该指令只影响标志位,不保存结果
7)简述RET、RETIMM16、IRET指令的功能?
答:
RET子程序返回指令,执行时,从堆栈顶部弹出返回地址
RETIMM16带立即数(0-FFFFH范围的任何偶数)返回指令执行时,从堆栈顶部弹出返回地址,再使SP加上立即数,
IRET中断返回,执行时,从堆栈中依次弹出断点地址的IP、CS和FLAG
8)简述LOOP、LOOPE、LOOPNE、JCXZ指令的功能?
答:
LOOPTARGET—循环指令,循环次数由CX决定
LOOPZ/LOOPETARGET—条件循环指令,执行时,在LOOP指令的基础上,还需判断ZF,若CX!
=0且ZF=1则循环
LOOPNZ/LOOPNETARGET执行时,在LOOP指令的基础上,还需判断ZF若CX!
=0且ZF=0则循环
JCXZshort_label;CX=0则转移,测试条件:
CX=0
9)简述根据子程序调用范围和寻址方式,说明CALL指令使用功能?
答:
CALLTARGET子程序调用指令类似转移指令,也有4种形式
CALL1000H;段内直接转移,调用地址在指令中给出
CALLAX;段内间接转移,调用地址在AX中给出
CALL2000H:
0200H;段间直接转移,指令中直接给出调用地址的段地址和偏移量
CALLDWORDPTR[DI];段间间接转移,调用地址在内存单元中
执行该指令时,会将下一条指令的地址压入堆栈,该地址称为返回地址
段内调用:
只将返回地址的偏移量压入堆栈
段间调用:
将返回地址的段地址和偏移量压入堆栈,先压CS,后压IP
实际使用时CALL指令后面直接跟子程序名