(5)MOV IP, 0FFH 错误,IP不能作目的操作数或不能用立即数直接给IP寄存器赋值。
(6)MOV [BX+SI+3], IP 错误,IP不能作源操作数。
(7) MOV AX, [BX][BP] 错误,基址变址寻址方式必须是一个基址寄存器与一个变址寄存器,
不能两个同时为基址寄存器(BX、BP均为基址寄存器)。
(8)MOV AL, ES:[BP] 正确。
(9)MOV DL, [SI][DI] 错误,基址变址寻址方式必须是一个基址寄存器与一个变址寄存器,
不能两个同时为变址寄存器(SI、DI均为变址寄存器)。
(10)MOV AX, OFFSET 0A20H 错误,OFFSET后必须是存储单元标号地址,不能是立即数。
(11) MOV AL, OFFSET TABLE 错误,操作数类型不匹配,AL为8位, TABLE为16位。
(12)XCHG AL, 50H 错误,交换指令XCHG的操作数不能是立即数。
(13)IN BL, 05H 错误,IN指令的目的操作数必须是累加器
(14)OUT AL, 0FFEH 错误,OUT指令的源操作数必须是累加器,目的操作数为8位I/O端
口地址或用DX做桥梁的16位I/O端口地址。
10. 已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每条指令执行后的结果是什么?标志位CF等于什么?
(1)AND AH,CL (AH)=04H CF=0(2)OR BL,30H (BL)=36H CF=0
(3)NOT AX (AX)=0DAF7H CF不变(不影响CF)(4)XOR CX,0FFF0H (CX)=0FFF4H CF=0(5)TEST DH,0FH (DH)=18H CF=0(6)CMP CX,00H (CX)=0004H CF=0(7)SHR DX,CL (DX)=0186H CF=0(8)SAR AL,1 (AL)=04H CF=0(9)SHL BH,CL (BH)=0F0H CF=0
(10)SAL AX,1 (AX)=4A10H CF=0
(11)RCL BX,1 CF=1,(BX)=1E6DH, CF=0,(BX)=1E6CH CF=0
(12)ROR DX,CL (DX)=4186H CF=011. 假设数据定义如下:
DATA SEGMENT DATA ENDS
STRING DB ‘The Personal Computer & TV’
试用字符串操作指令编程完成以下功能:解:程序段如下:
(1)把该字符串传送到附加段中偏移地址为GET_CHAR开始的内存单元中。
LEA SI,STRING ;置源串偏移地址
5
LEA DI,GET_CHAR ;置目的串偏移地址 MOV CX,26 ;置串长度 CLD ;方向标志复位 REP MOVSB ;字符串传送统计DX寄存器中1的个数是多少。
12.编程将AX寄存器中的内容以相反的次序传送到DX寄存器中,并要求AX中的内容不被破坏,然后
解:将AX的内容用ROR循环右移,16次之后AX的内容不变(如果用算术/逻辑右移SHL/SAL,则AX的内容破坏,需要用堆栈PUSHU AX/POP AX保护),其最低位移入CF中,再使用RCL循环左移将CF中的值移入DX中。并且,如果CF的值为1,则将BL加1。
MOV CX, 16
LP1: ROR AX, 1
JNC LP2INC BL
XOR BL, BL
LP2: RCL DX,1
HLT
调试程序:
LOOP LP1
STACK SEGMENT STACK
DB 100 DUP(?)STACK ENDS
DATA SEGMENT BUF DW 12DATA ENDS
BUF1 DW 100 DUP (?) CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DS
MOV AX,DATA
MOV DS,AX MOV CX, 16 XOR BL, BLLP1: ROR AX, 1 JNC LP2 INC BL MOV AX,1234H
LP2: RCL DX,1 HLT
LOOP LP1CODE ENDS
END START
15. 某班有七个同学的英语成绩低于80分,分数存在ARRAY数组中,试编程完成以下工作:给每人加5
6
分,结果存到NEW数组中.解:
STACK SEGMENT STACK
DB 100 DUP(?)STACK ENDS
DATA SEGMENT
ARRAY DB 7 DUP(?)DATA ENDS
NEW DB 7 DUP(?)CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV CX, 7 MOV BX, 0
LP1: MOV AL, ARRAY[BX] ADD AL, 05H DAA
MOV NEW[BXI], AL INC BX HLTCODE ENDS
调试程序:
LOOP LP1
END START
STACK SEGMENT STACK
DB 100 DUP(?)STACK ENDS
DATA SEGMENT
ARRAY DB 65H,76H,78H,54H,90H,85H,68H NEW DB 7 DUP(?) BUF1 DW 100 DUP (?) DATA ENDSCODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DS
MOV AX,DATA
MOV DS,AX MOV CX, 7 MOV BX, 0
LP1: MOV AL, ARRAY[BX] ADD AL, 05H DAA
MOV NEW[BXI], AL INC BX LOOP LP1
7
HLT
CODE ENDS
END START
某班有七个同学的英语成绩低于80分,分数存在ARRAY数组中,试编程完成以下工作:
(1)给每人加5分,结果存到NEW数组中(2)把总分存到SUM单元中
(3)把平均分存到AVERAGE单元中
解:
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT
ARRAY DB 7 DUP(?)
NEW DB 7 DUP(?)
SUM DW 0
AVG DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV CX, 7 MOV SI, 0
MOV SUM, 0
MOV AH, 0
LP1: MOV AL, ARRAY[SI] ADD AL, 05H DAA
MOV NEW[SI], AL ADD AL ,SUM DAA
MOV SUM,AL ADC AH, 0
DAA
MOV SUM+1, AH INC SI
LOOP LP1
MOV AX, SUM MOV BL,07H DIV BL
MOV AVG, AL
HLT
CODE ENDS
8
相关推荐: