姚琳 习题C3 答案.docx
- 文档编号:30518619
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:29
- 大小:42.06KB
姚琳 习题C3 答案.docx
《姚琳 习题C3 答案.docx》由会员分享,可在线阅读,更多相关《姚琳 习题C3 答案.docx(29页珍藏版)》请在冰豆网上搜索。
姚琳习题C3答案
习题3答案
1.指出下列指令的错误原因。
(1)ANDAX,DL;类型不匹配
(2)ADDCS,DX;CS不能作为目的操作数
(3)MOVAX,IP;IP不能作为指令的操作数
(4)MOV[BP][SI],[SI];两个操作数不能同时为内存操作数
(5)SUB[BP][SI],ES:
DX;段超越前缀只能用在内存操作数之前
(6)XCHGAL,[SI][DI];没有[SI][DI]这种操作数形式
(7)JGEAX;条件转移指令的操作数只能是标号
(8)PUSHDL;对堆栈不能进行字节操作
2.用一条指令将BX清0。
(请给出3种方法)
方法1:
MOVBX,0
方法2:
SUBBX,BX
方法3:
ANDBX,0;将BX和0做与,可以将BX清零
方法4:
XORBX,BX
3.写出实现下列功能的指令序列。
(1)判断AX的值,若AX等于0,则转到标号LABEL处。
(请写出3种方法)
方法1:
CMPAX,0
JZLABEL;如果ZF=0,说明AX为0,因为CMP指令是做减法,但是不写回结果
;因此指令执行后AX内容不会受到破坏
方法2:
TESTAX,0FFH
JZLABEL;如果ZF=0,说明AX为0,TEST指令做与运算,可是不写回结果,只影响标志位。
;和0与清零,和1与不变,所以和FFH做与的结果是AX本身,但是此时标志位已
;经改变了,所以可以利用标志位来判断,但是AX内容却没有受到任何破坏
方法3:
ANDAX,0FFH;这个方法的原理和方法2其实是完全一致的
JZLABEL
(2)将AL的高4位与低4位分别放入AH与AL的低4位,并将AH与AL的高4位清0。
MOVAH,AL
ANDAL,0FH;AL高4位通过与清零,而低4位保持不变
MOVCL,4
SHRAH,CL;这两条指令通过逻辑右移将AH的高4位清零,因为SHR在右移后,高位补零
(3)若AX和BX中的数恰好1个是奇数、1个是偶数,则将奇数放入AX,偶数放入BX;否则,AX和BX不变。
题意理解有2种
方法1:
先判断奇偶
Movcx,ax;cx=ax
Xorcx,bx;关键看末位C0,异或后C0=1,说明AX,BX一奇一偶;C0=0则不是
Testcx,01;判断第0位
JzExit;判断奇数/偶数:
C0=0,ZF=1说明不是一奇一偶,到出口
Testbx,1;已知是一奇一偶了,
JzExit;bx中的数是偶数,AX是奇数,不交换,到出口
Xchgax,bx;否则,交换
Exit:
例:
AX=**00101111,BX=**10100011;高8位任意
AX=**00101110,BX=**10100011
方法2:
先判断奇偶
TESTAX,01H;TEST做与运算,通过与,来检测AX的最低位
JNZEXIT;A0=1,ZF=0,说明AX中的是奇数,不论BX奇偶,到出口
TESTBX,1;ZF=1,说明AX的最低位是0,那么AX是偶数,继续判BX
JZEXIT;B0=0,ZF=1BX偶数,不交换,到出口
XCHGAX,BXAX偶数,BX奇数,交换
EXIT:
方法3:
认为AX,BX中必为一个奇数一个偶数
TESTAX,01H;TEST做与运算,通过与来检测AX的最低位
JNZCONTINUE;如果ZF=0,说明AX的最低位是1,那么AX中
的数是奇数,就跳转,不用动了。
否则,说明AX中的是偶数,而BX
中的是奇数,交换
XCHGAX,BX
CONTINUE:
….
4.分析下列指令序列完成什么功能。
MOVCL,4
SHLDX,CL
MOVBL,AH
SHLAX,CL
SHRBL,CL
ORDL,BL
答案:
将DX.AX中的32位数整体逻辑左移4位。
5.给出下列各条指令执行后AL以及CF、OF、SF、和ZF的值。
指令
AL
CF
OF
SF
ZF
备注
MOVAL,100
100/64H
XORAL,AL
0
0
0
0
1
XOR后CF=OF=0,其余据结果设置
MOVAL,-1
-1/0FFH
0
0
0
1
MOV指令不影响标志位
INCAL
0
0
0
0
1
INC不影响CF,其余据结果设置
NOTAL
0FFH
0
0
0
1
NOT指令不影响标志位
SHLAL,1
0FEH
1
0
1
0
SHL据移出的位设CF,据结果设SF,ZF,一位移动,据移位前后最高位是否变化设置,有变化OF=1,无变化OF=0
CMPAL,10
0FEH
0
0
1
0
CMP指令根据结果设置6个标志位
SUBAL,7FH
7FH
0
0
0
0
SUB根据结果设置6个标志位
SHLAL,1
0FEH
0
1
1
0
解释同上
6.比较AX,BX和CX中无符号数的大小,将最小数放入AX中。
答案:
CMPAX,BX
JCBBB;如果AX<=BX,跳转
XCHGAX,BX;否则,交换AX和BX的值,将两者中的小值放到AX中去
BBB:
CMPAX,CX
JCCCC;如果AX<=CX,跳转
XCHGAX,CX;否则,交换AX和CX的值,将两者中的小值放到CX中去
CCC:
INT20H;返回DOS
7.变量定义伪指令与符号定义伪指令的主要作用是什么?
答案:
变量定义伪指令:
主要用来为某种类型(比如字节型、字型)的内存单元的地址指定一个可以引用的名字标识。
符号定义伪指令:
其实就是定义一个宏替换常量,用定义的符号代表一个文本串或者一个数值,在程序中遇到定义的符号时用相应的文本串或者数值去替换。
8.设有下列段定义:
DSEGSEGMENT
XDW1,3
DSEGENDS
给出下列两组指令序列分别执行后AX的值。
(1)MOVAX,DSEG
MOVDS,AX
MOVAX,X+1
(2)MOVAX,SEGX
MOVES,AX
MOVAX,ES:
X
INCAX
答案:
(1)(AX)=2?
教材P109以及P90例子
(2)(AX)=2
备注:
这两小段程序实现的功能是相同的,都是给子类型的变量X的值加1。
第二段程序采用了段超越方式来寻址操作数。
9.设有如下定义的数据段:
DATASEGMENT
ORG100与教材不同64H
V1DW2DUP(20),$+10
BUF1DB‘100’,5
DD0
BUF2DW1,2,2A9H
LENEQUBUF2–BUF1
VADWBUF1
DATAENDS
则V1+1中存放的字节数据为(0),V1+4中存放的字数据为(ORG100时114/72H),VA的内容为(ORG100时106/6AH),LEN的值为(8)。
10.在数据段定义的两个变量S1和S2,要求设计一个完整的程序,将以S1为首地址的50个字节依次传送到以S2为首地址的内存单元中。
File1.ASM
datasgsegment
s1db25dup('12')
s2db50dup(0)
datasgends
codesgsegment
assumecs:
codesg,ds:
datasg
start:
movax,datasg
movds,ax
moves,ax
movsi,offsets1
movdi,offsets2
movcx,50
repmovsb
movax,4c00h
int21h
codesgends
endstart
11.从键盘读入一个字符串(长度<50),统计其字母、数字及其他字符的个数。
File2.asm
datasgsegment
buff1db50;最大能容纳的字符个数
countdb(?
);实际输入的字符个数
buff2db50dup(?
);实际字符缓冲区
lettersdb0;输入的字母个数
digitsdb0;输入的数字个数
othersdb0;输入的其他字符的个数
datasgends
codesgsegment
assumecs:
codesg,ds:
codesg
start:
movax,datasg
movds,ax
movdx,offsetbuff1;为0AH号系统功能调用准备输入参数DS:
DX指向输入缓冲区的首地址
movah,0ah
int21h
xoral,al
movch,0
movcl,count;CX中存放循环次数
movsi,offsetbuff2;为lodsb准备源地址,DS:
SI指向实际的字符串地址
cld
check:
lodsb;取一个数据到AL
cmpal,'A'
jcx1
cmpal,'Z'
jncx1
incletters;将字符串中的大写字母个数统计到letters变量中
jmpnext
x1:
cmpal,'a'
jcx2
cmpal,'z'
jncx2
incletters;将字符串中的小写字母个数统计到letters变量中
jmpnext
x2:
cmpal,'1'
jcx3
cmpal,'9'
jncx3
incdigits;将字符串中的数字字符统计到digits变量中
jmpnext
x3:
incothers;统计其他字符个数
next:
loopcheck
movax,4c00h
int21h
codesgends
endstart
12.设计一个程序,求10个无符号数中的最大值。
并将最大值存入变量MAX中。
File3.asm
datasgsegment
arraydb20,12,16,14,13,90,45,32,67,100;字节型数组
maxdb0
datasgends
codesgsegment
assumecs:
codesg,ds:
datasg
start:
movax,datasg
movds,ax
leasi,array;数组首地址
movcx,10;数组元素个数
cld;让地址值不断增大
lodsb;将第一个数组元素放到AL中
movmax,al
deccx
next:
lodsb;取下一个数组元素到AL中
cmpal,max
jcgoon;(al)<=max则max中的值不变
movmax,al;否则max=(al)
goon:
loopnext
movax,4c00h
int21h
codesgends
endstart
2.写出实现下列功能的指令序列。
(1)将AL与BX中的两个无符号数相加,结果放入AX。
(2)将AL与BX中的两个带符号数相加,结果放入AX。
类型转换指令
CBWALAX
执行操作:
若(AL)的最高有效位为0,则(AH)=00H
若(AL)的最高有效位为1,则(AH)=FFH
CWDAX(DX,AX)
执行操作:
若(AX)的最高有效位为0,则(DX)=0000H
若(AX)的最高有效位为1,则(DX)=FFFFH
例:
(AX)=0BA45H
CBW;(AX)=0045H
CWD;(DX)=0FFFFH(AX)=0BA45H
注意:
*无操作数指令
*隐含对AL或AX进行符号扩展
*不影响条件标志位
CBW;AL->AX
ADDAX,BX
3.编写实现下列功能的指令序列。
(1)AL的高4位与低4位分别放入BH与BL的低4位,并将BH与BL的高4位清0。
movbx,ax
movcl,4
shlbx,cl
andbx,0f00h
andax,000fh
orbx,ax
(2)将CX:
BX:
AX中的48位数加倍。
其中,CX与AX分别作为最高16位与最低16位。
(3)设AL的值为带符号数,若AL的绝对值小于10,则置CF=0,否则置CF=1。
法1:
先求绝对值再判断
TESTAL,80H
JZL1
NEGAL
L1:
CMPAL,10
JBL2
STC
JMPL3
L2:
CLC
L3:
HLT
法2:
CMPAL,10
JGESETCF
CMPAL,-10
JLESETCF
CLC
JMPEXIT
SETCF:
STC
EXIT:
HLT
法3:
=>>
==>>
=>
ADDAL,9
MOVCL,18
CMPCL,AL
下面各题根据要求写出相应的指令序列:
3、将BP、SI寄存器的内容先后入栈,然后用出栈指令将保存的数据依次恢复到前述寄存器中。
4、将AL和BL的有符号数相乘,结果转移到DI中
5、将数据段偏移地址为1000H的存储器单元内容与DX中的无符号数做比较,若前者小于或等于后者,则跳到标号为NEXT的位置继续执行后面的程序。
6、将0200H存储单元的字节内容高七位清零,最低位不变。
7、将DX寄存器的数据算术右移2位。
3.
pushbp
pushsi
popsi
popbp
4.
imulbl
movdi,ax
5.
movbx,1000h
movax,[bx]
cmpax,dx
jbenext
6.
movbx,200h
moval,[bx]
andal,1
mov[bx],al
7.
movcl,2
sardx,cl
2.
DS=1000H,BX=0200H,SI=0002H
(10200H~10205H)依次存有10H,2AH,3CH,46H,59H,6BH
(1)MOVAX,0200H;AX=0200
(2)MOVAX,[200H]
物理地址=1000H×10H+0200H=10200H,AX=2A10H
(3)MOVAX,BX;AX=0200H
(4)MOVAX,3[BX]
物理地址=1000H×10H+0200H+3H=10203H,AX=5946H
(5)MOVAX,[BX+SI]
物理地址=1000H×10H+0200H+2H=10202H,AX=463CH
(6)MOVAX,2[BX+SI]
物理地址=1000H×10H+200H+2H+2H=10204H,AX=6B59H
3.
DS=1000H,ES=2000H,SS=3500H,
SI=00A0H,DI=0024H,BX=0100H,BP=0200H,VAL=0030H
(1)MOVAX,[100H]直接寻址方式,10100H
物理地址=DS×10H+100H=10000H+0100H=10100H
(2)MOVAX,VAL直接寻址方式,10030H
物理地址=DS×10H+VAL=10000H+0030H=10030H
(3)MOVAX,[BX]寄存器间接寻址,10100H
物理地址=DS×10H+BX=10000H+0100H=10100H
(4)MOVAX,ES:
[BX]寄存器间接寻址,20100H
物理地址=ES×10H+BX=20000H+0100H=20100H
(5)MOVAX,[SI]寄存器间接寻址,100A0H
物理地址=DS×10H+SI=10000H+00A0H=100A0H
(6)MOVAX,[BX+10H]寄存器相对寻址,10110H
物理地址=DS×10H+BX+10H=10000H+0100H+10H=10110H
(7)MOVAX,[BP]寄存器间接寻址,35200H
物理地址=SS×10H+BP=35000H+0200H=35200H
(8)MOVAX,VAL[BP][SI]相对基址变址寻址,352D0H
物理地址=SS×10H+BP+SI+VAL
=35000H+0200H+00A0H+0030H=352D0H
(9)MOVAX,VAL[BX][DI]相对基址变址寻址,10154H
物理地址=DS×10H+BX+DI+VAL
=10000H+0100H+0024H+0030H=10154H
(10)MOVAX,[BP][DI]基址变址寻址,35224H
物理地址=SS×10H+BP+DI
=35000H+0200H+0024H=35224H
6.
(1)MOVDL,AX
错,寄存器寻址方式中,目的操作数与源操作数长度必须一致
(2)MOV8650H,AX
错,目的操作数不可以是立即数
(3)MOVDS,0200H
错,MOV指令不允许将立即数传入段寄存器
(4)MOV[BX],[1200H]
错,MOV指令的两个操作数不能同时为存储器
(5)MOVIP,0FFH
错,IP不能作为MOV指令的目的操作数
(6)MOV[BX+SI+3],IP
错,IP不能作为MOV指令的源操作数
(7)MOVAX,[BX][BP]
错,BX与BP不可以同时出现在源操作数当中
(8)MOVAL,ES:
[BP]对
(9)MOVDL,[SI][DI]
错,SI与DI是两个变址寄存器,不可以同时出现在源操作数中。
(10)MOVAX,OFFSET0A20H
错,OFFSET后面跟的应该是符号地址,再把符号地址的值作为操作数。
(11)MOVAL,OFFSETTABLE
错,TABLE的偏移地址是16位,目的与源长度不一致
(12)XCHGAL,50H
错,交换指令可以在寄存器之间,寄存器和存储器之间进行,不可以是立即数。
(13)INBL,05H
错,BL不能作为IN指令的目的操作数,只能用AL或AX
(14)OUTAL,0FFEH
错,端口地址0FFEH>FFH,应用DX间接寻址,同时源操作数和目标操作数的位置颠倒了,应改为OUTDX,AL。
10.ARRAYDB…………
NEWDB7DUP(?
)
SUMDW0
AVERAGEDB0
(1)MOVCX,07H
MOVBX,00H
NEXT:
MOVAL,ARRAY[BX]
ADDAL,5
DAA
MOVNEW[BX],AL
INCBX
LOOPNEXT
HLT
(2)MOVCX,06H
MOVBX,01H
MOVAH,00H
MOVAL,ARRAY
L1:
ADDAL,ARRAY[BX]
DAA
ADCAH,00H;将进位加到AH中
INCBX
LOOPL1
MOVSUM,AX
(3)MOVDX,SUM;DX=0×××H(BCD码)
MOVBL,07H
MOVAX,DX;取千位、百位数
ANDAL,0F0H
MOVCL,04H
ROLAL,CL;AX=0×0×H
AAD;AL←AH×10+AL,AH←00
DIVBL;十位商在AL中,余数在AH中
MOVAVERAGE+1,AL;存平均成绩十位
MOVAL,DL;取个位和数
ANDAL,0FH
AAD;AL←AH×10+AL,AH←00
DIVBL;个位商在AL中,余数在AH中
MOVAVERAGE,AL;存平均成绩个位
MOVAVERAGE+2,AH;存余数
11.AX=2508H,BX=0F36H,CX=0004H,DX=1864H
(1)ANDAH,CL
AH=04H,CF=0;(00100101B与00000100B)
(2)ORBL,30H
BL=36H,CF=0;(00110110B或00110000B)
(3)NOTAX
AX=DAF7H,CF无影响;(0010010100001000B取反后1101101011110111B)
(4)XORCX,0FFF0H
CX=FFF4H,CF=0;(0000000000000100B和1111111111110000B异或后1111111111110100B)
(5)TESTDH,0FH
TEST操作并不修改结果,CF=0;
(6)CMPCX,00H
CMP操作并不修改结果,CF=0;
(7)SHRDX,CL
DX=0186H,CF=0;
(8)SARAL,1
AH=04H,CF=0;
(9)SHLBH,CL
BH=F0H,CF=0;
(10)SALAX,1
AX=4A10H,CF=0;(0010010100001000B左移)
(11)RCLBX,1
若程序执行之前CF=0,BX=1E6CH,CF=0;
若程序执行之前CF=1,BX=1E6DH,CF=0。
(12)RORDX,CL
DX=4186H,CF=0。
12.DATASEGMENT
STRINGDB‘Thepersonalcomputer&TV’
DATAENDS
EDATASEGMENT
GET_CHARDB26DUP(?
)
NEW_STRDB‘Thecomputer’
EDATAENDS
(1)MOVSI,OFFSETSTRING
MOVDI,OFFSETGET_CHAR
MOVCX,001AH
CLD
REPMOVSB
(2)MOVSI,OFFSETSTRING
MOVDI,OFFSETNEW_STR
MOVCX,001AH
CLD
REPZCMPSB;DS:
SI-ES:
DI
JN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 姚琳 习题C3 答案 习题 C3