1.指出下列各指令中源操作数和目的操作数的寻址方式。
①MOV DI,100
②MOV CX,100[SI]
③MOV[SI],AX
④ADD AX,[BX+DI]
⑤AND AX,BX
⑥MOV DX,[1000]
⑦MOV BX,[BP+DI+100]
⑧PUSHF
⑨SUB[1050],CX
⑩AND DH,[BP+4]
解源操作数为 目的操作数为
①立即寻址 寄存器寻址
②变址寻址 寄存器寻址
③寄存器寻址 寄存器间接寻址
④基址加变址寻址 寄存器寻址
⑤寄存器寻址 寄存器寻址
⑥直接寻址 寄存器寻址
⑦基址加变址寻址 寄存器寻址
⑧寄存器寻址 寄存器间接寻址
⑨寄存器寻址 直接寻址
⑩变址寻址 寄存器寻址
2.试述指令“MOV AX,2000H”和“MOV AX,DS:[2000H]”的区别?
解
区别有3条:
①“MOV AX,2000H”对源操作数是立即寻址,而“MOV AX,DS:[2000H]”对源操作数是直接寻址;
②前者的功能是把立即数2000H送入AX中,而后者的功能是把内存2000H单元与2001H单元的内容取出并送入AX中;
③两者的机器代码不同,执行速度也不同,前者执行时间短,后者执行时间长。
3.AX中有一个负数,欲求其绝对值,若该数为补码,则用什么指令?若该数为原码,又用什么指令?
解
若该数为补码,先减1再取反:
若该数为原码,直接将该数的最高位清零:
4.若DS=4000H,BX=0800H,[40800H]=05A0H,[40802H]=2000H,求执行指令“LDS SI,[BX]”后,DS与SI中的内容。若上文中的DS换成ES,其他条件不变,求执行指令“LES DI,[BX]”后,ES与DI中的内容。
解
SI=05A0H,DS=2000H。
DI=05A0H,ES=2000H。
5.若AX=98ABH,BX=A8BCH,求执行指令“ADD AX,BX”后,AX与BX中的内容,并指出SF、ZF、AF、PF、CF和OF的状态。
解
AX=4167H,BX=A8BCH,SFZFAFPFCFOF=001011B。
6.若CX=6700H,DX=78FFH,CF=1,求分别执行指令
①ADD CX,DX
②ADC CX,DX
③SUB CX,DX
④SBB CX,DX
⑤AND CX,DX
⑥OR CX,DX
⑦XOR CX,DX
后,CX与DX寄存器中的内容,并指出标志寄存器SF、ZF、AF、PF、CF及OF的状态。
解
①CX=DFFFH,DX=78FFH,SFZFAFPFCFOF=100101B。
②CX=E000H,DX=78FFH,SFZFAFPFCFOF=101101B。
③CX=EE01H,DX=78FFH,SFZFAFPFCFOF=101010B。
④CX=EE00H,DX=78FFH,SFZFAFPFCFOF=101110B。
⑤CX=6000H,DX=78FFH,SFZFAFPFCFOF=00×100B。
⑥CX=7FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B。
⑦CX=1FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B。
7.若AX=FFFEH,BX=FFFDH,求执行指令“IMUL BX”后,DX与AX中的内容,并指出标志位OF与CF的状态。
解
AX=0006H,DX=0000H,OFCF=00B。
8.若AL=75H,BL=48H:
①求执行指令
之后AL=?标志位AF=?CF=?并说明BCD码调整情况。
②执行指令“SUB AL,BL”与DAS后,情况又如何?
解
①AL=23H,AFCF=11B。
②AL=27H,AFCF=10B。
9.设X、Y、R、S、Z均为16位无符号数的变量。按已给定的表达式Z(X+Y)/(R-S)→Z,有程序如下,试在空格处填入适当的指令(注:在加减过程中均无进位和借位)。
MOV AX,X
①
MOV CX,R
SUB CX,S
②
③
MOV Z,AX
MOV Z+1,DX
HLT
解
①ADD AX,Y。
②MUL Z。
③DIV CX。
10.若有一个4字节数,放在寄存器DX与AX中(DX中放高16位),要求这个4字节数整个左移一位如何实现?右移一位又如何实现?
解
①DX与AX左移一位:
②DX与AX右移一位:
11.把1 KB的数据块从偏移地址以1000H开始的单元传送到偏移地址以1400H开始的缓冲区。试用串操作指令和一般传送指令两种方法各编一程序实现。
解
①利用串操作指令编程如下:(www.daowen.com)
②利用一般传送指令编程如下:
12.若在内存缓冲区中有一个长度为256字节的数据块,起始地址偏移量为2000H。数据块中的数据有正有负,要求把其中的正负数分开,分别送至同段的两个缓冲区,存放正数的缓冲区的起始地址偏移量为2100H,存放负数的缓冲区的起始地址偏移量为2200H。试编一程序。
解
13.若SS=1000H,SP=1000H,AX=1234H,BX=5678H,Flag=2103H,试说明执行指令
之后,SP=?SS=?CX=?并指出栈中各单元的内容。
解
SS=1000H,SP=0FFCH,CX=2103H。
栈中各单元内容如下:
地址 RAM
0FFAH 03
0FFBH 21
0FFCH 34
0FFDH 12
0FFEH 78
0FFFH 56
1000H XX
14.若DS=1100H,SI=1000H,CS=1200H,IP=100H,[12000H]=2000H,[12002]=1500H,求:
①执行指令“CALL FAR[SI]”后CS与IP的内容;
②执行指令“CALL[SI]”后CS与IP的内容。
解
①CS=1500H,IP=2000H。
②CS=1200H,IP=2000H。
15.执行指令“INT 21H”后,将转到何处执行程序?指出CS与IP的内容。
解
将转到0:0086H和0:0084H处取出双字作为CS与IP的值,再执行程序。CS的值为内存单元0:0086H和0:0087H的内容;IP的内容为内存单元0:0084H与0:0085H的内容。
16.编一程序使:
①AX寄存器低4位清零;
②BX寄存器低4位置1;
③CX寄存器低4位变反;
④DX寄存器高3位不变,其余位清零。
解
①AND AX,FFF0H。
②OR BX,000FH。
③XOR CX,000FH。
④AND DX,E000H。
17.下面的程序段在什么情况下执行结果是AL=0?
解
如果端口5FH读出的数据最高位(D7)为1,则AL=0,否则AL=FHH。
18.指出下列8086指令中哪些是错误的,错在何处?
①MOV DL,BX
②MOV DS,2000H
③MOV[DI],[SI]
④MOV AX,[BX][BP]
⑤XCHG CX,[2400H]
⑥PUSH DH
⑦IN AH,DX
⑧OUT 01F0H,AX
解
①错。数据类型不匹配。
②错。立即数不能直接送往段寄存器。
③错。两个内存单元不能直接传送数据。
④错。BX和BP都可作为基址寄存器,缺少变址寄存器。没有基址加基址寻址方式。
⑤对。
⑥错。堆栈操作必须是16位数据,DH是8位寄存器。
⑦错。输入(IN)指令从端口读出的数据需送给累加器AL或AX,送给AH不行。
⑧错。端口地址为16位时,必须用DX间接寻址。
19.连续执行以下指令,填写执行指令的结果(MEM为存储器物理地址)。
解
①CX=2180 H,CF=1B。
②[SI]=80H,[SI+1]=21H。
③[SI]=01 H,MEM=32700 H。
④[SI]=00H,ZFCFPF=111B。
⑤AX=000FH,CFAF=00B。
⑥AX=0105H,CFAF=11B。
⑦AL=5EH,CFAF=00B。
⑧AL=64H。
⑨BX=0008 H。
⑩AX=0018H。
⑪AX=FF18 H。
⑫AX=FFE3H,DX=0000H。
*20.80286中的PUSH指令与8088/8086中的PUSH指令有何不同?PUSHA和POPA指令分别实现什么功能?
解
在8088/8086指令系统中PUSH指令的源操作数只能是寄存器、段寄存器和存储器,而在80286中该指令的源操作数可以是一个8位或16位的立即数,而且此立即数既可以是符号数,也可以是无符号数。
PUSHA、POPA指令将所有通用寄存器的内容压入或弹出堆栈,压入的顺序是AX、CX、DX、BX、SP、BP、SI和DI(SP是执行该指令之前的值),弹出的顺序与压入的顺序相反。
*21.80386/80486中新增的位操作类指令有哪些?分别实现什么功能?
解
80386/80486中新增的位操作类指令如下。
(1)测试与置位指令
BT是位测试指令,检查目的操作数OPRD1中由OPRD2指定的位,并将该位复制到CF中;BTC在完成BT指令功能后,再将测试位取反;BTS和BTR在完成BT功能后,再将测试位置1或置0。
(2)位扫描指令
BSF指令用于对16位或32位操作数OPRD2从低位到高位(b0到b15或b31)进行扫描,并将扫描到的第一个1的位号送入OPRD1指定的目标寄存器中。如果OPRD2所有位均为0,则将ZF标志位置1,OPRD1中的结果无定义;否则(OPRD2≠0)将ZF清零,OPRD1中为位号。BSR指令的功能同BSF,只是从高位到低位进行反向扫描。
*22.编写实现下列功能的程序段。
①EDX:EAX中的64位数据左移一位。
②比较EAX、EBX、ECX中无符号数的大小,并将最小的数存入EAX中。
解
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。