《汇编语言》练习册答案Word文档下载推荐.docx
《《汇编语言》练习册答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《汇编语言》练习册答案Word文档下载推荐.docx(34页珍藏版)》请在冰点文库上搜索。
(BCD2)=89,(BCD2+1)=27
欲使以下指令序列实现,(BCD3)(BCD1)+(BCD2)的功能(请在横线上添上适当的语句)
MOVAL,BCD1
ADDAL,BCD2
DAA
MOVBCD3,AL
MOVAL,BCD1+1
ADCAL,BCD2+1
MOVBCD3+1,AL
二、试根据以下要求写出相应的汇编语言指令
1、把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。
ADDDX,BX
2、用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
ADDAL,[BX+SI]
3、用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
ADD[BX+0B2H],CX
4、用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回该存储单元中。
ADD[0524H],2A59H
5、把数0B5H与(AL)相加,并把结果送回AL中。
ADDAL,0B5H
三、图示题:
(第1题10分,第2、3题,每题5分,共20分)
1、已知堆栈寄存器SS的内容是0FFA0H,堆栈指针寄存器SP的内容是00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP的内容变化,过程示意图(标出存储单元的物理地址)。
FFAB0H
执行PUSH前
2、画出以下指令汇编后存储情况示意图。
DATA_BYTEDB10,4,10H
DATA_WORDDW100,100H,-5
DATA-DWDD3*20,0FFFDH
DATA_BYTE
0A
04
10
DATA_WORD
64
00
FB
FF
DATA_DW
3C
FD
3、画出以下指令汇编后存储情况示意图
ARRAY1DB2DUP(0,1,2,?
)
ARRAY2DB100DUP(?
ARRAY1
01
02
ARRAY2
--
·
四、请设置一个数据段DATASG,其中定义以下字符变量或数据变量。
(1)FLD1B为字符串变量:
‘personalcomputer’:
(2)FLD2B为十进制数字节变量:
32:
(3)FLD3B为十六进制数字节变量:
20:
(4)FLD4B为二进制数字节变量:
01011001;
(5)FLD5B为数字的ASCII字符节变量:
32654;
(6)FLD6B为10个零的字节变量;
(7)FLD7B为零件名(ASCII码)及其数量(十进制)的表格:
PART120
PART250
(8)FLD1W为十六进制数字节变量:
FFF0;
(9)FLD2W为二进制数字变量:
(10)LD4W为包括5个十进制数的字节变量:
5,6,7,8,9;
(11)LD5W为5个零的字变量
DATASGSEGMENT
FLD1BDB‘personalcomputer’
FLD2BDB32
FLD3BDB20H
FLD4BDB01011001B
FLD5BDB‘32654’
FLD6BDB10DUP(0)
FLD7BDB‘20’,50
FLD1WDBF0H,FFH
FLD2WDW01011001B
LD4WDB5,6,7,8,9
LD5WDW5DUP(0)
DATASGENDS
五、写出框架:
1、按下面的要求写出程序的框架。
(1)、数据段的位置从0E000H开始,数据段中定义一个100字节的数组,其类型属性既是字又是字节;
(2)、堆栈段从小段开始,段组名为STACK;
(3)、代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值;
(4)、程序结束。
ORG0E000H
data_segSEGMENT
arr1DW100DUP(?
arr2EQUWORDPTRarr1
data_segENDS
stack_segSEGMENTPATASTACK
…
stack_segENDS
code_segSEGMENT
mainPROCFAR
ASSUMECS:
code_seg,DS:
data_seg,SS:
stack_seg
ORG1000H
start:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,data_seg
MOVDS,AX
MOVAX,stack_seg
MOVSS,AX
…
RET
mainENDP
code_segENDS
ENDstart
2、写出“调用程序和子程序不在同一代码段中”框架
segxSEGMENT
…
sebtPROCFAR
RET
sebtENDP
CALLsebt
segxENDS
segySEGMENT
segyENDS
六、编程题:
1、编一个程序,对键盘输入的小写字母用大写字母显示出来。
BEGIN:
MOVAH,1
INT21H
CMPAL,’a’
JBSTOP
CMPAL,’z’
JASTOP
SUBAL,20H
MOVDL,AL
MOVAH,2
JMPBEGIN
STOP:
RET
第二套
1、MOVCX,DX设(CX)=1064H,(DX)=6789H
指令执行后(CX)=__6789H_______,(DX)=__6789H_______
2、ADDAL,CH设(AL)=34H,(CH)=0D4H
指令执行后(AL)=__08H_____,(CH)=___0D4H______
3、XCHGAX,(BP+SI)
设(AX)=2030H,(BP)=0200H,(SI)=0023H,(SS)=2F00H,(2F223H)=5A21H,OPR2的物理地址=2F000+0200+0023=2F223H
则指令执行后(AX)=5A21H,(2F223H)=2030H
4、LESSI,[BX]设(DS)=C000H,(BX)=0300H,(0C0300H)=0123H,(0C0302H)=5410H则指令执行后(SI)=0123H,(ES)=5410H
5、LDSSI,[30H]设(DS)=B000H,(B0030H)=5620H,(B0032H)=4500H,则指令执行后(SI)=5620H,(DS)=4500H
6、ADDAL,BL
AAA
如指令执行前,(AX)=0535H,(BL)=39H
执行ADDAL,BL后,(AL)=6EH
执行AAA后,(AX)=0604H
7、MOVAX,[BX][DI]如(DS)=3000H,(BX)=3145H,(DI)=1FC0H
则物理地址=35105H
8、MOVAX,MASK[BX][DI]
如果(DS)=C000H,(BX)=1200H,(DI)=5600H,MASK=0360H,
则物理地址=C6B60H
9、在一个程序开始执行以前(CS)=0BB00H,(如16进制数的最高位为字母,则应在其前加一个0)(IP)=5ED0H,
试问该程序的第一字的物理地址是C0ED0H
10、MOVAL,0BFH
ANDAL,0FCH
上述指令执行后(AL)=BCH
11、MOVCL,2
SHLSI,CL
(SI)=1450H
(SI)=5140H,CF=0
欲使以下指令序列实现,(BCD3)(BCD1)-(BCD2)的功能(请在横线上添上适当的语句)
SUBAL,BCD2
DAS
SBBAL,BCD2+1
1、把AX寄存器和CX寄存器的内容相加,结果存入AX寄存器中。
ADDAX,CX
2、用寄存器BX和DI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
ADDAL,[BX+DI]
3、用寄存器BX和位移量0DDH的寄存器相对寻址方式把存储器中的一个字和(DX)相加,并把结果送回存储器中。
ADD[BX+0DDH],DX
4、用位移量为5600H的直接寻址方式把存储器中的一个字与数8765H相加,并把结果送回该存储单元中。
ADD[5600H],8765H
5、把数0E8H与(AH)相加,并把结果送回AH中。
ADDAH,0E8H
1、已知堆栈寄存器ss的内容是0E000H,堆栈指针寄存器SP的内容是02FFH,先执行两条把1234H和5678H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP的内容变化过程示意图(标出存储单元的物理地址)。
E02FFH
E02FBH
78H
E02FCH
56H
E02FDH
34H
E02FEH
12H
执行PUSH后
执行POP后
MESSAGEDB‘HELLOW’
MESSA1DB‘AB’
MESSA2DW‘AB’
MESSAGE
‘H’
‘E’
‘L’
MESSA1
MESSA2
‘O’
‘W’
‘A’
‘B’
ARR1DW2DUP(3,4,?
ARR2DW10DUP(?
ARR1
03
ARR2
‘CPROGRAME’:
(2)FLD2B为十六进制数字节变量:
10:
(3)FLD3B为十进制数字节变量:
50:
10101010;
9361256;
(6)FLD6B为20个零的字节变量;
(8)FLD1W为十六进制数字变量:
BBCC53;
(10)LD4W为包括5个十进制数的字变量:
1,8,2,4,9;
FLD1BDB‘CPROGRAME’
FLD2BDB10H
FLD3BDB50
FLD4BDB10101010B
FLD5BDB‘9361256’
FLD6BDB20DUP(0)
FLD1WDWBBH,CCH,53H
LD4WDW1,8,2,4,9
2、写出“调用程序和子程序在同一代码段中”框架
MAINPROCFAR
CALLSUBR1
MAINENDP
SUBR1PROCNEAR
SUBR1ENDP
1、编一个程序,从键盘接受一个小写字母,然后找出它的前导字符和后续字符再按顺序显示出来。
DECAL
MOVCX,3
DISPLAY:
MOVAH,2
INCDL
LOOPDISPLAY
第三套
1、MOVBX,AX设(AX)=5800H,(BX)=6C7BH
指令执行后(BX)=__6C7BH_______,(AX)=__6C7BH_______
2、ADDAL,BH设(AL)=3DH,(BH)=5FH
指令执行后(AL)=__9CH_____,(BH)=__5FH_______
设(BX)=7D00H,(BP)=0520H,(SI)=0100H,(SS)=3C00H,(3C620H)=5FABH,OPR2的物理地址=3C000+0520+0100=3C620
则指令执行后(BX)=5FABH,(3C620H)=7D00H
4、LESDI,[BX]设(DS)=D000H,(BX)=07DBH,(0D07DBH)=0321H,(0D07DDH)=6000H则指令执行后(DI)=0321H,(ES)=6000H5、LDSSI,[78H]设(DS)=1000H,(10078H)=0A00H,(1007AH)=B000H,则指令执行后(SI)=0A00H,(DS)=B000H
6、MULAL,DL
如指令执行前,(AL)=08H,(DL)=05H
执行AAM后,(AH)=04H,(AL)=00H
7、MOVAX,[BX][DI]如(DS)=5300H,(BX)=02A0H,(DI)=29FCH
则物理地址=559C9CH
如果(DS)=8000H,(BX)=4500H,(SI)=0876H,MASK=0745H,
则物理地址=854BBH
9、在一个程序开始执行以前(CS)=0C376H,(如16进制数的最高位为字母,则应在其前加一个0)(IP)=8BFAH,
试问该程序的第一字的物理地址是0CC35AH
10、MOVAL,43H
ORAL,20H
上述指令执行后(AL)=63H
SAL[DI],CL
(0F980AH)=0C80H,CF=00H
12、已知(BCD3)=1234,(BCD4)=2345,BCD3和BCD4均为用压缩的BCD码表示的十进制数,由于它们都是4位数,所以每个数占有2个字节,高位数占有高位字节,其存放方式为
(BCD3)=34,(BCD3+1)=12
(BCD4)=45,(BCD4+1)=23
欲使以下指令序列实现,(BCD1)(BCD3)+(BCD4)的功能(请在横线上添上适当的语句)
MOVAL,BCD3
ADDAL,BCD4
MOVBCD1,AL
MOVAL,BCD3+1
ADCAL,BCD4+1
MOVBCD1+1,AL
1、把CX寄存器和AX寄存器的内容相加,结果存入CX寄存器中。
ADDCX,AX
2、用寄存器BX和DI的基址变址寻址方式把存储器中的一个字节与DH寄存器的内容相加,并把结果送到DH寄存器中。
ADDDH,[BX+DI]
3、用寄存器BX和位移量0D1H的寄存器相对寻址方式把存储器中的一个字和(AX)相加,并把结果送回存储器中。
ADD[BX+0D1H],AX
4、用位移量为08A0H的直接寻址方式把存储器中的一个字与数0A760H相加,并把结果送回该存储单元中。
ADD[08A0H],0A760H
5、把数0FH与(AL)相加,并把结果送回AL中。
ADDAL,0FH
1、已知堆栈寄存器ss的内容是0AA00H,堆栈指针寄存器SP的内容是01EDH,先执行两条把1357H和2468H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP的内容变化过程示意图(标出存储单元的物理地址)。
AA1EDH
AA1E9H
68H
AA1EAH
24H
AA1EBH
57H
AA1ECH
13H
DATA_BYTEDB67,01110001B,10H,0FDH
DATA_WORDDW127,10H,-1
DATA-DWDD2+3*5,0FEDCH
43
71
7F
11
DC
FE
ABCDB0,?
?
0
DEFDW?
52,?
ARRAYDB100DUP(0,2DUP(1,2),0,3)
ABC
DEF
ARRAY
34
四、请设置一个数据段DATASG,其中定义以下字符