C、LESBX,VARD、LEABX,VAR
【答】D
(3)编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有
()。
A、CMPB、SUBC、ANDD、MOV
【答】D
(4)下面指令执行后,改变AL寄存器内容的指令是()。
A、TESTAL,02HB、ORAL,AL C、CMPAL,BD、ANDAL,BL
【答】D
(5)设DH=10H,执行NEGDH指令后,正确的结果是()。
A、DH=10HCF=1B、DH=0F0HCF=0 C、DH=10HCF=0D、DH=0F0HCF=1
【答】D
(6)设DS=8225H,DI=3942H,指令NEGBYTEPTR[DI]操作数的物理地址是()。
A、85B92HB、86192HC、BB690HD、12169H
【答】A
(7)检查BUF的内容是否为正偶数,如是正偶数,则0TAL。下面程序段正确的是()。
A、MOVAL,BUF
JSK1 SHRAL,1 JNCK1 MOVAL,0 K1:…… B、MOVAL,BUF
ANDAL,11 JNZK2 MOVAL,0 K2:…… C、MOVAL,BUF
TESTAL,81H JNZK3 MOVAL,0 K3:…… D、MOVAL,BUF
JNPK4 TESTAL,80H JNZK4 MOVAL,0 K4:……
【答】C
(8)下列指令中,执行速度最快的是()。
A、MOVAX,100B、MOVAX,[BX] C、MOVAX,BXD、MOVAX,[BX+BP]
【答】C
3.3已知(DS)=091DH,(SS)=IE4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H, (BP)=0024H,(SI)=0012H,(DI)=0032H,[09226]=00F6H,[09228]=1E40H, [lE4F6]=091DH,试求单独执行下列指令后的结果? (l)MOVCL,20H[BX][SI];
【答】由于源操作数有效地址EA=20H+0024H+0012H=0056H,
其物理地址PA=DS*16+EA=091DH*16+56H=09226H,因此(CL)=F6H
(2)MOV[BP][DI],CX;
【答】由于目的操作数有效地址EA=0024H+0032H=0056H,
目的操作数物理地址PA=SS*16+EA=1E4A0H+0056H=1E4F6H,因此[1E4F6]=5678H
(3)LEABX,20H[BX][SI]
MOVAX,2[BX]
【答】第一条指令:源操作数物理地址PA=091D0H+(20+0024H+0012H)=09226H,因此(BX)=0056H
第二条指令:源操作数物理地址PA=091D0H+(2+0056)=09928H,因此(AX)=1E40H
(4)LDSSI,[BX][DI]
MOV[SI],BX
【答】第一条指令:源操作数物理地址PA=091D0H+(0024H+0032H)=09226H
因此(SI)=00F6H,(DS)=1E40H
第一条指令:目的操作数物理地址PA=1E400H+00F6H=1E4F6H 因此1E4F6H单元的内容为0024H,即[1E4F6H]=0024H (5)XCHGCX,32H[BX]
XCHG20[BX][SI],AX
【答】同理可得:(CX)=00F6H(AX)=00F6H,[09226H]=1234H 3.48086CPU执行如下指令后
MOVAL,01100100B
SUBAL,58H;(AL)=0CH,AF=1,CF=0 DAS;(AL)=06,AF=1,CF=0
【答】首先用TD调试验证上面的结果;自己定义两个数据,重新验证,写出结果。
3.5设(IP)=3D8FH,(CS)=4050H,(SP)=0F17CH,当执行CALL2000:0094H后,试求出IP、
CS、SP、[SP]、[SP+1][SP+2]和[SP+3]的内容? 【答】(IP)=0094H,(CS)=2000H,(SP)=F178H
[SP]=8FH,[SP+1]=3DH,[SP+2]=50H,[SP+3]=40H,[SP+3]=40H
3.6设(DS)=2000H,(BX)=1256H,(SI)=528FH,TABLE的偏移量=20A1H,[232F7H]=3280H,
[264E5H]=2450H,执行下述指令
(1)JMPBX;IP=1256H
(2)JMPTABLE[BX];IP=3280H
(3)JMP[BX][SI];IP=2450H
3.7分别用一条语句实现下述指明的功能
(1)栈顶内容弹出送字变量DI。(POPDI)
(2)双字变量AYD存放的地址指针送ES和SI。(LESSI,AYD) (3)不允许中断即关中断。(CLI) (4)子程序返回调用程序。(RET)
(5)AX的内容加1,要求不影响CF。(INCAX)
(6)BX的内容加1,要求影响所有标志位。(ADDBX,1) (7)若操作结果为零转向标号GOON。(JZGOON) 3.88086/8088用什么途径来更新CS和IP的值?
【答】执行CALL、JMP、INT指令,可以改变CS和IP中的值,即改变程序走向。
3.9字节扩展指令和字扩展指令用在什么场合?举例说明。
【答】需要对带符号数字节扩展为字时,要预先执行CBW指令。需要对带符号数字扩展为双字时,要 预先执行CWD。
【答】例:求-503/267=?,将商存1000H单元.
MOVAX,-503 MOVBX,267 CWD IDIV
MOV[1000H],AX HLT
3.10设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作:
MOVWORDPTR[BP],2000 MOVWORDPTR[BX],2000
3.11以下是格雷码的编码表
0——0000,1——0001,2——0011,3——0010,4——0110 5——0111,6——0101,7——0100,8——1100,9——1101
请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII的转换。 【答】
格雷码ASCII码 000030H 000131H 001033H 001132H 010037H 010136H 011034H 011135H 10000 10010 10100 10110 110038H 110139H
TABLESEGMENT
TAB_DADB30H,31H,33H,32H,37H,36H,34H,35H,0,0
DB0,0,38H,39H
GRADB05H ASCII_DADB? TABLEENDS CODESEGMENT
ASSUMECS:CODE,DS:TABLE START:MOVAX,TABLE
MOVDS,AX
MOVBX,OFFSETTAB_DA
MOVAL,GRA XLAT
MOVASCII_DA,AL
CODEENDS
ENDSTART
3.128086状态标志寄存器中,作为控制用的标志位有(3)个,其中,不可用指令操作的是(DF、IF、 TF)
3.13设当前的SP=1000H,执行PUSHF指令后,SP=(0FFEH),若改为执行INT20H指令后,则SP=
(0FFAH)。
【答】执行PUSHF指令后,SP=(0FFEH)。执行INT20H指令后,则SP=(0FFAH)。
3.14设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行PUSHBX指令
后,栈顶地址和栈顶2个字节的内容分别是什么?
【答】当前栈顶指针(SP)=2FF00H,物理地址=20100H+FE00H=2FF00H
当执行PUSHBX指令后,栈顶指针(SP)=FE00-2=FDFEH,栈顶物理地址=2FDFEH,栈顶 2个字节的内容分别57H,34H。
3.15HLT指令用在什么场合?如CPU在执行HLT指令时遇到硬件中断并返回后,以下应执行哪条指
令?
【答】HLT用在使CPU处于暂停状态而等待硬件中断的场合。
在执行HLT指令遇到硬件中断并返回后将执行HLT后面的一条指令。
3.16为什么用増量指令或减量指令设计程序时,在这类指令后面不用进位标志作为判断依据? 【答】増量指令或减量指令不影响进位标志CF。
3.17用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具体讲,在进行BCD码的加、减、
乘、除运算时,程序段的什么位置必须加上十进制调整指令?
【答】在BCD码中,采用4位二进制数对一个十进制数的编码,只允许0-9这10个数字出现,但CPU
运算结果一般会超过此范围,因此要进行十进制调整。进行加、减法或乘法运算时,调整指令必须 紧跟在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。
3.18中断指令执行时,堆栈的内容有什么变化?中断处理子程序的人口地址是怎样得到的?
【答】中断指令执行时,堆栈内容变化如下:标志寄存器被推入堆栈,且SP减2,然后CPU将主程序
的下一条指令地址即断点地址推入堆栈,即段值CS推入堆栈且SP减2,偏移量推入堆栈,且SP减 2。中断处理子程序的入口地址即中断向量,对应的中断类型号的4倍即为中断向量地址,在该地 址处的4个字节内容,高地址单元两个字节为中断入口地址的段地址,低地址单元两个字节为中断 入口地址的偏移地址。
3.19中断返回指令IRET和普通子程序返回指令RET在执行时,具体操作内容什么不同?
【答】IRET从堆栈中依次弹出断点处指令指针IP、代码段CS内容与标志寄存器的值,而RET从堆栈中依 次弹出断点处指令指针IP值、代码段CS内容,不需要弹出标志寄存器的值。
3.20将存放在0A00H单元和0A02H单元的两个无符号数相乘,结果存放在地址为0A04H开始的单元中。 【答】参考程序:
MOVAL,[0A00H]
MOVBL,[0A02H] MULBL MOV[0A04],AX
3.21编程序将AX中数,最高位保持不变,其余全部左移4位。 【答】参考程序:
MOVBX,AX
ANDBX,8000H MOVCL,4 SHLAX,CL ANDAX,7FFFH ORAX,BX
3.22将0400H单元中的数,低4位置零,高4位保持不变。 【答】参考程序:
MOVAL,[0400H]
ANDAL,0F0H MOV[0400H],AL
3.23将BX中的数,对高位字节求反,低位字节保持不变。 【答】参考程序:NOTBH
3.24检测Bx中第13位(D13),为0时,把AL置0,为1时,把AL置1。 【答】参考程序:
TESTBX,0010000000000000B JZZERO MOVAL,01H HLT
ZERO:MOVAL,0
HLT
3.25利用字串操作指令,将1000H~10FFH单元全部清零。 【答】参考程序:
CLD
MOVDI,1000H MOVCX,100H MOVAL,0 REPSTOSB
3.26从1000H开始,存放有200个字节,要查出字符#(ASCII码为23H),把存放第一个#的单元地址送入
BX中。 【答】参考程序:
CLD
MOVDI,1000H MOVCX,200 MOVDX,CX MOVAL,23H REPNZSCASB JZFIND JMPNOFOUND
FOUND:DECDI
MOVBX,DI
NOFOUND:HLT
3.27编程计算((X+Y)*10)+Z)/X,X、Y、Z都是16位无符号数,结果存在RESULT开始的单元。 【答】参考程序:
MOVAX,X