XOR AX, 01C0H (XOR AX, 0000 0001 1100 0000 B)
3.19 试写出执行下列指令序列后AX寄存器的内容。执行 前(AX)=1234H。 MOV CL,7 SHL BX,CL
【解】:(AX) = 1234H = 0001 0010 0011 0100 B
执行后:(AX) = 0 0011 0100 0000 000 B = 0001 1010 0000 0000 B = 1A00H 4.1 假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么? ⑴ MOV BP,AL
⑵ MOV WORD_OP[BX+4*3][DI],SP
⑷ MOV AX,WORD_OP1[DX]
⑶ MOV WORD_OP1,WORD_OP2 ⑸ MOV SAVE WORD,DS ⑺ MOV [BX][SI],2
⑹ MOV SP,SS:DATA_WORD[BX][SI] ⑻ MOV AX,WORD_OP1+WORD_OP2
⑼ MOV AX,WORD_OP1-WORD_OP2+100 ⑽ MOV WORD_OP1,WORD_OP1-WORD_OP2 【解】:⑴ MOV BP,AL 两个操作数不匹配 ⑵ MOV WORD_OP[BX+4*3][DI],SP ⑶ MOV WORD_OP1,WORD_OP2 ⑷ MOV AX,WORD_OP1[DX] ⑸ MOV SAVE WORD,DS
两个内存单元之间不能直接传送数据
⑹ MOV SP,SS:DATA_WORD[BX][SI] 当基址为BX时,选取DS寄存器 ⑺ MOV [BX][SI],2
⑻ MOV AX,WORD_OP1+WORD_OP2 ⑼ MOV AX,WORD_OP1-WORD_OP2+100 ⑽ MOV WORD_OP1,WORD_OP1-WORD_OP2
4.2 假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:
⑴ ADD VAR1,VAR2 ⑶ JMP LAB[SI] ⑸ JMP NEAR LAB
⑵ SUB AL,VAR1
⑷ JNZ VAR1
【解】:⑴ ADD VAR1,VAR2
ADD两个操作数不能同时为存储单元, MOV AX, VAR1
ADD AX, VAR2 ⑵ SUB AL,VAR1 两个操作数不匹配 SUB AX, VAR1 ⑶ JMP LAB[SI] LAB与[SI]不能相加 JMP WORD PTR [SI] ⑷ JNZ VAR1
JNZ后面应是标号,不应是变量 JNZ LAB ⑸ JMP NEAR LAB 缺少PTR运算符 JMP NEAR PTR LAB
4.3 画图说明下列语句所分配的存储空间及初始化的数据值。
⑴ BYTE_VAR DB ’BYTE’,12,-12H,3 DUP(0,?,2 DUP(1,2),?) ⑵ WORD_VAR DW 5 DUP(0,1,2),?,-5,,'BY','TE',256H 【解】:(1) (2) 41H B WORD_VAR BYTE_VAR
59H Y 00H 00H 01H 00H 02H 00H … 00H 0 54H T 45H E 0CH 12 F4H -12H 00H 0 - 01H 1 02H 2 01H 1 2 02H 00H 0 - 01H 1 02H 2 01H 1 02H 2 00H 0 - 01H 1 02H 2 01H 1
02H 2 4.4 假设程序中的数据定义如下: PARTNO DW ?
PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $-PARTNO
问PLENTH的值为多少?它表示什么意义? 【解】:PLENTH的值为22,它表示数据的个数。4.5 有符号定义语句如下:
BUFF DB 1,2,3,’123’
1 2 30个字节 0 1 2 2 FBH FFH -5 41H 00H B 59H 00H Y 54H 00H T 45H 256H 00H E 56H 02H EBUFF DB 0
L EQU EBUFF-BUFF 问L的值是多少?
【解】:PLENTH的值为6。 4.6 假设程序中的数据定义如下: LNAME DB 30 DUP(?) ADDRESS DB 30 DUP(?) CITY DB 15 DUP(?) CODE-LIST DB 1,7,8,3,2
⑴ 用一条MOV指令将LNAME的偏移地址放入AX。
⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。
⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。 【解】: ⑴ 用一条MOV指令将LNAME的偏移地址放入AX。
MOV AX, OFFSET LANME
⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。
MOV SI, WORD PTR CODE_LSIT
⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。 CODE_LENGHT EQU CITY-CODE_LIST
4.7 试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。 【解】:参考程序如下: DATA_SEG SEGMENT DB1 DB 5