汇编语言.docx
《汇编语言.docx》由会员分享,可在线阅读,更多相关《汇编语言.docx(14页珍藏版)》请在冰点文库上搜索。
![汇编语言.docx](https://file1.bingdoc.com/fileroot1/2023-5/27/58289399-481d-4cf3-986b-46991cdb8dfd/58289399-481d-4cf3-986b-46991cdb8dfd1.gif)
汇编语言
汇编语言复习题
一、简答题
1、存储器地址为什么要分段?
物理地址是如何形成的?
2、IBMPC机的寻址方式(与数据有关的寻址方式)有几种?
各举一例说明。
3、80x86微机的存储器中存放信息如下图所示。
试读出30022H与30024H字节单元的内容与30021H和30022H字单元的内容。
4、现有(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]
5、完成下列各式补码数的运算,并根据结果设置标志位SF,CF,ZF,OF,指出运算结果是否有效
1)01001001b+10011101b
2)01000001b-10101011b
6、有符号定义语句如下:
BUFFDB1,2,3,’123’
EBUFFDB0
LEQUEBUFF-BUFF
问L的值为多少?
为什么?
答案:
1、IBMPC系列机的字长为16位,能够访问的最大存储空间64KB,而在IBMPC内存为1MB的情况下,访问这1MB的存储空间需要20位。
为了解决字长为16位的机器访问1MB的存储空间,将1MB空间每16B分为一段,共64K段,以16位段地址:
16位偏移地址的形式组成,物理地址通过如下方式计算:
物理地址=段地址×10h+偏移地址
2、IBMPC机的寻址方式有7种:
1)立即寻址:
MOVAX,1234H;
2)寄存器寻址:
MOVAX,BX;
3)直接寻址:
MOVAX,[1234H];
4)寄存器间接寻址:
MOVAX,[BX];
5)寄存器相对寻址:
MOVAX,20H[BX];
6)基址变址寻址:
MOVAX,[BX][SI];
7)相对基址变址寻址:
MOVAX,100H[BX][SI];
3、解:
(30022H)=12H
(30024H)=56H
(30021H)=12CDH
(30022H)=3412H
4、解:
(1)MOVAX,1200H
解:
(AX)=1200H
(2)MOVAX,BX
解:
(AX)=0100H
(3)MOVAX,[1200H]
解:
物理地址=(DS)×10H+1200H
(AX)=4C2AH
(4)MOVAX,[BX]
解:
物理地址=(DS)×10H+0100H=20100H
(AX)=3412H
(5)MOVAX,1100[BX]
解:
物理地址=(DS)×10H+0100H+1100H=21200H
(AX)=4C2AH
5、
(1)01001001b+10011101b
解:
01001001
+10011101
————————
11100110由此可得:
SF=1CF=0ZF=0OF=0计算结果有效
(2)01000001b-10101011b
解:
01000001
-10101011
————————
=>01000001
+01010101
————————
10010110由此可得:
SF=1CF=1ZF=0OF=1
减法计算中,被减数、减数符号相反,结果符号与减数相同,OF=1计算结果无效
6、有符号定义语句如下:
BUFFDB1,2,3,’123’
EBUFFDB0
LEQUEBUFF-BUFF
问L的值为多少?
为什么?
解:
根据数据段的定义,BUFF长度定义为6个字节,分别存放1,2,3,‘1’,‘2’,‘3’,而后紧接着为EBUFF的地址,故L值为6
二、程序题
1、MOVBL,64H
MOVCL,03H
XORAX,AX
AGAIN:
ADDAL,BL
ADCAH,0
DECCL
JNZAGAIN
问:
(1)该程序段完成的功能是:
(2)AX=________。
2、已知数据段中定义
DAT1DB12H,34H,56H,78H
MOVCX,0
MOVAX,WORDPTRDAT1
MOVCL,DAT1+3
当程序段执行完后AX=________,CX=________。
3、DA1DB83H,72H,61H,94H,5AH
┇
MOVCX,WORDPTRDA1
ANDCX,0FH
MOVAL,DA1+3
SHLAL,CL
上述指令序列执行后,AL=_______,CL=_______。
4、某程序欲用单个字符显示的2号功能调用去显示STRING中的字符串‘COMPUTER’(不显示字符‘$’!
).试在空白处填上适当的一条指令。
STRINGDB‘COMPUTER’,‘$’
MOVBX,0FFSETSTRING
LOP:
MOVDL,[BX]
MOVAH,02H
INT21H
____________________
____________________
JNELOP
答案:
1、AX=012CH,将AX内容乘3送BX中
2、AX=3412H,CX=0078H
3、AL=0A0H,CL=03H
4、INCBX
CMP[BX],24H
三、名词解释
1、汇编语言
2、物理地址
3、SP:
4、IP:
答案:
1、汇编语言:
用指令的助记符、符号地址、标号等符号书写程序的语言;
2、物理地址:
唯一代表存储空间中每个字节单元的地址;
3、SP:
保存当前栈顶地址的寄存器;
4、IP:
指示下一条要执行指令的地址的寄存器
四、编程题
1、试编制一程序段,用串操作指令实现以DA_BY为首址的20H个字节单元中存放相同字符‘Y’(设DA_BY存储区已有ES指向)。
2、试编制一源程序,统计DA1字单元中含0的个数,如统计的个数为奇数,则将进位位置1,否则进位位清0。
DATASEGMENT
DA1DWXXXX
DATAENDS
4、已知在N到N+i的存储区内有一ASCII码字符串(共i+1个),试编写一个汇编语言程序,将此字符串传送到NI到NI+i单元中,并使字符串的顺序与原顺序相反。
(只写出关键代码段即可)(6)
5、编写程序,求解sum=
=a1+a2+…+a100,要求写出完整程序。
(9)
6、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
只写关键代码段即可(8)
7、试编写一程序,比较两个字符串STRING1与STRING2所含有的字符是否完全相同,若相同则显示“MATCH”,如不同则显示“NOMATCH”,字符串内容自定义,要求写出完整的程序。
(12)
答案:
1、LEADI,DA_BY
MOVCX,32
MOVAL,‘Y’
CLD
REPSTOSB。
2、CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,DA1
MOVCX,16
XORBL,BL
AGAIN:
MOVAL,[SI]
HLAL,1
JCNEXT
INCBL
NEXT:
INCSI
LOOPAGAIN
TESTBL,01H
JNEL1
CLC
JMPDONE
L1:
STC
DONE:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3、解:
LEASI,N
LEADI,NI
ADDDI,I
MOVCX,I
ADDCX,1
MOVE:
CLD
LODSB
STD
STOSB
LOOPMOVE
4、解:
DATASEGMENT
ARRDWa1,a2,a3,a4,a5,a6,…,a100
SUMDW?
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
LEABX,ARR
MOVCX,100
MOVAX,0
AGAIN:
ADDAX,[BX]
ADDBX,2
LOOPAGAIN
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
5、解:
BEGIN:
MOVAH,01H
INT21H
CMPAL,’a’
JBFIN
CMPAL,’z’
JAFIN
SUBAL,20H
MOVDL,AL
MOVAH,02H
INT21H
JMPBEGIN
FIN:
RET
6、解:
DATASEGMENT
STRING1DB‘HEREYOUARE’
STRING2DB‘HEREYOUAER’
YESDB‘MATCH’,0DH,0AH,’$’
NODB‘NOMATCH’,0DH,0AH,‘$’
DATAENDS
CODESEGEMTN
ASSUMECS:
CODE,DS:
DTAT
START:
MOVAX,DATA
MOVDS,AX
BEGIN:
LEAAL,STRING1
LEADL,STRING2
MOXCX,STRING2–STRING1
REPCMPSB
JNEDISPNO
MOVAH,09H
LEADX,YES
INT21H
JMPEXIT
DISPNO:
MOVAH,09H
LEADX,NO
INT21H
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
五、阅读下列各指令序列段,写出它们各完成什么功能
1.SUBAX,CX
SBBDX,BX
2.PUSHAX
PUSHBX
POPAX
POPBX
3.假设DS,ES初始化到同一数据段
CLD
MOVCX,20
LEASI,STRING1
LEADI,STRING2
REPMOVSB
4.CLD
MOVCX,COUNT
MOVAL,‘‘;空格
LEADI,CHAR_FIELD
REPSTOSB
5.MOVCX,M
MOVSI,0
NEXT:
INCARRAY[SI]
ADDSI,2
LOOPNEXT
6.MOVDX,A+2
MOVAX,A
ADDAX,A
ADCDX,A+2
CMPDX,B+2
JLL1
JGL2
CMPAX,B
JBL1
L2:
MOVAX,2
JMPEXIT
L1:
MOVAX,1
EXIT:
HLT
答案:
1、SUBAX,CX
SBBDX,BX
解:
完成双精度数减法功能,即(DX,AX)-(DX,CX)→(DX,AX)
2、PUSHAX
PUSHBX
POPAX
POPBX
解:
将AX与BX的内容交换
3、假设DS,ES初始化到同一数据段
CLD
MOVCX,20
LEASI,STRING1
LEADI,STRING2
REPMOVSB
解:
将STRING1中的20个字符移到STRING2中
4、CLD
MOVCX,COUNT
MOVAL,‘‘;空格
LEADI,CHAR_FIELD
REPSTOSB
解:
用空格符将字符区CHAR_FIELD中的字符全部清除,字符数存在COUNT单元中
5、MOVCX,M
MOVSI,0
NEXT:
INCARRAY[SI]
ADDSI,2
LOOPNEXT
解:
将数组ARRAY的M个单元分别加1
6、MOVDX,A+2
MOVAX,A
ADDAX,A
ADCDX,A+2
CMPDX,B+2
JLL1
JGL2
CMPAX,B
JBL1
L2:
MOVAX,2
JMPEXIT
L1:
MOVAX,1
EXIT:
HLT
解:
如果2×(A+2,A)≤(B+2,B)则AX=1,若2×(A+2,A)≥(B+2,B),则AX=2