一、单项选择题
1.设BX=2000H,SI=3000H,指令MOV AX,[BX+SI+8]的源操作有效地址为( )。
源操作数的寻址方式为基址加变址寻址方式,2000+3000+8=5008H
2.设DS=1000H,ES=2000H,BX=3000H,指令ADD AL,[BX]的源操作数的物理地址为( )。
源操作数的寻址方式为寄存器间接寻址方式,源操作数即为[BX],在约定中,BX的约定段为DS,BP约定段为SS,因此[BX]实为DS:[BX],即物理地址为1000H*10H+3000H=13000H
3.设DS=2000H,ES=3000H,SI=200H,指令MOV ES:[SI],AL的目的操作数的物理地址为( )。
目的操作数的寻址方式为寄存器间接寻址方式,3000H*10H+200H=30200H
4.用来作为寄存器间接寻址的寄存器有( )个。
4个,分别是BP、BX、SI、DI
5.指令MOV [BX+SI],AL中的目的操作数使用( )段寄存器。
约定数据段详细如下:堆栈段SS:BP ,数据段DS:BX、SI、DI,因此[BX+SI]使用DS段寄存器
6.指令MOV BX,[BP+5]中的源操作数使用( SS )段寄存器。
7.段内间接寻址只改变( IP )中的内容。
8.段间间接寻址只改变(CS和IP)中的内容。
9.下列指令不改变PSW的指令是()
A.MOV AX,BX B.AND AL,0FH
C.SHR BX,CL D.ADD AL,BL
PSW状态寄存器
10.下述指令中不影响CF的指令是( )。
A.SHL AL,1 B.INC CX
C.ADD [BX],AL D.SUB AX,BX
INC影响A、O、P、S、Z,不影响C标志,SUB和ADD对六个都有影响,SHL将目的操作数顺序左移1位或CL寄存器中指定的位数。左移一位时,操作数的最高位移入进位标志位CF,最低位补零。
11.两个整数补码9CH和7AH相加运算后,会产生( )。
1001 1100H
+ 0111 1010H
———————— 两个加数最高位不同,则不溢出,且产生了进位
1 0001 0110H
12.指令JMP WORD PTR [BX]属于( )寻址。
A.段内直接 B.段内间接 C.段间直接 D.段间间接
13指令MOV AX,[BX+SI+8]的源操作数属于( )寻址。
A.直接 B.寄存器相对 C.基址变址 D. 相对基址变址
14.指令( )不改变CF的内容。
A.DEC AL B.ADD AX,CX
C.SUB [BX],CL D.SBB AL,DL
DEC影响A、O、P、S、Z,不影响C标志,ADD、SUB、SBB对6个状态标志位产生影响
15.十进制数字74所对应的压缩型BCD码的形式是74H。
16.十进制数字85所对应的非压缩型BCD码的形式是( 0805H )。
17.设AL=67H,执行“CMP AL,76H”后,AL=( )
CMP的功能是目标操作数减去源操作数,目标操作数不变,依据减法的情况设定6个状态标志位。
18.设AL=65H,BL=29H,执行下列指令后,AL=( 94H )。
ADD AL,BL
DAA//调整指令
19.压栈操作是( )位数的操作。
A.8 B.16 C.32 D.任意
20.执行IMUL指令时,如果乘积的高位部分不是低位部分的符号扩展,则( D )。
A.OF=0、CF=0 B.OF=0、CF=1 C.OF=1、CF=0 D.OF=1、CF=1
出现溢出和进位
21.设AX=3762H,CL=5,执行“SHR AX,CL”后,AX=( B )。
A.0376H B.01BBH C.01BB D.0376
原来为0011011101100010B,移位后为0000 0001 1101 1101 B
22.若要在BUF缓冲区中寻找与AL中不相等的数据,应使用( C )SCASB串操作指令。
A.REPNE B.REP C.REPE D.REPNZ
23.如果“JNC L”指令的操作码放在0040H,转移后在0020H处取下一条指令的操作码,那么该条指令的位移量是( A )。
A.20H B.1EH C.0DEH D.0E0H
有待讨论?
24.如果“JA P”指令的操作码放在0050H, 该指令的位移量为34H,执行完此条指令转 移到取下一条指令的偏移地址为(C)
A.0082H B.0084H C.0086H D.0088H
25.若DS=1000H,BX=2000H,(12000H)=56H,(12001H)=78H,AX=1000H,执行“ADD AX,[BX]”指令后,AX=( )。
7856+1000H=8856H
26.设AX、BX寄存器中存放的是有符号的二进制数据,若执行“CMP AX,BX”指令后,( D )L表示大于则转L。
A.JZ B.JA C.JGE D.JG
JG大于则转移,JGE大于等于则转移,JL小于则转移,JLE小于等于则转移
27.执行“DIV BX”指令后,( C )寄存器中存放商。
A.AL B.AH C.AX D.DX
字除法,商送入AX,余数送入DX中。
28.执行“( A )AX,BX”指令不改变AX寄存器中的内容。
A.CMP B.ADD C.XOR D.OR
29.若AX=1000H,执行“NEG AX”指令后,AX=( C )。
A.1000H B.0E000H C.0F000H D.1001H
AX=0001 0000 0000 0000B NEG求补后 11110000000000000B=0F00H
二、多项选择题
1.在下列寻址方式中,用来访问内存的寻址方式有( )。
A.寄存器寻址 B.寄存器间接寻址 C.寄存器相对寻址 D.直接寻址
存储器操作数寻址也称为内存操作数寻址
2.用来作为寄存器间接寻址的寄存器有( )。
A.AX B.BX C.BP D. CX
还有SI和DI
3.在下列指令中,源操作数使用DS段寄存器进行寄存器相对寻址的有( )。
A.MOV AX,[DI+4] B.MOV AX,ES:[SI+8]
C.MOV AX,[BP+4] D.MOV AX,[BX+4]
SS:BP,DS:BX、SI、DI
4.在下列指令中,源操作数的寻址方式是错误的有( )。
A.MOV AX,[DI+BX] 寄存器间接寻址 B.MOV AX,[SI+DI]
C.MOV AX,[BP+BX] D.MOV AX,[DX]
5.在下列指令中,属于段内转移指令的有( ABD )。
A.JMP SHORT A B.JMP [BX]
C.JMP DWORD PTR [BX] D.JMP NEAR PTR [BX+SI]
转移和调用指令
根据转移功能的不同,可分为无条件转移指令、条件转移指令、子程序调用与返回指令和软件中断与中断返回指令。
根据转移范围的不同,可分为段内转移和段间转移。段内转移在执行时仅修改IP(EIP)的值,CS的值保持不变,段间转移同时修改CS的值和IP(EIP)的值。在转移调用指令中,条件转移指令只能实现段内转移,无条件转移指令、子程序调用与返回指令可以实现段内转移和段间转移,软件中断指令和返回指令只能实现段间转移。
按照指令操作数中转移地址给出方式的不同,可分为直接转移和间接转移。直接转移时转移调用指令的操作数是转移到的目标指令地址,这个目标地址使用目标指令的标号即符号地址方式。如果目标地址已被存放在寄存器或内存单元中并将其作为转移调用指令的操作数时即为间接转移。
1.无条件段内直接转移
JMP 标号/JMP SHORT 标号
2.无条件段内间接转移
JMP 寄存器操作数/JMP 内存操作数
3.无条件段间直接转移
JMP FAR PTR 标号/JMP 标号
4.无条件段间间接转移
JMP 内存操作数
5.条件转移指令
根据状态标志位进行转移
根据两个无符号数的相对大小:JA JNA JC JNC JNBE JBE JB/JNAE JNB/JAE
根据两个符号数的相对大小:JG JGE JL JLE JNLE JNL JNGE JNG
循环控制转移
6.子程序段内直接调用指令
CALL 同一代码段的过程名(子程序名)
7.子程序段内间接调用指令
CALL 同一代码段的寄存器操作数/CALL 同一代码段的内存操作数
8.子程序段间直接调用指令
CALL 不同代码段的过程名(子程序名)
9.子程序段间间接调用指令
CALL 不同代码段的寄存器操作数/CALL 不同代码段的内存操作数
10.子程序段内无参数返回指令
RET 注:子程序和主程序同处于一个代码段
11.子程序段间无参数返回指令
RET 注:子程序和代码段处于不同的代码段
12.子程序段内有参数返回指令
RET N(N为偶数) 子程序和主程序同处于一个代码段,从堆栈的栈顶弹出2个字节到IP,SP=SP+2,CS内容不变,之后堆栈指针再次进行运算SP=SP+N从当前栈顶向堆栈高地址方向再调整N个字节
13.子程序段间有参数返回指令
RET N(N为偶数) 子程序和主程序分别位于不同的代码段,从堆栈的栈顶弹出2个字节到IP,再弹出两个字节到CS,SP=SP+4,CS内容不变,之后堆栈指针再次进行运算SP=SP+N从当前栈顶向堆栈高地址方向再调整N个字节
14.软件中断与中断返回指令
6.在下列指令中,错误的指令有( ABCD)。
A.SUB 5,AL B.ADD AL,BX
C.INC [BX] D.SHR AX,6
C可改作 INC BX。移位指令的操作数需要是寄存器操作数或内存操作数。
7.执行“CMP AX,8003H”指令后,当AX中的无符号数高于8003H时,下列指令中有效的转移指令有( AB )。
A.JNB L B.JA L C.JG L D.JNL L
JA JB JNB无符号,JG JL有符号
8.可与串操作指令“CMPSW”指令配合使用的重复前缀有( BCD)。
A.REP B.REPZ C.REPNZ D.REPE
10.在下列的指令中,错误的指令有( ABCD )。
A.PUSH AL B.MOV AL,BX
C.PUSH 1000H D.CALL AX
11.可以用下列指令代替“LOOP L”指令的有( AC )。
A.DEC CX B.DEC CX
JNZ L JNC L
C.DEC CX D.DEC CX
CMP CX,0 JE L
JE L
三.填空题
1.在一条指令中,立即数只能作 源 操作数。
2.8086/8088 CPU形成的内存物理地址有 20 位。8086主存地址线为20根。
3.指令“MOV AX,[BX+SI]”的源操作数在内存的 DS 段。
4.指令“MOV BX,[BP+DI]”的源操作数在内存的 SS 段。
5.指令“MOV AX,ES:[SI]”的源操作数在内存的 ES 段。
6.入栈指令使用的是 SS 段。
7.指令“ADD [BX+SI],AL”的目的操作数是 基址加变址 寻址方式。
8.指令“SUB BX,A[SI]”的源操作数是 寄存器相对 寻址方式。
9.指令“JMP DWORD PTR [BX]”属于 段间间接 寻址方式。
10.可作为寄存器间接寻址的寄存器有 4 个。
11.堆栈是从 高 地址向 低地址 方向生长的。其操作遵循 LIFO 的操作原则。
12.在进行弹栈操作时应该先将弹出的数据送 目标地址 ,然后 SP+2 。
13.在进行多精度加法运算时,一般使用 ADC 指令。
14.通用的数据传送指令不影响 PSW 。
15.“INC AL” 指令不影响标志位的 CF 位。
16.若AL=11H,执行“NEG AL” 后,AL= 0EFH 。
17.JMP指令的执行 不影响 PSW寄存器中的各位。
18.两个无符号数进行比较时,可以根据 CF 标志位来判断大小。在编写程序时可使用 JA 指令来实现。
19.若执行“DIV BX”,其被除数的高16位必须放在 DX ,低16位必须放在 AX 。
20.DAA指令只对 AL 寄存器中的内容进行调整。
21.若AL=84H,在执行CBW后,AL= 0FF84H 。
22.十进制数1234的压缩型BCD码为 1234H 。
23.执行 AND AL,0FH
JNZ L
指令,是检测AL中的 低4 位,当它为非零则转移。
24.若移位指令的移位位数大于1时,其移位位数必须放在 CL 中。
25.如果AL=85H,CL=4,执行“SAR AL,CL”时,AL= 0F8H ,CF= 0 。
26.在串操作指令中,SI指向 源 串,DI指向 目标 串。
27.如果要查找某串中与AL寄存器中有相同的字符(数),则在SCASB指令前应配合使用 REPNE(REPNZ) 重复前缀。
28.转移指令“JNZ L ”的转移范围(十进制)是 -128~127 。该指令的第二个字节为位移量,用 补码 形式表示。
29.段内调用指令改变 IP 中的内容。
30.段间调用指令改变 IP和CS 中的内容。
四.判断题(判断下列指令是否正确,如果是错误的,请指出错误的原因)
1.ADD AL,BX 错,两操作数类型不一致
2.MOV [BX],SI 对
3.SUB [BX],[SI] 错,两操作数不能同时为内存操作数
4.CMP 5,AL 错,立即数不能做目标操作数
5.MOV CX,AX 对
6.LEA BL,A 错,类型不一致
7.SHR AL,6 错,移位次数大于1时应存放在CL中
8.MOV AL,[DI+SI] 错,DI和SI不能放在一种寻址方式中
9.MOV BL,200H 错,200H超出了一个字的范围,导致两操作数类型不一致
10.MOV AX,DATA 对
11.INC [BX] 错,字节还是字操作存在二义性
12.CMP [BX],A ;A为变量 错,两操作数不可同为内存中的数13.MOV AX,‘+’ 对
14.MOV AX, [BP+BX] 错,BP和BX不可同时使用在寻址方式中
15.ADD AX,[CX] 错,CX不能作为寄存器间接寻址
16.OUT 400,AL 错,400超出8位,类型不一致
17.JNC P 对
18.MOV BX,OFFSET A 对
19.LEA DI,A[SI] 对
20.CMP AX,5 对
五.改错题(按下列指令中的原意改正下列指令)
1.DEC [SI] DEC BTYE PTR [SI]
2.CMP AL,BX ;无符号数比较. MOV AH,0 CMP AX,BX
3.MOV [DX],AL. MOV SI,DX MOV [SI],DX
4.MOV AL,300H. MOV AX,300H
5.MOV [BX],[DI] ;字节操作 MOV AL,[DI] MOV [BX],AL
6.ADD AL,[CX+SI]. ADD AL,CX ADD AL,[SI]
7.ADD AL,BX ;有符号数相加 ADD AX,BX
8.PUSH AL PUSH AX
9.CMP [BX],5 ;字节比较 CMP BYTE PTR [BX],5
10.MOV DS,1234H MOV AX,1234H MOV DS,AX
六.简答题
1.设BX=1000H,SI=2000H,位移量D=3000H,请指出下列各种寻址方式的有效地址是什么?
(1)使用D的直接寻址
3000H
(2)使用BX寄存器的间接寻址
1000H
(3)使用BX寄存器的相对寻址
4000H
(4)基址变址寻址
3000H
(5)相对基址变址寻址
6000H
2.请指出下列各条指令的源操作数的寻址方式是什么?
(1)MOV AX,BUF 直接寻址
(2)CMP AL,5 立即寻址
(3)ADD [BX+5],AX 寄存器寻址
(4)SUB AX,[BX+SI] 基址加变址寻址
(5)ADC AH,A[SI]寄存器相对
(6)MOV BX,[SI]寄存器间接
(7)AND CX,B[BP+SI]相对基址变址
(8)JMP WORD PTR [BX]段内间接寻址
(9)JMP P 段内直接寻址
(10)JMP FAR PTR P 段间直接
3.设 DS=2000H, BX=0100H, SI=0002H, (20100H)=12H, (20101H)=34H,(20102H)= 56H, (20103H)= 78H, (21200H)= 2AH, (21201H)= 4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器中的内容是多少?
(1)MOV AX,1200H
1200H
(2)MOV AX,BX
0100H
(3)MOV AX,[1200H]
4C2AH
(4)MOV AX,[BX]
3412H
(5)MOV AX,[BX+1100H]
4C2AH
(6)MOV AX,[BX+SI]
7856H
(7)MOV AX,[BX+SI+1100H]
65B7H
4.按下列各小题的要求写出相应的一条汇编语言指令。
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中
ADD DX,BX
(2)以BX和SI寄存器作基址变址寻址方式,把该单元中的一个字传送到AX。
MOV AX,[BX+SI]
(3)以SI和位移量20H作寄存器相对寻址,将该单元中的内容与CX寄存器中的内
容相加,结果存入CX寄存器中。
ADD CX,[SI+20H]
(4)清除AX寄存器的内容,同时清除CF标志位
XOR AX,AX
(5)将字单元NUM与0B6H进行比较
CMP WORD PTR NUM,0B6H
5.按下列各小题的要求使用相应的几条指令完成其操作。
(1)将偏移量为200H的存储单元中的数与300H相加,结果存入AX寄存器中
MOV AX,[200H]
ADD AX,300H
(2)比较AX寄存器中与BX寄存器中的16位有符号数,当AX中的内容大于BX中的内容时转移到L。
CMP AX,BX
JG L
(3)将BUF1和BUF2中的16位数据交换
MOV AX,BUF1
XCHG AX,BUF2
MOV BUF1,AX
(4)测试BUF字缓冲区中第15位,如果为1则转移到P
TEST WORD PTR BUF,8000H
JNZ P
(5)将BUFI和BUF2的字相加,结果送S缓冲区
MOV AX,BUF1
ADD AX,BUF2
MOV S,AX
6.设BX=8234H,请说明下列两条指令的区别,执行下列各指令后BX中的内容是什么?
SHR BX,1
SAR BX,1
SHR是逻辑右移指令,移位后空出的位补0,而SAR是算术右移指令,最高位保持不变,其他位右移一位。SHR BX,1执行后BX=411AH,执行SAR BX,1后 BX=0C11AH。
7.分别说明下列每组指令中的两条指令的区别。
(1) MOV BX,BUF LEA BX,BUF
MOV BX,BUF中的BUF是直接寻址,它是将BUF单元中的内容传送给BX。而LEA BX,BUF是将BUF的偏移地址送BX。
(2) OR BL,0FH AND BL,0FH
OR是或指令,AND是与指令
(3) JMP SHORT L JMP L
第一句是短位移,8位,第二句是16位
(4) MOV AX,BX MOV AX,[BX]
MOV AX,BX的源操作数是BX中的内容,即寄存器寻址。而MOV AX,[BX]中的源操作数是BX所指向的内存单元中的内容,即寄存器间接寻址。
(5) MOV AX,[BX+DI] MOV AX,[BP+DI]
MOV AX,[BX+DI]使用的是DS段,而MOV AX,[BP+DI]使用的是SS段。
8.说明下列各指令的源操作数和目的操作数的存储地方。
(1)MOV [2000H],AX
源操作数在AX寄存器中,结果存放在内存的2000H单元。
(2)ADD AX,[BX+5]
源操作数在内存,结果存放在AX中。
(3)LEA SI,BUF
源操作数在指令中,即BUF的偏移地址,结果存放在SI中。
(4)DAA
源操作数和结果都在AL中。
(5)MUL BL
源操作数在BL中,结果存放在AX中。
9.指出下列无条件转移指令的转移目标地址是什么?存放在何处?
(1)JMP BX
BX中的内容做目标地址的偏移地址。
(2)JMP WORD PTR [BX]
BX所指字单元中的内容作目标地址的偏移地址。
(3)JMP DWORD PTR [BX]
BX所指字单元中的内容作目标地址的偏移地址,下一字单元中的内容作段地址。
(4)JMP P
P的地址
(5)JMP SHORT R
R的地址
10.说明MOVSB和CMPSB各能使用哪些重复前缀?
MOVSB只能使用REP重复前缀,CMPSB能使用REPZ,REPNE,REPE和REPNZ重复前缀。
七.程序分析题
1.现有程序段如下:
MOV AX,1234H
MOV BX,60H
ADD AX,BX
请回答:(1)该程序段完成的功能是什么?
两数1234H和60H相加,结果存放在AX中。
(2)程序段执行完后AX= 1294H 。
2.现有程序段如下:
MOV AX,0603H
MOV BL,8
AAD
DIV BL
请回答:(1)该程序段完成的功能是什么?
实现两个未压缩BCD码的除法
(2)程序段执行完后AX= 0707H 。
3.设AX=0D023H,BX=9FD0H,试分析执行完如下程序段后程序转向何处?
ADD AX,BX
JNO L1
JNC L2
SUB AX,BX
JNC L3
JNO L4
JMP L5
1101 0000 0010 0011
+1001 1111 1101 0000
———————————————
10110 1111 1111 0011
溢出,O为1,最高位进位C为1,
1101 0000 0010 0011
-1001 1111 1101 0000
———————————————
0011 0000 0101 0011
溢出O为1,最高位借位C为1
则最后无条件转移L5
4.程序段如下:
MOV AX,X
MOV DX,X+2
ADD AX,Y
ADC DX,Y+2
ADD AX,36
ADC DX,0
SUB AX,Z
SBB DX,Z+2
MOV W,AX
MOV W+2,DX
请回答:(1)该程序段完成的功能是什么?
算X+Y+36-Z
(2)该程序的操作数是何类型?字
(3)结果存放在何处?W
5.设A为字节变量,变量中的内容分别为64H、52H;B为字节变量,变量中的内容分别为12H、46H,现有程序段如下:
MOV AL,A
SUB AL,B
DAS
MOV C,AL
MOV AL,A+1
SBB AL,B+1
DAS
MOV C+1,AL
请回答:(1)该程序段完成的功能是什么?
实现两个压缩型BCD码的减法,即A-B,结果送C。
2)最后结果是什么?
0652H
6.现有程序段如下:
MOV BL,AL
MOV CL,4
SHR BL,CL
MOV A,BL
AND AL,0FH
MOV B,AL
请回答:(1)该程序段完成的功能是什么?
将AL中的八位数分高低4位分别存放在A和B中
(2)如果AL的初值为56H,则A= 05H,B= 06H 。
7.现有程序段如下:
MOV AL,8
MOV BL,7
MUL BL
AAM
ADD AX,3030H
XCHG AH,AL
MOV BUF,AX
请回答:(1)该程序段完成的功能是什么?
将两数相乘的结果转换成ASCII码存放在BUF中。
(2)BUF两个单元中的值分别为 35H,36H 。
8.现有程序段如下:
MOV AX,M
MOV DX,N
SHR DX,1
RCR AX,1
请回答:(1)该程序段完成的功能是什么?
将M:N中的32位右移一位。
(2)若M=1234H,N=5678H,程序运行后DX= 091AH ,AX= 2B3CH 。
9.现有程序段如下:
XOR AX,AX
MOV AX,6342H
MOV CX,0404H
ROL AH,CL
XCHG CH,CL
ROR AL,CL
请回答:(1)该程序段执行后AX= 3624H 。
(2)CF= 0 。
10.现有程序段如下:
MOV AX,1
MOV BX,2
MOV CX,4
MOV DX,3
L: INC AX
ADD BX,AX
SHR DX,1
LOOPNZ L
请回答:(1)该程序段的循环次数是多少? 2
(2)该程序段执行完后AX= 3 ,BX= 7 ,CX= 4 ,DX= 0 。
11.现有程序段如下:
MOV CX,16
MOV BX,0
MOV DX,1
L: MOV AX,9AB8H
AND AX,DX
JZ N
INC BX
N: SHL DX,1
LOOP L
MOV M,BX
请回答:(1)该程序段完成的功能是什么?
统计9AB8H中为1的位数
(2)该程序段执行完后(M)= 8 。
12.现有程序段如下:
CLD
MOV SI,OFFSET BUF1
MOV DI,OFFSET BUF2
MOV CX,100
REP MOVSB
请回答:该程序段完成的功能是什么?将BUF1中100个字节的数据传送到BUF2中。
13. 现有程序段如下:
CLD
LEA DI,BUF
MOV AL,20H
MOV CX,100
REPNZ SCASB
请回答 :(1)该程序段完成的功能是什么?查找BUF中为空格(20H)字符。
(2)若ZF=1,表示BUF中 有 值为20H数据
(3)若BUF的首地址为0,ZF=0,执行完该程序段后DI= 100H 。
14.现有程序段如下:
MOV AL,0
MOV BL,1
MOV CX,10
L: ADD AL,BL
INC BL
LOOP L
请回答:(1)该程序段完成的功能是什么?
实现1+2+3+……+10
(2)该程序执行完后,AL= 37H 。
15.现有程序段如下:
MOV AX,M
CMP AX,N
JA L
MOV AX,M+2
CMP AX,N+2
JAZ L
MOV FLG,BYTE PTR 0
JMP P
L: MOV FLG BYTE PTR 1
P: …
请回答:(1)该程序段完成的功能是什么?
两个32位的无符号数M和N比较,大小等于则1→FLG,否则0→FLG。
(2)若M=1234H,N=5678H,则FLG= 0 。
16.现有程序段如下:
MOV CX,100
LEA BX,BUF
MOV DX,0
L1:MOV AL,<, /FONT>[BX]
CMP AL,10
JL L2
INC DX
L2:INC BX
LOOP L1
请回答:(1)该程序段完成的功能是什么?
统计有符号数BUF缓冲区中大于等于10的字节个数,其个数放DX。
(2)如果将JL改为JG,该程序段完成的功能又是什么?
统计有符号数BUF缓冲区中小于等于10的字节个数,其个数放DX。
17.设TAB中存放的数据为30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,现有程序段如下:
LEA BX,TAB
MOV AL,X ;X为数字0~9
XLAT
请回答:(1)该程序段完成的功能是什么?
将X的数字转换成ASCII码。
(2)若X中的内容为4,则AL= 34H 。
18.现有程序段如下:
LEA SI,BUF1
LEA DI,BUF2
MOV CX,100
L: MOV AL,[SI+100]
MOV [DI],AL
INC DI
DEC SI
LOOP L
请回答:该程序段完成的功能是什么?
将BUF1中100个字节倒序传送到BUF2中。
19.现有程序段如下:
MOV AX,BUF
CMP AX,0
JNS L
MOV BX,BUF+2
NEG BX
MOV BUF+2,BX
NOT AX
ADC AX,0
MOV BUF,AX
L: …
请回答:该程序段完成的功能是什么?
将BUF缓冲区中的32位数据取绝对值存放在BUF中。
20.现有程序段如下:
MOV AL,X
AND AL,0FH
JZ L
MOV BYTE PTR FLG,1
JMP M
L: MOV BYTE PTR FLG,0
M: …
请回答:该程序段完成的功能是什么?
检测X中的低4位是否全为0,是则1→FLG,否则0→FLG。
八.程序设计题
1.使用串操作指令,将BUF缓冲区中的100个字节清0。
MOV CX,100
MOV AL,0
LEA DI,BUF
REP STOSB
2.比较5个字节的字符串A和B,若两个串相等则字节标志单元FLG置0;否则清1。
MOV CX,5
LEA DI,A
LEA SI,B
REPE CMPSB
JZ L
MOV BYTE PTR FLG,1
JMP M
L:MOV BYTE PTR FLG,0
M:…
3.设BUF缓冲区中有100个字数据。编写程序段统计100个字数据中数据为0的个数,
并将统计的结果存放在DL寄存器中。
MOV CX, 100
MOV DL, 0
LEA BX, BUF
L:MOV AL, [BX]
CMP AL, 0
JNZ M
INC DL
M:INC BX
LOOP L
4.计算Z=(X+5)*Y+30,(X,Y为无符号字节数据)。
MOV AL, X
ADD AL, 5
MUL Y
ADD AL, 30
ADD AH, 0
MOV Z, AX
5.将DX:AX:BX中的48位数乘以2。
SAL BX, 1
RCL AX, 1
RCL DX, 1
6.将有100个字符的缓冲区BUF中的$符号用空格(20H)代替。
MOV CX, 100
LEA BX, BUF
L:MOV AL, [BX]
CMP AL, ‘$’
JNZ M
MOV AL, 20H
MOV [BX], AL
M:INC BX
LOOP L
7.将有符号的字数据A和B中的大者存入C中。
MOV AX, A
CMP AX, B
JA L
MOV AX, B
L:MOV C, AX
8.测字单元A中的第四位是否为0,是则FLG置1,否则清0。
MOV AX, A
AND AX, 10H
JZ L
MOV AL,0
JMP M
L:MOV AL, 1
M:MOV FLG, AL
9.将DX:AX中的32位数据逻辑左移2位。
SHL AX, 1
RCL DX, 1
SHL AX, 1
RCL DX, 1
10.将100个元素的字数组A中的每个元素减1。
MOV CX, 100
LEA BX, A
L:INC WORD PTR [BX]
ADD BX, 2
LOOP L