一、填空题:
1、下述程序段执行后(A)=_______________,(B)=________________;设程序段执行前SP=0200H,执行后SP=____________________。
A DW 1234H B DW 5678H ...
PUSH A PUSH B POP A POP B
2、分别写出一条能完成下述操作的指令:
(1)将寄存器BX的内容送入堆栈 (2)将数据2送入字单元DS:[SI]中 (3)用逻辑与指令将al的第六位设为0 (4)AX的内容加1,要求不影响CF (5)子程序返回调用程序 (6) 将AX中划‘X’的位清0,其余位不变:____________________;
150XX
(7) 将AX的内容算术左移1位:____________________。
3、指出下列指令中目的操作数与源操作数的寻址方式。(4分) (1) MOV BX, AX (5) MOV BX, [1234H] (2) SUB AH, 4CH (6) ADD [2000H], DX (3) XCHG 5[BP][DI], BX (7) AND BYTE PTR [BX], 0FH (4) OR [BX][DI], AH (8) SBB AX, ASC [BX] 题号 目的操作数 源操作数 (1) (2) (3) (4) (5) (6) (7) (8) 4、写出下列传送指令的源操作数的寻址方式(VAR 是变量) 1) MOV AX,1200 2) MOV AX,VAR[BX][DI] 3) MOV CX,VAR[BX] 4) MOV DI,[BX+100] 5) MOV AX,[1100H] 6) MOV AX,[BX] 7) MOV AX,DS:[BP]
5、下述程序段执行后SI=_______________,DI=________________;设程序 段执行前SP=1000H,执行后SP=____________________。
MOV SI,2A1DH MOV BX,3456H PUSH SI PUSH DI SUB SI,DI POP DI POP SI
6、下述程序段执行后AX=_______________,BX=________________;设程序 段执行前SP=1000H,执行后SP=____________________。
MOV AX,1234H MOV BX,5678H PUSH AX PUSH BX
7、下列语句在存贮器中分别为变量分配多少字节? VR1 DB ? ; VR2 DW 4 DUP(?),2 ; VR3 DD 1234H ;
8、设(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=1234H, (20102H) =5678H, (21200H)=2A4CH, (21202H)=B765H,下列指令单独完成后AX寄存器的值是多少。
1)MOV AX,1200H ____________ 2)MOV AX,BX ____________ 3)MOV AX,[1200H] ____________
4)MOV AX,[BX] ____________ 5)MOV AX,1100H[BX] ____________ 6)MOV AX,[BX][SI] ____________ 7)MOV AX,1100H[BX]SI] ____________
9、下列指令段经汇编后,DATA所代表的偏移地址为___。 ORG 1000H STROE DB 12 DUP(?)
DATA DB 05H,06H,07H,08H
A. 100CH B. 1001H C. 1012H D. 100BH
二、选择题
1.设(BX)=0400H ,(SI)=003CH ,(DS)=2000H ,(2043CH)=0079H ,执行
LEA BX , [BX + SI] 后,(BX)= _____________ 。
A. 0040H B. 0079H C. 043CH D. 2043CH 2.LOOP指令中循环计数器一定在_____________寄存器中。 A. AX B. CX C. BX D. DX
3.在串操作指令前使用重复前缀指令REPNE,终止串重复操作的条件是
__________。
A. CX=0且ZF=0 B. CX=0且ZF=1 C. CX=0或ZF=0 D. CX=0或ZF=1 4.执行下列指令后,正确的结果是__________。
MOV AL,100
MOV BL,-2
A. AL=100H,BL=02H C. AL=64H,BL=82H
B. AL=64H,BL=0FEH D. AL=100H,BL=0FEH
5.已知(BX)=0010H,(DS)=2000H,(20010H)=0020H,(20012H)=1000H,在执行指令JMP DWORD PTR [BX]后,(IP)=__________。 A. 0010H C. 0020H
B. 2000H D. 1000H
6.设(BX)=1111H,下列__________指令执行后,BX的值变为0888H。 A. SHL BX,1 B. AND BX,FFF0H C. OR BX,1FFFH D. SHR BX.,1
7.指令MOV AX, [3070H]中源操作数的寻址方式为__________。 A. 寄存器间接寻址 B. 立即寻址 C. 直接寻址 D. 变址寻址
8.设(BP)=0400H ,(DS)=2000H ,(SS)=2001H ,(20400H)=9A3EH,(20410H)
=3512H,执行MOV BX,[BP] 后,(BX)= _____________ 。
A. 0400H B. 0410H C. 9A3EH D. 3512H 9.在串操作指令前使用重复前缀指令REPE,终止串重复操作的条件是
__________。
A. CX=0且ZF=0 B. CX=0且ZF=1 C. CX=0或ZF=0 D. CX=0或ZF=1 10.设(IP)=3D8FH,(CS)=4050H,(SP)=017CH,[SP]=1234H,当执行段内过程
返回指令RET后,CS:IP的值为__________。
A. 4050H:3D40H B. 1234H:3D8FH C. 4050H:1234H D. 1234H:017CH 11.设(BX)=1111H,下列__________指令执行后,BX的值变为1110H。 A. SHL BX,1 B. AND BX,FFF0H C. OR BX,1FFFH D. SHR BX.,1 12、在下列语句中,AGAIN称为_____________。
AGAIN: INC SI A. 符号 C. 标号 A. 程序结束 C. 段定义结束
B. 助记符 D. 变量
B. 过程定义结束 D. 过程运行结束
13、伪指令END告诉汇编程序__________。
14、能判断累加器内容是否为全零的下面4种方法中,正确的有______种。 SUB AX,0 XOR AX,0 JZ L1 JZ L1
OR AX,AX TEST AX,0FFFFH JZ L1 JZ L1
A. 1 B. 2 C. 3 D. 4
15、设(20010H)=3FH,(20011H)=B2H,执行下列指令段后,BX=______。 MOV AX,2000H MOV DS,AX MOV BX,[0010H]
A. B2B2H B. B23FH C. 3F3FH D. 3FB2H
16、设SP=2500H,RAM 2500H ─ 2505H内分别存放10H,20H,30H,40H, 50H,60H六个数,执行MOV SP,2502H,POP BX两条指令后___。 A. SP=2502H BX=1020H B. SP=2504H BX=4030H C. SP=2504H BX=3040H D. SP=2502H BX=2010H 17、下列指令中不影响堆栈内容的是___。
A. PUSH B. RET C. JMP D. CALL 18、 下列指令段经汇编后,(CX)=___。 ARRAY DW 12 DUP(?) MOV CX,SIZE ARRAY
A. 1 B. 12 C. 24 D. 0 19、下列指令中允许寻址范围最大的是___。 A. JNZ NEXT B. LOOP NEXT
C. JMP SHORT PTR NEXT D. CALL NEAR PTR PROC_NAME 20、下列指令中能完成测试AL中最高位是否为1的指令数目是___。 CMP AL,80H TEST AL,80H RCL AL,1 ROR AL,1 A. 1 B. 2 C. 3 D. 4
三、简答题
1、设DS=3000H,ES=3100H,SS=1500H,SI=00B0H,BX=0200H,BP=0010H,数据变量VAL的偏移地址为0030H,请指出下列指令的源操作数字段的寻址
方式,如果源操作数为存储器寻址方式的一种,写出其物理地址值是什么?(本题10分,每小题2分)
(1)MOV AX,[BX][SI]
(2)MOV AX,[100]
(3)MOV AX,VAL[BX]
(4)MOV AX,[BP] (5)MOV AX,ES:[BX]
2、设堆栈指针SP的初值为1008H,AX=4000H,BX=5000H,试问: (1)执行指令PUSH AX后SP=? (2)执行完PUSH AX再执行PUSH BX 及POP AX后SP=?,AX=?,BX=?(5分)
3、下列指令是否正确,如不正确请指出原因,并改正。(5分) (1) MOV AL,BX
(2) MOV AL,CL
(3) MOV 3,AL
(4) MOV [BX],[SI]
(5) POP CS
4、指出下列指令是否正确,若不正确请说明原因。(4分) (1) MOV BX, AL (2) MOV [BX], [2000H] (3) DIV [SI][DI] (4) SHL AX, 5H (5) PUSH DL (6) MOV DS, DSEG (7) MOV SP, AL (8 MOV SS, 2400H (9) MUL AL,BL
(10) MOV BYTE PTR[DI], 2000H (11) MOV CS, CX (12) DEC [BX]
(13) ADC [1000H], 40H (14) CMP 16, AX (15) OUT 258H, AX
(16) MOV WORD-OP[BX+4×3] [SI], SP
5、假设(AX)=5E7AH, VER为字变量,(BX)=1234H,读程序段,写出每条指令执行后各寄存器的值。(5分)
MOV AX, 5E7AH ;(AX)= ______
MOV WORD PTR [VER], 00FEH ;VER所指的字单元内容为______ MOV BX, 0FF0H ;(BX)= ______ NOT BX ;(BX)= ______ AND AX, VER ;(AX)= ______ MOV CL, 4 ;(CL)= ______
SHR AX, CL ;(AX)= ______,(CL)= ______ XOR AX, BX ;(AX)= ______,(BX)= ______ OR AX, VER ;(AX)= ______ TEST AX,1234H ;(AX)= ______
6、下列程序段实现传送200个字节的数据的功能。程序如下,写出该程序段中每条指令的注释(4分)
LEA SI, BUFFER1 ; LEA DI, BUFFER2 ; MOV CX,200 ; CLD ; REP MOVSB ; HLT ;
7、阅读下段程序,给出划线语句的注释,并说明程序完成什么功能?(5分) DATA SEGMENT
BUFFER1 DB 200 DUP(1) BUFFER2 DB 200 DUP(?) DATA ENDS …….
MOV AX,2000H MOV DS,AX MOV ES,AX
MOV SI , OFFSET BUFFER1 ; MOV DI, OFFSET BUFFER2
MOV CX,LENGTH BUFFER1 ;
STD ; REP MOVSB ;
该程序完成的功能:
8、假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,
(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H,试回答出下列源操作数的寻址方式是什么?如果源操作数为存储器寻址方式的一种,写出其物理地址值是什么?(20分,每小题2分)
①) MOV AX,0ABH
②) MOV AX,BX
③) MOV AX,[100H]
④) MOV AX,[BX]
⑤) MOV AX,ES:[BX]
⑥) MOV AX,[BP]
⑦) MOV AX,[BP+10]
⑧) MOV AX,VAL[BX]
⑨) MOV AX,[BX][SI]
⑩) MOV AX,VAL[BX][SI]
9、设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶地址为多少?执行PUSH BX后,栈顶地址和栈顶两个字节的内容分别是多少? 10、试用3种指令序列实现字变量A、B的内容交换。 11、写出完成下列要求的变量定义语句。
1)为某个缓冲区BUFF预留240各字节的存储空间
2)将字符串’BYTE’、’WORD’存放于某数据区
3) 10字数组ARRAY的前五个元素为1,2,3,4,5
12、画图说明下列语句所分配的存储空间及初始化的数据值。 VAR1 DB ‘HELLO’ VAR2 DW 1A2BH,2 DUP(0,?) 13、编写一个子程序,子程序的说明信息如下 子程序名:FUN 功能:求 x×20
入口参数:AX=x,x是一个16位无符号数 出口参数: 积存放于寄存器SI和DI。 14、已知有如下段定义:
DATA SEGMENT 地址 内容 BUF1 DW 1234H 2000:0000 BUF2 EQU 3
BUF3 DB ‘31’,2DUP(BUF2,10) BUF4 DW BUF3-BUF1
DATA ENDS
设定位后BUF1的地址为 2000H:0000H (1) 在右图中写出该段占用内存的内容
及其对应的地址。
(2) 填空:
BUF2= TYPE BUF4= LENGTH BUF1= SEG BUF3= OFFSET BUF3=
15、编写程序段,用系统功能调用的方法接收键盘一个按键并将其在显示器显示
输出。
16、画图说明下列语句所分配的存储空间及初始化的数据值。 VAR1 DB VAR2 DW
‘abc’,2 DUP(0,?) 1,2 DUP(0,?)
17、下面程序段完成功能:从键盘输入一个字符,然后输出在屏幕上。读程序段,
完成程序。
MOV AH,
INT 21H MOV MOV AH,2
18、程序中的数据定义如下:
LNAME DB 49H, 42H, 4DH, 2DH
ADDRESS DB 2 DUP(?) ENTRY DB 3
LIST DB 11, 7, 8, 3, 2
(1)假设LNAME相对于某数据段地址偏移为0,试画出内存分配图; (2)用一条MOV指令将LNAME的偏移地址放入AX; (3)用一条指令将LIST的头两个字节的内容存入SI;
(4)执行下列指令后,AX寄存器中的内容是什么? LEA BX, LIST ADD BX, ENTRY
MOV AX, WORD PRT[BX]
19、 根据下列要求编写一个汇编语言程序:: (1)代码段的段名为COD_SG (2)数据段的段名为DAT_SG (3)堆栈段的段名为STK_SG
(4)变量HIGH_DAT所包含的数据为95
(5)将变量HIGH_DAT装入寄存器AH,BH和DL (6)程序运行的入口地址为START 20、指出下列程序中的错误:
STAKSG SEGMENT DB 100 DUP(?) STA_SG ENDS DTSEG SEGMENT DATA1 DB ? DTSEG END
CDSEG SEGMENT MAIN PROC FAR START: MOV DS,DATSEG MOV AL,34H ADD AL,4FH MOV DATA,AL START ENDP CDSEG ENDS END
21、将下列文件类型填入空格:
(1) .obj (2) .exe (3) .crf (4) .asm (5) .lst (6) .map 编辑程序输出的文件有_____________________________________; 汇编程序输出的文件有_____________________________________; 连接程序输出的文件有_____________________________________。
22、已知8086-CPU寄存器的内容如下:
AX=0123H,BX=1234H,CX=4567H,DX=9ABCH DS=2300H, SS=3000H,ES=2800H, DI=1F00H
SP=1000H,BP=0010H,SI=0000H,
写出下列过程每条指令执行后,有关寄存器和内存单元的内容。(5分) (注:无变化的不要标出,内存单元地址用逻辑地址表示)。
LLL PROC FAR
MOV WORD PTR [BP],23H
PUSH CX
MOV [DI+2800H],DX
PUSH BX
RET LLL ENDP
23、下列语句在存储器中分别为变量分配多少字节?
VR1 VR2 CONT VR3 VR4 VR5
DW 9
DW 4 DUP(?) EQU 10
DD CONT DUP(?)
DB 2 DUP(?,CONT DUP(0)) DB ‘HOW ARE YOU?’
24、试定义一个完整的数据段,首先将10个压缩的BCD码29存放在ARRAY变量字节单元,紧接着把-28,6,45,39,3存放在ALPHA数组变量的字单元中,最后从字节变量BUFFER单元开始预留100个空单元备用。 25、按下面的要求写出程序的框架。
(1)数据段的位置从0E000H开始,数据段中定义一个100字节的数组; (2)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值; (3)程序结束
26、下面的程序段有错吗?若有,请指出错误。 CRAY
PROC
AX AX,BX
PUSH ADD RET
ENDP CRAY
27、写出完成下述功能的程序段或指令 1) 写出几条使AX内容为0的指令 2) 使BL寄存器中的高4位和低4位互换 3) 屏蔽CX寄存器的b11,b7和b3位
4) 测试DX中的b0和b8位是否都为1,若不为1,跳转至L1 28、在下列程序的括号中分别填入如下指令: 1)LOOP L20 2)LOOPE L20 3)LOOPNE L20
试说明在三种情况下,当程序段完成后,AX,BX,CX,DX四个寄存器的内容分别是什么:
MOV AX,01 MOV BX,02
MOV DX,03 MOV CX,04 L20: INC AX ADD BX,AX SHR DX,1 ( )
29、编写一程序段,比较两个5字节的字符串OLDS和NEWS,如果不同则转到NEW_LESS执行,否则顺序执行。
30、用其他指令完成如下指令同样的功能。 1)REP MOVSW 2)REP LODSB 3)REPZ
CMPSB 4)REPNE
SCASB
三、程序分析题
1、下面的程序求数据段中从BUFF开始的10个字数据的最大值。填充程序中的空白,除非必要,不要写标号。 DATA COUNT
SEGMENT
DW 10
DW -1,0,2,5,4,12,34,90,7,8 DW ? ENDS SEGMENT
BUFF MAX
DATA CODE
ASSUME CS:CODE,DS:DATA
START: MOV DS,AX
MOV
CX,COUNT-1
MOV ADD CMP
DX, [SI] SI,2 [SI],DX
L0:
JC L1
DX, [SI]
MOV
L1:
L0 MAX, DX AH,4CH 21H
JNZ
MOV MOV INT
END START
2、下面的子程序NUM统计一个8位二进制数中的为1的位的个数。调用该子程序时,8位二进制数存放在AL中。子程序返回时,求出的个数存放在BL中,要求AL的内容保持不变。填充程序中的空白,除非必要,不要写标号。
NUM
PROC
MOV BL,0
CL,8
MOV
A1: JNC A2
A2: DEC CL JNZ A1 POP AX RET
4、下面的程序求数据段中从BUFF开始的10个字类型数的累加和。填充程序中的空白,除非必要,不要写标号。 DSEG SEGMENT
BUFF DW 2,3,4,10,9,89,34,20,9,7,100 RESULT DD ? DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG START: MOV DS,AX
MOV AX,0 MOV DX,0
MOV CX,10
CLC
AGAIN:
ADC DX,0
ADD SI,2
JZ AGAIN
MOV RESULT,AX MOV AH,4CH INT 21H
CSEG ENDS
5、下面的程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符
结束),并将其中的大写字母转化成小写字母,然后将该字符串输出。填充程序中的空白,除非必要,不要写标号。
BUF DB 80,?80 DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CD:CODE,DS:DATA START: MOV DS,AX
;接收用户键入的字符串 __________________ MOV CL,BUF+1 MOV CH,0
LEA SI,BUF+2
L1: MOV AL,[SI]
CMP AL,’A’
JB NEXT
CMP AL,’Z’
JA NEXT
NEXT: INC SI
MOV AH,09H
MOV DX,OFFSET BUF INT 21H
INT 21H CODE ENDS
6、下面的程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并对其中数字计数,然后将结果存入digit存储单元中。填充程序中的空白,除非必要,不要写标号。 DATA SEGMENT
BUF DB 80,?,80 DUP(?) DIGIT DB 0
CODE SEGMENT
ASSUME CD:CODE,DS:DATA START: MOV DS,AX
;接收用户键入的字符串) __________________
;取实际输入字符个数
_________________ LEA SI,BUF+2 L1: MOV AL,[SI]
CMP AL,’0’
JB NEXT
CMP AL,’9’
JA NEXT
INC BYTE PTR [DIGIT]
NEXT: INC SI
MOV AH,4CH
INT 21H CODE ENDS
7、下面的程序通过调用子程序HASCII,实现把XX存储单元中的一位十六进制数转换为对应ASCII码,并存储在ASCII单元中 。填充程序中的空白,除非必要,不要写标号。 其中:子程序名:HASCII
功能:把一位十六进制数转换为对应ASCII码 入口参数:AL=待转换的十六进制数 出口参数:AL
算法: X+30H(0<=X <=9) Y= X+37H(0AH<=X<=0FH ) DATA XX
SEGMENT
DB 4
DB ?
ASCII
DATA ENDS CODE
SEGMENT
START:
MOV AX,DATA
MOV MOV
DS,AX AL,XX
CALL HASCII
MOV AH,4CH
INT 21H
)
AND CMP
AL,0FH AL,9
JG LAB1 ADD
AL,30H
ADD
AL,37H
LAB1: LAB2:
HASCII ENDP CODE
ENDS END
START
8、用串操作指令将100H个字符从2100H处搬到1000H处,并且从中检索与AL中所存字符相同的存储单元,并将该单元的内容替换成空格,本程序只替换检索到的第一个相同的单元。请在下列空格中填入合适的指令,使程序段完成上述功能。
┇
MOV SI,2100H (1) MOV CX,100H CLD
(2) MOV DI,1000H MOV CX,100H (3) JNZ K1 (4) MOV [DI],20H K1: ┇
四、编程题
1、编写子程序NUM统计寄存器AL数中的为1的位的个数,并将统计结果存放在BL中。
2、编写一个程序,判断AX中的数是正数、负数还是零。若AX是正数,将-1存入CL;
若AX=0,将0存入CL否则若AX是负数,将1存入CL。要求画出流程图并写出源程序。
3、数据段从1000H 开始,有10个字节的无符号数,编写一个程序求这10个数
的和(用8位运算指令,和小于2个字节表示的最大范围),把和放在100AH及100BH单元中。
4、编程将CX、DX作为双字联合右移四位(设CX为高16位),最高4位送入全1。
5、从ARRAY开始的单元中存有10个16位无符号数,试编一完整程序找出其中最小数并存入MIN单元。 6、利用DOS系统功能调用,将键盘输入的小写字母转换成大写字母输出显示,直到输入“$”字符时停止输出。
7、要求编写程序比较两个最大长度为100个字符的字符串ALFA1和ALFA2是否相等,若相等则输出显示“All Right!”,否则输出显示“Error!”。
8、有一个最大长度为80个字符的字符串STRING,试编写程序找出第一个空格的位置(用00H~4FH表示),并存入CL中。若该串无空格,则将0FFH存入CL中。 9、从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类统计计数存入N1、N2、N3三个单元。
10、编写一个子程序SKIPLINES,完成输出空行的功能,空行的行数存放在AX中。
;功能:输出空行
;入口参数:AX:空行的行数 ;出口参数:无
因篇幅问题不能全部显示,请点此查看更多更全内容