MOV BL, 23 DIV BL (7) MOV
DX, DATAX+2
MOV AX, DATAX DIV DATAY 3.21
写出对存放在DX和AX中的双字长数求补的指令序列。
也可为: NOT DX
答:NEG DX NEG
AX NOT AX
SBB DX, 0 ADD AX, 1 ADC 3.22
DX, 0
试编写一程序求出双字长数的绝对值。双字长数在A和A+2单元中,
结果存放在B和B+2单元中。 答:程序段如下: MOV AX, A MOV DX, A+2 CMP
DX, 0
JNS ZHENSHU ;不是负数则转走 NEG NEG
DX AX
SBB DX, 0
ZHENSHU: MOV B, AX MOV
B+2, DX INT 20H 3.23
假设(BX)=0E3H,变量VALUE中存放的内容为79H,确定下列各条
指令单独执行后的结果。
(1) XOR BX, VALUE ;(BX)=9AH,CF、OF都为0,AF无定义,SF=1,ZF=0,PF=1
(2) AND BX, VALUE ;(BX)=61H,CF、OF都为0,AF无定义,SF=0,ZF=0,PF=0
(3) OR BX, VALUE ;(BX)=0FBH,CF、OF都为0,AF无定义,SF=1,ZF=0,PF=0 (4) XOR
BX, 0FFH ;(BX)=1CH,CF、OF都为0,AF无定义,SF=0,ZF=0,PF=0
(5) AND BX, 0 ;(BX)=00H,CF、OF都为0,AF无定义,SF=0,ZF=1,PF=1 (6) TEST PF=0
答:见注释。 3.24
试写出执行下列指令序列后BX寄存器的内容。执行前(BX)=6D16H。
BX, 01H ;(BX)=0E3H,CF、OF都为0,AF无定义,SF=1,ZF=0,
MOV CL, 7
SHR BX, CL
答:(BX)=00DAH。 3.25
试用移位指令把十进制数+53和-49分别乘以2。它们应该用什么指
令?得到的结果是什么?如果要除以2呢? 答:MOV AL, 53
SAL AL, 1 ;(AL)=(+53*2)=6AH MOV AL, -49
SAL AL, 1 ;(AL)=(-49*2)=9EH MOV AL, 53
SAR AL, 1 ;(AL)=(53/2)= 1AH MOV AL, -49
SAR AL, 1 ;(AL)=(-49/2)=0E7H 3.26
试分析下面的程序段完成什么功能?
MOV CL, 04 SHL DX, CL MOV BL, AH SHL AX, CL SHR
BL, CL
OR DL, BL
答:本程序段将 ((DX),(AX)) 的双字同时左移4位,即将此双字乘以10H (16)。 3.27
假定(DX)=0B9H,(CL)=3,(CF)=1,确定下列各条指令单独执行后DX
中的值。
(1) SHR DX, 1 ;(DX)=05CH (2) SAR DX, CL ;(DX)=17H (3) SHL DX, CL ;(DX)=5C8H (4) SHL DL, 1 ;(DX)=72H (5) ROR DX, CL ;(DX)=2017H (6) ROL DL, CL ;(DX)=0CDH (7) SAL DH, 1 ;(DX)=0B9H (8) RCL DX, CL ;(DX)=2CCH (4) RCR DL, 1 ;(DX)=0DCH 答:见注释。 3.28
下列程序段执行完后,BX寄存器的内容是什么?
MOV CL, 3 MOV BX, 0B7H ROL ROR
BX,1 BX, CL
答:(BX)=0C02DH。 3.29
假设数据段定义如下:
CONAME DB ‘SPACE EXPLORERS INC.’ PRLINE DB
20 DUP (‘’)
用串指令编写程序段分别完成以下功能:
(1) 从左到右把CONAME中的字符串传送到PRLINE。 (2) 从右到左把CONAME中的字符串传送到PRLINE。
(3) 把CONAME中的第3和第4个字节装入AX。 (4) 把AX寄存器的内容存入从PRLINE+5开始的字节中。
(5) 检查CONAME字符串中有无空格字符,如有则把第一个空格字符的地址传送给BX寄存器。 答:(1) MOV CX, 20 CLD
MOV SI, SEG CONAME MOV DS, SI MOV ES, SI LEA SI, CONAME LEA DI, PRLINE REP MOVSB (2) MOV STD
MOV SI, SEG CONAME MOV DS, SI MOV ES, SI LEA SI, CONAME ADD
SI, 20-1
CX, 20
LEA DI, PRLINE ADD
DI, 20-1
REP MOVSB