微机原理及汇编语言课后习题解答 下载本文

(5) JNZ VAR1

解:(1) ADD VAR1,VAR2

错误,两个操作数不能都为存储单元,可改为 MOV BX,VAR2 ADD VAR1,BX

(2) MOV AL,VAR2

错误,数据类型不匹配,可改为MOV AX,VAR2 (3) SUB AL,VAR1

错误,数据类型不匹配,可改为SUB AX,VAR1 (4) JMP LAB[SI]

错误,寄存器相对寻址形式中不能用标号做位移量,可改为JMP VAR1[SI] (5) JNZ VAR1

错误,条件跳转指令只能进行段内短跳转,所以后面只能跟短标号。可改为JNZ LAB (6) JMP NEAR LAB

错误,缺少运算符PTR,可改为JMP NEAR PTR LAB

注:本题错误改正部分有的答案并不唯一,可参考原题题意改成合法形式。

9. 已知 (AL)=6CH, (BL)=0A9H,试问执行指令ADD AL,BL后,AF、CF、OF、PF、SF、和

ZF的值各为多少?

解:指令ADD AL,BL的功能为AL+BL→AL,其运算过程如下:

6CHA9H 115H

由以上运算可知,

低4位向高4位有进位,所以AF=1; 最高位产生了进位,所以CF=1;

该运算是一个正数加一个负数,所以不会产生溢出,所以OF=0;只有正数+正数=负数,或者负数+负数=正数时,才可能产生溢出现象;

该运算结果的低8位为0001 0101,含有奇数个1,所以PF=0; 该运算结果的最高位为符号位,为0,所以SF=0; 当前的运算结果不为零,所以ZF=0。 10.试判断下列程序执行后,(BX)=的内容。

MOV CL,5 MOV BX,01C9H ROL BX,1 RCR BX,CL

解:该程序段是首先将BX内容不带进位循环左移1位,再循环右移5位。即相当于将原BX内容不带进位循环右移4位

第 9 页 共 27 页

01C9H=0000 0001 1100 1001B

程序执行后,为1001 0000 0001 1100B 故结果为901CH

11.写出能够完成下列操作的8086CPU指令。 (1) 把4629H传送给AX寄存器; (2) 从AX寄存器中减去3218H; (3) 把BUF的偏移地址送入BX中。

12.根据以下要求写出相应的汇编语言指令。

(1) 把BX和DX寄存器的内容相加,结果存入DX寄存器中;

(2) 用BX和SI的基址变址寻址方式,把存储器中的一个字节与AL内容相加,并保存在AL寄存器中;

(3) 用寄存器BX和位移量21B5H的变址寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器单元中;

(4) 用位移量2158H的直接寻址方式把存储器中的一个字与数3160H相加,并把结果送回该存储器中;

(5) 把数25H与(AL)相加,结果送回寄存器AL中。 13.按下列要求写出相应的指令或程序段。 (1)使BL寄存器中的高、低四位互换; (2)屏蔽AX寄存器中的b10和b5位;

(3)分别测试AX寄存器中b13和b2位是否为1。

14.执行以下两条指令后,标志寄存器FLAGS的六个状态为各为何值?

MOV AX,95C8H ADD AX,8379H

解:指令的功能为95C8H+8739H→AL,其运算过程如下:

95C8H

8379H

11941H 由以上运算可知,

低4位向高4位有进位,所以AF=1; 最高位产生了进位,所以CF=1;

该运算是两个负数相加结果为正数,产生溢出,所以OF=1; 该运算结果的低8位为0100 0001,含有偶数个1,所以PF=1; 该运算结果的最高位为符号位,为0,所以SF=0; 当前的运算结果不为零,所以ZF=0。

第 10 页 共 27 页

15.若(AL)=85H,(BL)=11H,在分别执行指令MUL和IMUL后,其结果是多少?

第4章 汇编语言程序设计

1. 请分别用DB、DW、DD伪指令写出在DATA开始的连续8个单元中依次存放数据11H、

22H、33H、44H、55H、66H、77H、88H的数据定义语句。 解:定义如下:

DATA DB 11H,22H,33H,44H,55H,66H,77H,88H DW 2211H,4433H,6655H,8877H DD 44332211H,88776655H

2. 若程序的数据段定义如下,写出各指令语句独立执行后的结果:

DSEG SEGMENT

DATA1 DB 10H,20H,30H DATA2 DW 10 DUP(?) STRING DB ‘123’ DSEG ENDS

(1) MOV AL,DATA1

(2) MOV BX,OFFSET DATA2 (3) LEA SI,STRING ADDBX,SI 解:(1)取变量DATA1的值. 指令执行后,(AL)=10H. (2)取变量DATA2的偏移地址. 指令执行后,(BX)=0002H.

(3)先取变量STRING的偏移地址送寄存器SI,之后送SI的内容与DI的内容相加并将结果送DI.指令执行后,(SI)=0016H;(DI)=(DI)+0018H

3. 试编写求两个无符号双字长数之和的程序。两数分别在MEM1和MEM2单元中,和放

在SUM单元。 解:程序编写如下: DATA SEGMENT

MEM1 DW 6655H,8877H MEM2 DW 8877H,6655H

SUM DW 2 DUP(?) ;55667788H+77885566H=0CCEECCEEH DATA ENDS CODE SEGMENT

第 11 页 共 27 页

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,MEM1+2 ADD AX,MEM2+2 MOV SUM+2,AX MOV AX,MEM1 ADC AX,MEM2 MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS

END START

4. 试编写程序,测试AL寄存器的第4位是否为0?

解:程序编写如下: CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: TEST AL,08H JZ L1

L1:

MOV AH,4CH

INT 21H CODE ENDS

END START

5. 编写程序,将BUFFER中的一个8位二进制数转换为ASCII码,并按位数高低顺序存

放在ANSWER开始的内存单元中。

解:程序编写如下: DATA SEGMENT

BUFFER DB 4AH

ANSWER DB 2 DUP(?) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

第 12 页 共 27 页