《汇编语言程序设计》复习资料.docx
《《汇编语言程序设计》复习资料.docx》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》复习资料.docx(21页珍藏版)》请在冰豆网上搜索。
《汇编语言程序设计》复习资料
《汇编语言程序设计》复习资料
17、下列指令中,执行后对标志未发生影响的是_A、B、E、F、H、I、M、N、O_____。
A、MOVAX,[BX] B、PUSHAX C、ADDAX,00FFH
D、CMPAX,BX E、JBNEXT F、CALLSUBB
G、XORAX,AX H、MOVSB I、LEADX,BUF
J、TESTAX,8000H K、MULBX L、DIVBX
M、NOTCX N、LOOPLOP O、XCHGAX,BX0
18、按照下列指令中操作数的寻址方式在括号中填入适当的字母:
源操作数 目的操作数
A、MOVAX,1200H (A )(B )
B、CMPWORDPRT[SI],120H (A )(D )
C、ADDAX,14[BX] (E)(B)
D、SUB[BX+DI],CX (B )(F)
E、ANDBX,BUF (C )(B )
F、LEADI,[SI] (D )(B )
G、XOR[BX+SI+3],DX (B )(G)
a.立即寻址; b.寄存器寻址; c.直接寻址;
d.寄存器间接寻址; e.寄存器相对寻址; f.基址变址寻址;g.相对基址变址寻址.
19、某存储单元的地址为3A80:
13EBH,其中的3A80是__段地址,13EB是__偏移____地址;该存储单元的物理地址是__3BBEB____。
若段地址改变为20D4,则该存储单元的逻辑地址为__20D4:
_1AFABH___。
20、十进制数-100的8位二进制数的补码为(C )。
A、 B、 C、 D、
21、下列是8位二进制数的补码,其中真值最大的是(D )。
A、 B、 C、 D、
22、16位有符号数的补码所表示的十进制数的范围是(B )。
A、-32767~+32768 B、-32768~+32767 C、-65535~+65536 D、0~65535
23、以下指令中,执行后AL中的数据不变的是(B、D、E、F )。
A、ANDAL,CL B、ORAL,AL C、XORAL,AL D、CMPAL,AL
E、ADDAL,0 F、ANDAL,0FFH G、XORAL,0FFH H、ORAL,0FFH
24、下列指令中,执行后,不改变标志位CF的是(A、E、F、G )。
A、NOTAL B、ANDAL,AL C、SALAL,1 D、MULAL
E、MOVSB F、INCAL G、POPAX H、POPF
25、下列指令中,执行后,不改变标志位ZF的是(D )。
A、CMPAL,BL B、ANDAL,AL C、TESTAL,0FFH D、RORAL,CL
26、执行指令CALLSUBB时,所要保护的断点在__IP____寄存器中,而执行指令CALLFARPTRSUBB时,所要保护的断点在___IP、CS_________寄存器中。
27、已知某内存单元的段值和偏移分别为2010H和100H,则该单元的物理地址为(20200H)。
28、已知BX=1000H,SI=2000H,DI=3000H,BP=4000H,则地址表达式[BX+100H]、[DI][BP]和2000H[SI]的值分别为(1100H)、(7000H)和(4000H)。
29、已知AL=22H,AH=21H,则执行SHRAL,1和ROLAH,1后,AL和AH的值分别为(11H)和(42H),AX的值为(4211H)。
30、对于23H号中断,其中断向量在中断向量表中所占的4个存储单元的地址分别为(0008CH)、(0008DH)、(0008EH)和(0008FH)。
31、指令语句MOVAH,0和INT16H实现的功能是(从键盘上读一个字符并把扫描码送到AH中,把ASCII码回送到AL),它的出口参数为(AL=字符码
AH=扫描码)。
32、指令语句MOVAH,3FH和INT21H实现的功能是(读文件或设备(handle)),它的入口参数为(DS:
DX=数据缓冲区地址)。
33.十六进制数88H,可表示成下面几种形式,请找出错误的表示(D)。
A、无符号十进制数136B、带符号十进制数-120
C、压缩型BCD码十进制数88D、8位二进制数-8的补码表示
34.指令指针寄存器是(A)。
A、IPB、SPC、BPD、PSW
35.当执行指令ADDAX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是(A)。
A、表示结果中含1的个数为偶数B、表示结果中含1的个数为奇数
C、表示该数为偶数D、表示结果中低八位含1的个数为偶数
36.完成将累加器AL清零,并使进位标志CF清零,下面错误的指令是(A)。
A、MOVAL,00HB、ANDAL,00HC、XORAL,ALD、SUBAL,AL
37.下列指令执行后总是使CF=0,OF=0的是(A)。
A、ANDB、NEGC、NOTD、INC
38.完成同指令XCHGAX,BX相同功能的指令或指令序列是(D)。
A、MOVAX,BXB、MOVBX,AX
C、PUSHAXD、MOVCX,AX
POPBXMOVAX,BX
MOVBX,CX
39.设AH=0,AL=06H,BL=09H,执行指令ADDAL,BLAAA之后,其结果应是(A)。
AAH=01,AL=05BAH=1AL=15
CAH=0AL=0FHDAH=0AL=05
40.设AL=0B4H,BL=11H,指令“MULBL”和指令“IMULBL”分别执行后OF,CF的值为(B)。
AOF=1,CF=0BOF=1,CF=1
COF=0,CF=0DOF=0,CF=1
41.在串操作指令前使用重复前缀指令REPE,终止串的重复操作条件是(C)。
ACX=0且ZF=0BCX=0且ZF=1
CCX=0或ZF=0DCX=0或ZF=1
42.下面指令中,合理而有意义的指令是(D)。
AREPLODSBBREPSCASBCREPCMPSBDREPMOVSB
43.在汇编语言程序中,对END语句的叙述正确的是(C)。
AEND语句是一可执行语句BEND语句表示程序执行到此结束
CEND语句表示源程序到此结束DEND语句在汇编后要产生机器码
44.下面的数据传送指令中,错误的操作是(D)。
AMOVSS:
[BX+DI],1000HBMOVDX,1000H
CMOVWORDPTR[BX],1000HDMOVDS,2000H
45.下面指令执行后,变量DAB中的内容是(C)。
DAWDW2A05H
DABDB0FAH
MOVAL,BYTEPRTDAW
SUBDAB,AL
A0DAHB0FAHC0F5HD0D0H
46.执行下列指令后,正确的结果是(B)。
MOVAL,100
MOVBL,-2
AAL=100HBL=02HBAL=64HBL=0FEH
CAL=64HBL=82HDAL=100HBL=0FEH
47.设数据段中已有:
DA1DB12H,34H
DA2DW56H,78H
下面有语法错误的语句是(B)。
AADR1DWDA1BMOVDA1+1,AX
CMOVBYTEPTRDA2+1,ALDMOVWORDPTRDA1+1,AX
48.实现将DX:
AX中存放的32位数扩大四倍,正确的程序段是(C)。
ASHLAX,2BRCLAX,2
ROLDX,2SHLDX,2
CMOVCX,2DSHLAX,1
LOP:
SHLAX,1SHLAX,1
RCLDX,1RCLDX,1
LOOPLOPRCLDX,1
49.TA1DW0102H,0304H,0506H这个题目是错的
TA2DB02H,03H,04H
MOVBX,DS:
[0006H]
ANDBX,0FFH
ANDBH,[BX]
上述指令序列运行后,BX的内容是()。
A0605HB0402HC0606HD0204H
50.当一个带符号数大于0FBH时程序转移,需选用的条件转移指令是(C)。
AJLEBJNLCJNLEDJL
51.下面指令序列测试BH中的数是否为奇数,若为奇数则转移至K1处,横线处的指令应为(A)。
TESTBH,01H_________K1
AJNEBJZCJSCJC
52.测试BL寄存器内容是否与数据4FH相等,若相等则转NEXT处执行,可实现的方法是(B)。
ATESTBL,4FHBXORBL,4FH
JZNEXTJZNEXT
CANDBL,4FHDORBL,4FH
JZNEXTJZNEXT
二、根据给定的条件写出指令或指令序列:
1、将一个字节的立即数送到地址为NUM的存储单元中。
MOVNUM,DATADATA是一个字节立即数
2、将一个8位立即数与地址为BUF的存储单元内容相加。
ADDBUF,DATADATA是一个8位立即数
3、将地址为ARRAY的存储单元中的字数据循环右移一位。
RORARRAY,1
4、将16位立即数与地址为MEM的存储单元中的数比较。
CMPWORDPTRMEM,DATADATA是一个16位立即数
5、测试地址为BUFFER的字数据的符号位。
TESTWORDPTRBUFFER,8000H
6、将AX寄存器及CF标志位同时清零。
SUBAX,AX
7、用直接寻址方式将首地址为ARRAY的字数组中第5个数送往寄存器BX中。
MOVBX,ARRAY+8
8、用寄存器寻址方式将首地址为ARRAY的字数组中第5个数送往寄存器BX中。
MOVCX,ARRAY+8
MOVBX,CX
9、用相对寻址方式将首地址为ARRAY的字数组中第8个数送往寄存器BX中。
MOVSI,14
MOVBX,ARRAY[SI]
10、用基址变址寻址方式将首地址为ARRAY的字数组中第N个数送往寄存器BX中。
MOVCL,2
MOVAL,N
DECAL
MULCL
MOVBX,AX
LEASI,ARRAY
MOVBX,[BX][SI]
11、将首地址为BCD_BUF存储单元中的两个压缩BCD码相加,和送到第三个存储单元中。
MOVAL,BCD_BUF
ADDAL,BCD+1DAA
MOVBCD_BUF+2,AL
三、按照给定的条件为程序定义一个数据段,并画出存储单元的示意图:
1、STR是字符串THISISADATA_SEGMENT。
DATASSEGMENT
STRDB"THISISADATA_SEGMENT."
DATASENDS
2、DAT1是字节变量,初值为23,4BH,126,0D3H。
DATASSEGMENT
DAT1DB23D,4BH,126D,0D3H
DATASENDS
3、DAT2是16进制数字变量,初值为100,255,2DUP(3,5)
DATASSEGMENT
DAT2DW64H,0FFH,3H,5H,3H,5H
DATASENDS
4、LEN是以上存储单元的字节数。
DATASSEGMENT
LENDB39D
DATASENDS
四、写出完成下列功能的程序段:
1、将AL中的两位BCD码分离,分别存放DL和DH中。
SUBAH,AH
movcl,4
SHLAX,cl
SHRAL,cl
MOVDL,AL
MOVDH,AH
2、将DL中的4位二进制数转换成16进制数的ASCII码。
SBUDH,DH
movcl,4
SHLDX,cl
SHRDL,cl
ADDDL,30H
CMPDL,3AH
JLOBJ1
ADDDL,7
OBJ1:
ADDDH,30H
CMPDH,3AH
JLOBJ2
ADDDL,7
OBJ2:
......
3、将AL中的8位二进制数高4位和低4位交换。
movcl,4
ROLAL,cl
4、将AL和BL中的非压缩BCD码合并成一个压缩的BCD码,存在AL中。
ANDAL,0FH
ANDBL,0FH
movcl,4
SHLAL,cl
ADDAL,BLDAA
5、将AL中的8位有符号数转换成它的绝对值。
TESTAL,80H
JEOBJ
NEGAL
OBJ:
......
6、用串扫描指令在一个字符串中查找字符'*'。
MOVCX,N;N是字符串的长度
MOVAL,2AH
LEADI,ADDRESS;ADDRESS是要查找的字符串的首地址
REPSCASB
7、将输入的大写字母改变成小写输出。
MOVAH,07H
INT21H
MOVDL,AL
ADDDL,20H
MOVAH,02H
INT21H
8、输入一个字母,然后输出它的后续字母。
MOVAH,07H
INT21H
MOVDL,AL
INCDL
MOVAH,02H
INT21H
9、将DX:
AX寄存器中的32位数向右移两位。
MOVbx,DX
ANDbx,0003H
movcl,2
SHRDX,cl
SHRAX,cl
SHLbx,0EH
ADDAX,bx
10、完成计算7×8。
MOVBL,8
MOVAL,7
MULBL
五、分析指令和程序。
1、已知SS=2000H,SI=1000H,AX=0ABCDH,SP=0100H,BP=00FEH,给出下列指令执行后,指定寄存器中的内容,并画出指令执行中堆栈的变化示意图。
PUSHAX AX=0ABCDH SP=00FEH
PUSHSI SI=1000H SP=00FCH
POP AX AX=1000H SP=00FEH
PUSHBP BP=00FEH SP=00FCH
POP SI SI=00FEH SP=00FEH
POP BP BP=0ABCDH SP=0100H
PUSHAX AX=0ABCDH SP=00FEH
POP BX BX=0ABCDH SP=0100H
2、已知CS=2300H,IP=32B4H,且在数据段中有定义:
ARYDB0AH,28H,00H,3FH
分别给出下列指令执行后的CS和IP的内容:
A、LEABX,ARY
JMPWORDPTR[BX] CS=2300H IP=280AH
B、MOVBX,OFFSETARY
CALLWORDPTR[BX] CS=2300H IP=280AH
C、MOVBX,OFFSETARY
JMPDWORDPTR[BX] CS=3F00H IP=280AH
3、
MOVAL,0
MOVBL,0
MOVCX,10
L1:
INCBL
INCBL
ADDAL,BL
LOOPL1
HLT
程序的功能是__求公差为2的等差数列的前10项的和,画出程序的流程图。
4、
XDB14
YDB4DUP(?
)
MOVSI,0
MOVAH,0
MOVAL,X
MULAL
MULAX
MOVWORDPTR[SI],AX
INCSI
INCSI
MOVWORDPTR[SI],DX
HLT
程序执行后X和Y的关系是__X是放AX中的低8位,Y的第一个字节里是放AX中的高8位___,画出程序的流程图。
5、
MOVAX,4BD5H
MOVBL,0
MOVDL,0
MOVCX,16
L1:
SHLAX,1
JC L2
INCBL
JMPL3
L2:
INCDL
L3:
LOOPL1
HLT
程序的功能是__是统计AX中的0的个数和1的个数__,程序执行后BL=___05H______,DL=__09H_______,AX=__0000H_______。
画出程序的流程图。
6、
XORDX,DX
L1:
MOVAH,1
INT21H
CMPAL,'$'
JZ BACK
CMPAL,30H
JB L1
CMPAL,39H
JA L1
ANDAL,0FH
ADDDL,AL
ADCDH,0
JMPL1
BACK:
HLT
程序的功能是__从键盘输入0-9之间的数并求和然后把和放在DX中,程序以输入“$”符号结束__,画出程序的流程图。
六、编写汇编语言程序,要有完整的格式(要有必要的数据段和代码段)
1、在屏幕上显示两个字符串,两个字符串要在不同的行。
Thisisaprogram
Diskoperationsystem
程序如下:
DATASEGMENT
DATA1DB"Thisisaprogram$"
DATA2DB"Diskoperationsystem$"
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
SUBDX,DX
LEADX,DATA1
MOVAH,09
INT21H
MOVAH,02
MOVDL,0AH
INT21H
MOVDL,0DH
INT21H
LEADX,DATA2
MOVAH,09
INT21H
RET
MAINENDP
CODEENDS
ENDSTART
2、用移位指令将X乘以30,结果存入Y单元。
DATASEGMENT
XDW?
YDW2DUP(?
)
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAX,X
MOVBX,X
MOVCH,AH
ANDCH,1FH
SUBDX,DX
MOVDL,CH
MOVCL,5
SHLAX,CL
SHLBX,1
SUBAX,BX
SBBDX,0
MOVY,AX
MOVY+2,DX
RET
MAINENDP
CODEENDS
ENDSTART
3、设有三个数A,B和C,如果其中一个为0,将另外两个也清零,否则求它们的和,存入D单元中。
DATASEGMENT
ADW?
BDW?
CDW?
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
CMPA,0
JEBACK
CMPB,0
JEBACK
CMPC,0
JEBACK
JMPEXIT
BACK:
MOVA,0
MOVB,0
MOVC,0
EXIT:
RET
MAINENDP
CODEENDS
ENDSTART
4、在一个数组中查找最大数。
DATASEGMENT
ARRAYDW11DUP(?
)
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVCX,10
MOVSI,0
MOVDX,ARRAY[SI]
BACK:
CMPDX,ARRAY[SI]
JLECONTINUE
MOVDX,ARRAY[SI]
CONTINUE:
INCSI
INCSI
DECCX
JCXZEXIT
JMPBACK
EXIT:
MOVARRAY[SI],DX
RET
MAINENDP
CODEENDS
ENDSTART
5、用查表法计算Y=X*X-2*X。
DATASEGMENT
ARRAYDW2,X,Y
DATAENDS
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
SUBAX,AX
MOVAL,BYTEPTR[ARRAY]
IMULBYTEPTR[ARRAY+2]
MOVDX,AX
MOVAL,