汇编课后习题及答案.docx
《汇编课后习题及答案.docx》由会员分享,可在线阅读,更多相关《汇编课后习题及答案.docx(61页珍藏版)》请在冰豆网上搜索。
汇编课后习题及答案
汇编课后习题
基础知识【课后习题】
1用降幂法或除法将下列十进制数转换为二进制数和十六进制数:
(1)369
(2)10000
(3)4096
(4)32767
2将下列二进制数转换为十六进制数和十进制数:
(1)101101
(2)10000000
(3)1111111111111111
(4)11111111
3将下列十六进制数转换为二进制数和十进制数:
(1)FA
(2)5B
(3)FFFE
(4)1234
4完成下列十六进制数的运算:
(1)3A+B7
(2)1234+AF
(3)ABCD-FE
(4)7AB×6F
5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用是十六进制数表示其运算结果。
(1)(―85)+76
(2)85+(―76)
(3)85―76
(4)85―(―76)
(5)(―85)―76
(6)―85―(―76)
6下列各数为十六进制表示的8位二进制数,请说明当它们被看作是用补码表示的带符号数时,它们所表示的十进制数是什么?
(1)D8
(2)FF
7当1.6题的两数被看作是用补码表示的无符号数时,它们所表示的十进制数是什么?
(1)D8
(2)FF
8下列各数为十六进制表示的8位二进制数,请说明当它们被看作是用补码表示的数时,它们所表示的十进制数是什么?
(1)4F
(2)2B
(3)73
(4)59
9当1.8题的4个数被看作是字符的ASCII码时,它们所表示的字符是什么?
(1)4F
(2)2B
(3)73
(4)59
10请写出下列字符串的ASCII码。
Forexample,
Thisisanumber3692.
答案
10、答:
466F72206578616D706C652C0A0D
Forexample,546869732069732061206E756D62657220333639322E
This is a number 3692
8086计算机组织【课后习题】
1在8086微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号。
试问可直接由指令指定的I/O端口数。
2有两个16位字1EE5H和2A3CH分别存放在8086微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。
38086微机的存储器中存放信息如下图所示。
试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。
4在实模式下,段地址和偏移地址为3017:
000A的存储单元的物理地址是什么?
如果段地址和偏移地址是3015:
002A和3010:
007A呢?
5如果在一个程序开始执行以前(CS)=0A7F0H(如十六进制数的最高位为字母,则应在其前加一个0),(IP)=2B40H,试问该程序的第一个字的物理地址是多少?
6在实模式下,存储器中每一段最多可有10000H个字节。
如果用调试程序Debug的r命令在终端上显示出当前各寄存器的内容如下,请画出此时存储器分段的示意图,以及条件标志OF、SF、ZF、CF的值。
C>debug
-r
AX=0000BX=0000CX=0079DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=10E4ES=10F4SS=21F0CS=31FFIP=0100NVUPDIPLNZNAPONC
7下列操作可使用哪些寄存器?
(1)加法和减法
(2)循环计数
(3)乘法和除法
(4)保存及使用段地址
(5)表示运算结果为0
(6)将要执行的指令地址
8那些寄存器可以用来指示存储器地址?
9下面几种说法中唯一正确的是哪一种?
A、单独用16位地址线提供的地址可以访问1M字节存储器空间。
B、数据段段首址可以是00000~FFFFF中任意一个地址。
C、用WS、EDIT等编辑软件可以编写汇编程序。
D、堆栈段段首地址可以是FFFE0H。
答案
1、答:
直接由指令指定的I/O端口数为256个。
2、答:
3、答:
字节单元:
(30022H)=ABH,(30024H)=EFH
字单元:
(30021H)=AB34H,(30022H)=CDABH。
4、答:
3017:
000A的存储单元的物理地址是3017AH,
3015:
002A的存储单元的物理地址是3017AH,
3010:
007A的存储单元的物理地址是3017AH。
5、答:
该程序的第一个字的物理地址是0AAA40H。
6、答:
条件标志OF、SF、ZF、CF的值依次分别为0、0、0、0。
7、答:
(1)AX、BX、CX、DX、AH、AL、BH、BL、CH、CL、DH、DL、
SP、BP、DI、SI(注意:
学生尽量不要用SP参与加减运算)
(2)CX
(3)DX、AX、AH、AL
(4)CS、DS、ES、SS
(5)FLAGS
(6)IP
(7)SS、SP、BP
8、答:
可以用来指示存储器地址的寄存器有BX、SP、BP、DI、SI、IP、CS、DS、
ES、SS。
9、答:
唯一正确的是D。
8086寻址方式和指令系统【课后习题】
1试根据以下要求写出相应的汇编语言指令。
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。
(2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3)用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
(4)用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。
(5)把数0B5H与(AL)相加,并把结果送回AL中。
2写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。
要求使用以下几种寻址方式:
(1)寄存器间接寻址
(2)寄存器相对寻址
(3)基址变址寻址
3现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后AX寄存器的内容。
(1)MOVAX,1200H
(2)MOVAX,BX
(3)MOVAX,[1200H]
(4)MOVAX,[BX]
(5)MOVAX,1100[BX]
(6)MOVAX,[BX][SI]
(7)MOVAX,1100[BX][SI]
4设当前数据段寄存器的内容为1B00H,在数据段的偏移地址2000H单元内,含有一个内容为0FF10H和8000H的指针,它们是一个16位变量的偏移地址和段地址,试写出把该变量装入AX的指令序列,并画图表示出来。
5在0624单元内有一条二字节JMPSHORTOBJ指令,如其中位移量为
(1)27H,
(2)6BH,(3)0C6H,试问转向地址OBJ的值是多少?
6在ARRAY数组中依次存储了七个字数据,紧接着是名为ZERO的字单元,表示如下:
ARRAYDW23,36,2,100,32000,54,0
ZERODW?
(1)如果BX包含数组ARRAY的初始地址,请编写指令将数据0传送给ZERO单元。
(2)如果BX包含数据0在数组中的位移量,请编写指令将数据0传送给ZERO单元。
7如TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以下两条指令执行完后,AX寄存器的内容是什么?
(1)MOVAX,TABLE
(2)LEAAX,TABLE
8执行下列指令后,AX寄存器中的内容是什么?
TABLEDW10,20,30,40,50
ENTRYDW3
…
MOVBX,OFFSETTABLE
ADDBX,ENTRY
MOVAX,[BX]
9下列ASCII码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中:
CSTRINGDB'BASEDADDRESSING'
请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。
10已知堆栈段寄存器SS的内容是0FFA0H,堆栈指针寄存器SP的内容是00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。
试画出堆栈区和SP的内容变化过程示意图。
11设(DS)=1B00H,(ES)=2B00H,有关存储单元的内容如图所示。
请写出两条指令把字变量X装入AX寄存器。
12求出以下各十六进制数与十六进制数62A0之和,并根据结果设置标志位SF、ZF、CF和OF的值。
(1)1234
(2)4321
(3)CFA0
(4)9D60
13求出以下各十六进制数与十六进制数4AE0的差值,并根据结果设置标志位SF、ZF、CF和OF的值。
(1)1234
(2)5D90
(3)9090
(4)EA04
14写出执行以下计算的指令序列,其中X、Y、Z、R、W均为存放16位带符号数单元的地址。
(1)ZW+(Z-X)
(2)ZW-(X+6)-(R+9)
(3)Z(W*X)/(Y+6),R余数
15写出对存放在DX和AX中的双字长数求补的指令序列。
16试编写一个程序求出双字长数的绝对值。
双字长数在A和A+2单元中,结果存放在B和B+2单元中。
17写出完成以下操作的程序段。
假设各变量的值均为用压缩BCD码表示的二位十进制数。
(1)UV+(S-6)
(2)U(X+W)-(Z-U)
18假设(BX)=0E3H,变量VALUE中存放的内容为79H,确定下列各条指令单独执行后BX的值。
(1)XORBX,VALUE
(2)ANDBX,VALUE
(3)ORBX,VALUE
(4)XORBX,0FFH
(5)ANDBX,0
(6)TESTBX,01H
19试分析下面的程序段完成什么功能?
MOVCL,04
SHLDX,CL
MOVBL,AH
SHLAX,CL
SHRBL,CL
OR DL,BL
20试写出程序段把DX,AX中的双字右移四位。
21假设程序中数据定义如下:
NAMEDB30DUP(?
)
ADDRDB9DUP(?
)
ARRAYDB132DUP(?
)
分别编写下列程序段:
(1)用空格符清除ARRAY域。
(2)在ADDR中查找第一个'*'。
(3)如果NAME域中全是空格符时,填入'$'。
(4)把NAME移到ARRAY的前30个字节中,把ADDR移到ARRAY的后9个字节中。
22试分析下列程序段:
ADD AX, BX
JNO L1
JNC L2
SUBAX, BX
JNC L3
JNO L4
JMP SHORTL5
如果AX和BX的内容给定如下:
AX BX
(1)147B80DC
(2)B56854B7
(3)42C8608D
(4)D0239FD0
(5)94B7B568
问该程序执行完后,程序转向哪里?
23假设X和X+2单元的内容为双精度数p,Y和Y+2单元的内容为双精度数q,X和Y为低位字,试说明下列程序段做什么工作?
MOVDX,X+2
MOVAX,X
ADDAX,X
ADCDX,X+2
CMPDX,Y+2
JLL2
JGL1
CMPAX,Y
JBEL2
L1:
MOVAX,1
JMPSHORTEXIT
L2:
MOVAX,2
EXIT:
INT20H
24在下列程序的括号中分别填入如下指令:
(1)LOOPL20
(2)LOOPEL20
(3)LOOPNEL20
试说明在三种情况下,当程序执行完后,AX、BX、CX、DX四个寄存器的内容分别是什么?
TITLEEXLOOP.COM
CODESGSEGMENT
ASSUMECS:
CODESG,DS:
CODESG,SS:
CODESG
ORG100H
BEGIN:
MOVAX,01
MOVBX,02
MOVDX,03
MOVCX,04
L20:
INC AX
ADD BX,AX
SHRDX,1
()
RET
CODESGENDS
ENDBEGIN
25考虑以下的调用序列:
(1)MAIN调用NEAR的SUBA过程(返回的偏移地址为0400);
(2)SUBA调用NEAR的SUBB过程(返回的偏移地址为0A00);
(3)SUBB调用FAR的SUBC过程(返回的段地址为B200,偏移地址为0100);
(4)从SUBC返回SUBB;
(5)SUBB调用NEAR的SUBD过程(返回的偏移地址为0C00);
(6)从SUBD返回SUBB;
(7)从SUBB返回SUBA;
(8)从SUBA返回MAIN;
(9)从MAIN调用SUBC(返回的段地址是1000,偏移地址是0600);
请画出每次调用及返回时的堆栈状态。
答案
1、答:
(1)ADDDX,BX
(2)ADDAL,[BX][SI]
(3)ADD[BX+0B2H],CX
(4)ADD[0524H],2A59H
(5)ADDAL,0B5H
2、答:
(1)MOVBX,OFFSETBLOCK+0AH
MOVDX,[BX]
(2)MOVBX,0AH
MOVDX,BLOCK[BX]
(3)MOVBX,OFFSETBLOCK
MOVSI,0AH
MOVDX,[BX][SI]
3、答:
(1)1200H
(2)0100H
(3)4C2AH
(4)3412H
(5)4C2AH
(6)7856H
(7)65B7H
4、答:
MOVBX,2000H
LESDI,[BX]
MOVAX,ES:
[DI]
5、答:
(1)064DH
(2)0691H
(3)05ECH
6、答:
(1)MOVAX,[BX+0CH]
MOVZERO,AX
(2)MOVAX,ARRAY[BX]
MOVZERO,AX
7、答:
(1)(AX)=1234H
(2)(AX)=0032H
8、答:
(AX)=1E00H
9、答:
LEABX,CSTRING
MOVDL,[BX]
MOVDH,[BX+6]
10、答:
11、答:
LESBX,[2000]
MOVAX,ES:
[BX]
12、答:
(1)74D4HSF=0ZF=0CF=0OF=0
(2)A5C1HSF=1ZF=0CF=0OF=1
(3)3240HSF=0ZF=0CF=1OF=0
(4)0000HSF=0ZF=1CF=1OF=0
13、答:
(1)0C754HSF=1ZF=0CF=1OF=0
(2)12B0HSF=0ZF=0CF=0OF=0
(3)45B0HSF=0ZF=0CF=0OF=1
(4)9F24HSF=1ZF=0CF=0OF=0
14、答:
(1)MOVAX,Z
SUBAX,X
ADDAX,W
MOVZ,AX
(2)MOVBX,X
ADDBX,6
MOVCX,R
ADDCX,9
MOVAX,W
SUBAX,BX
SUBAX,CX
MOVZ,AX
(3)MOVAX,W
IMULX
MOVBX,Y
ADDBX,6
IDIVBX
MOVZ,AX
MOVR,DX
15、答:
NEGDX
NEGAX
SBBDX,0
16、答:
MOVAX,A
MOVDX,A+2
TESTDX,8000H
JZSTORE;为正
NEGDX
NEGAX
SBBDX,0
STORE:
MOVB,AX
MOVB+2,DX
17、答:
(1)MOVAL,S
SUBAL,6
DAS
ADDAL,V
DAA
MOVU,AL
(2)
MOVAL,Z
SUBAL,U
DAS
MOVU,AL
MOVAL,X
ADDAL,W
DAA
SUBAL,U
DAS
MOVU,AL
18、答:
(1)(BX)=9AH
(2)(BX)=61H
(3)(BX)=0FBH
(4)(BX)=1CH
(5)(BX)=0
(6)(BX)=0E3H
19、答:
把(DX)(AX)中的双字左移四位(乘以16)。
20、答:
MOVCL,4
SHRAX,CL
MOVBL,DL
SHRDX,CL
SHLBL,CL
ORAH,BL
21、答:
(1)CLD
MOVCX,132
MOVAL,20H
LEADI,ARRAY
REPSTOSB
(2)CLD
MOVCX,9
MOVAL,‘*’
LEADI,ADDR
REPNESCASB
JNEL1
L2:
……;找到
L1:
……;未找到
(3)CLD
MOVCX,30
MOVAL,20H
LEADI,NAME
REPESCASB
JNEDO_NOT
MOVCX,30
MOVAL,‘$’
LEADI,NAME
REPSTOSB
…
DO_NOT:
…
(4)CLD
MOVCX,30
LEASI,NAME
LEADI,ARRAY
REPMOVSB
STD
MOVCX,9
LEASI,ADDR+8
LEADI,ARRAY+131
REPMOVSB
22、答:
(1)转L1
(2)转L1
(3)转L2
(4)转L5
(5)转L5
23、答:
2p£q时,(AX)2
2p>q时,(AX)1
24、答:
(1)(AX)=5(BX)=16(CX)=0(DX)=0
(2)(AX)=2(BX)=4(CX)=3(DX)=1
(3)(AX)=3(BX)=7(CX)=2(DX)=0
25、答:
汇编语言程序格式【课后习题】
1假设VAR为字变量,LAB为标号,试指出下列指令的错误之处:
(1)SUBAL,VAR
(2)MOV[BX],[SI]
(3)MOVAX,[SI][DI]
(4)MOVCS,AX
(5)JMPNEARLAB
(6)POPDH
2说明下列语句所分配的存储空间及初始化的数据值。
(1)BYTE_VARDB'BYTE',12,-12H,3DUP(0,?
2DUP(1,2),?
)
(2)WORD_VARDW5DUP(0,1,2),?
-5,'BY','TE',256H
3假设程序中的数据定义如下:
PARTNODW?
PNAME DB16DUP(?
)
COUNT DD?
PLENTHEQU$-PARTNO
问PLENTH的值为多少?
4给出赋值语句如下:
ALPHAEQU100
BETAEQU25
GAMMAEQU2
下列表达式的值是多少?
(1)ALPHA*100+BETA
(2)ALPHAMODGAMMA+BETA
(3)(ALPHA+2)*BETA-2
(4)(BETA/3)MOD5
(5)(ALPHA+3)*(BETAMODGAMMA)
(6)ALPHAGEGAMMA
(7)BETAAND7
(8)GAMMAOR3
5假设数据段中数据定义如下:
VARDW'34'
VAR1DB100,'ABCD'
VAR2DD1
COUNTEQU$-VAR1
XDW5DUP(COUNTDUP(0))
YLABELWORD
ZDB'123456'
VDW2,$-VAR
执行下面程序段并回答问题。
MOVAX,COUNT;(AX)=?
MOVBX,Z-X;(BX)=?
MOVCX,V+2;(CX)=?
MOVDX,VAR;(DX)=?
MOVY+3,2
MOVSI,Y+4;(SI)=?
ADDZ+5,1
MOVDI,WORDPTRZ+4;(DI)=?
6对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
FLDBDB?
TABLEADW20DUP(?
)
TABLEBDB'ABCD'
(1)MOVAX,TYPEFLDB
(2)MOVAX,TYPETABLEA
(3)MOVCX,LENGTHTABLEA
(4)MOVDX,SIZETABLEA
(5)MOVCX,LENGTHTABLEB
7写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG中的SUM