|
第五章 汇编程序设计
来源: 作者:王丽 时间:2012-6-03 12:28:04
一、填空题
1、一般指令机器码包括_______和_______。
2、8086CPU指令操作数有_______、_______和_______三类。
3、存储器操作数的寻址方式有_______、_______、_______、_______、_______。
4、INC指令不影响_______标志。
5、当8086CPU访问100H号端口时,采用_______寻址方式,执行的指令是_____________________。
6、根据以下操作说明,用一条指令来实现。
(1)把BX 和DX的内容相加,结果送入DX中。_______
(2)用寄存器BX间接寻址2000H内存单元,并将2000H单元中的内容与AX寄存器相加,结果存入AX寄存
器中。_______
(3)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节数据与AL的内容相加,结果送入AL中
。_______
(4)用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送入该存储单元
中。_______
二、分析题
1、已知(DS)=3000H,(ES)=3500H,(SS)=4000H,(BX)=0038H,(BP)=0019H,(SI)=0012H,变
量DATA的偏移地址是0200H。请说明下列指令中源操作数的寻址方式、若使用内存,说明有效地址EA和
物理地址。
(1)MOV AX,1600H (2)MOV AX,[BP][SI]
(3)MOV AX,[1600h] (4)MOV AL,10H[BX][SI]
(5)MOV AX,BX (6)MOV DX,ES:[BX]
(7)MOV AH,[BP] (8)MOV CX,DATA
(9)MOV AX,30H[BX] (10)MOV AL,ES:[BX]
2、执行下面程序,写出各寄存器的内容,若影响标志位,请给出标志位的状态。
MOV AX,0A0BH
DEC AX
SUB AX,0FFH
AND AX,00FFH
MOV CL,3
SAL AL,CL
ADD AL,25H
XCHG AL,AH
PUSH AX
POP BX
INC BL
MUL BL
3、已知:AX=003AH,请根据AX值用指令实现,使BL=03H,,BH=0AH,CX=03H-0AH,DX=2×3AH,
SI=0A30H,DI=0A03H,用程序编写。
4、已知AL=0D8H,DATA单元中内容为8BH,写出下列每条指令单独执行后的结果。
(1)XOR AL,DATA (2)OR AL,DATA
(3)AND AL,DATA (4)NOT DATA
(5)AND AL,0F0H (6)OR AL,03H
(7)XOR AL,0FFH (8)TEST AL,01H
5、程序执行前已知各寄存器内容DS=092DH,SS=1E4AH,BP=0024H,AX=1234H,BX=0024H,CX=0078H,
SI=0012H,DI=0032H,内存单元(09326H)=00F6H(字),(093C8H)=1E40H(字),(1E4F8H)=091DH
(字)。写出下列程序段执行后相应寄存器及内存单元的内容。
MOV CL,20H[BX][SI]
MOV 2[BP][DI],CX
MOV BX,20H[BX][SI]
MOV AX,2[BX]
MOV [SI],BX
MOV [DI],AX
HLT
6、判断分析下列程序段执行结果:
(1)MOV AX,0A0BH
DEC AX
SUB AX,00FFH
AND AX,00FFH
MOV CL,03H
SHL AL,CL
XCHG AL,AH
ADD AL,25H
PUSH AX
POP BX
INC BL
MUL BL
HLT
执行结果:AX=( ),BX=( ),CX=( )
(2)MOV CX,3100H
MOV WORD PTR[2000H],8150H
MOV BX,[2000H]
MOV SP,2100H
PUSH BX
PUSH CX
POP AX
POP DX
MOV AL,BYTE PTR[2001H]
XOR AL,00H
CBW
IDIV BL
HLT
执行结果:AX=( ),BX=( ),CX=( ),DX=( )
7、设BUFF DB 1,2,3,“0123”;EBUFF DB 0;LENG EQU EBUFF-BUFF,则LENG=(8),LENG
表示含义为( )。
8、如果一个堆栈从地址3250H:0000H开始,它的最后1个字的偏移地址为0100H,SP的内容为0052H,问
:(1)栈顶地址是多少?(2)栈底地址是多少?(3)存入数据1234H和5678H后,SP的内容是多少?
9、如果一个堆栈从地址3250H:0000H至1250H:0100H,(SP)=0052,问(1)栈顶地址是多少?(2)
栈底地址是多少?(3)SS中段地址是多少?(4)若存入数据2456H,在堆栈区如何放置,SP的内容是
多少?
10、假设下列指令中的所有标识符均是类型属性为字的变量,请指出下列指令中哪些是非法的? 它们的
错误是什么?
(1) MOV BP,AL
(2) MOV WORD_OP[BX+4*3][DI],SP
(3) MOV WORD_OP1,WORD_OP2 (4) MOV AX,WORD_OP1[DX]
(5) MOV SAVE WORD,DS
(6) MOV SP,SS:DATA_WORD[BX][SI]
(7) MOV [BX][SI],2
(8) MOV AX,WORD_OP1+WORD_OP2
(9) MOV AX,WORD_OP1_WORD_OP2+100
(10) MOV WORD_OP1,WORD_OP1_WORD_OP2
11、假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处。
(1) ADD VAR1,VAR2
(2) SUB AL, VAR1
(3) JMP LAB[SI]
(4) JNZ VAR1
(5) JMP NEAR LAB
12、画图说明下列语句所分配的存储空间及初始化的数据值。
(1) BYTE_VAR DB ‘BYTE’,12,-12H,3 DUP(0,?,2 DUP(1,2),?)
(2) WORD_VAR DW 5 DUP(0,1,2),?,-5,‘BY’,‘TE’,256H
13、试列举各种方法,用汇编程序把5150H存入一个存储器字中(例如,DW 5150H)。
14、假设程序中的数据定义如下:
PARTNO DW ?
PNAME DB 16 DUP(?)
COUNT DD ?
PLENTH EQU $-PARTNO
问PLENTH的值为多少? 它表示什么意义?
15、有符号定义语句如下:
BUFF DB 1,2,3,‘123’
EBUFF DB 0
L EQU EBUFF-BUFF
问L的值是多少?
16、假设程序中的数据定义如下:
LNAME DB 30 DUP(?)
ADDRESS DB 30 DUP(?)
CITY DB 15 DUP(?)
CODE_LIST DB 1,7,8,3,2
(1) 用一条MOV指令将LNAME的偏移地址放入AX。
(2) 用一条指令将CODE_LIST的头两个字节的内容放入SI。
(3) 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。
17、试写出一个完整的数据段DATA_SEG,把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数
组DATA_LIST的前5个单元中。然后,写出完整的代码段,其功能是把DATA_LIST中前5个数中的最大值和
最小值分别存入MAX和MIN单元中
18、给出等值语句如下:
ALPHA EQU 100
BETA EQU 25
GAMMA EQU 2
问下列表达式的值各是多少?
(1) ALPHA*100+BETA
(2) ALPHA MOD GAMMA+BETA
(3) (ALPHA+2)*BETA-2
(4) (BETA/3) MOD 5
(5) (ALPHA+3)*(BETA MOD GAMMA)
(6) ALPHA GE GAMMA
(7) BETA AND 7
(8) GAMMA OR 3
19、对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示)
TABLEA DW 10 DUP(?)
TABLEB DB 10 DUP(?)
TABLEC DB ‘1234’
MOV AX,LENGTH TABLEA
MOV BL,LENGTH TABLEB
MOV CL,LENGTH TABLEC
20、对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
FLDB DB ?
TABLEA DW 20 DUP(?)
TABLEB DB ‘ABCD’
(1) MOV AX,TYPE FLDB
(2) MOV AX,TYPE TABLEA
(3) MOV CX,LENGTH TABLEA
(4) MOV DX,SIZE TABLEA
(5) MOV CX,LENGTH TABLEB
21、编写程序,接收从键盘输入的10个十进制数字,输入中遇见回车符则停止输入,各个数经过BCD码
处理,以十六进制数显示在屏幕上。
|