汇编语言程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
〈汇编语言程序设计〉课后习题及答案
作者名:不详来源:网友提供06年6月8日
第一章
1.1
CPU 分析、控制并执行指令的部件
IP 指示下一条将要执行的指令的地址
SP 保存当前栈顶地址的寄存器
状态标志指出指令操作结果的标志,如ZF,CF等。
控制标志控制操作的标志,只有DF,IF,TF三个。
ALU 进行算术和逻辑运算的单元
存储器存储程序、数据等信息的的记忆装置。
物理地址CPU发出的访问存储器的地址信息。
偏移地址相对于段起始地址的偏移量。
段地址是逻辑段的起始地址。
1.2下列操作可使用哪些寄存器
·存放各种运算操作的数据:AX,BX,CX,DX,SP,BP,SI,DI (我的辅导书上没有SP,BP;why?)
·存放数据串操作时的计数值:CX
·查看程序已执行到哪条指令的地址:IP
·查看堆栈中当前正要进行入出栈的存储单元的地址:SP
·查年运算结果是否等于零:PSW的ZF
·查年程序中的数据存放段区是从哪个地址开始的:DS,ES
·查看程序中的指令存放的段区是从哪个地址开始的:CS
1.3段地址和偏移地址为1000:117A的存储单元的物理地址是什么?而1109:00EA或1025:0F2A的存储单元的物理地址又是什么:这说明了什么问题?
1000:117A物理地址为:1117A;1109:00EA的物理地址
为:1117A;1025:0F2A的物理地址为:1117A.说明物理地址不变,段地址改变,偏移地址也随之变化.
1.存储器地址对应的数据(图略)
75422H(字节):9CH
75424H(字节):5DH
75422H(字):249CH
75424H(字):E65DH
第二章
2.1写出相应的汇编语言指令:
(1)以寄存器BX和SI作为基址变址寻址方式把存储器中的一个字传送到CX寄存器。
MOV CX,[BX][SI(注:寄存器寻址只能使用:BX,BP,SI,DI;且BX、BP或SI,DI不能同时使用,可能我说的不太对,请版主确认一下)
(2)以寄存器BX和偏移量value作寄存器相对寻址方式把存储器的一个字和AX相加,把结果(即和)送回那个字单元中。
ADD value[BX],AX
(3)将一个字节立即数0B6H与符号的地址为NUM的存储器字节单元内容相比较。
CMP BYTE PTR 0B6H,NUM(如果前面不加BYTE RTR,默认的也是字节比较吧?还有双字比较,应该怎么写?)
(4)测试从寄存器BP和DI、偏移量COUNT作为相对基址变址寻址方式寻址的存储器字节单元内容最高位B7的值,字节单元的内容不能改变。
TEST COUNT[BP][DI],80H
(5)将AH寄存中的高4位和低4位数据互换。
MOV CL,4
ROL(或ROR) AH,CL
(6)清除以寄存器SI间接寻址的存储器字单元,同时清除CF标志位. XOR AX,AX ;使AX=00000000,CF=0
MOV [SI],AX
2.2设DS=1000H,BX=2865H,SI=0120H,偏移量D=47A8H,试计算下列各种寻址方式下的有效地址.
1)使用D的直接寻址47A8H (这道指令怎么写?如何定义D的值)
2)使用BX的寄存器间接寻址2865H
3)使用BX和D的寄存器相对寻址700DH
4)使用BX、SI和F的相对基址变址寻址712DH
5)使用BX、SI的基址变址寻址2985
2.3假设
DS=1000H,BX=2A80H,CX=3142H,SI=0050H,(10050H)=3BH,(100 51H)=86H,(11200H)=7AH,(11101H)=64H,(12ADOH)=0A3H,每小题的括号中分别填入指令执行后的结果:
1)MOV AX,1200H ;AX=1200H
2)MOV AX,[1200H] ;AX=1200H(书上的答案是647A,但是我用DEBUG试了一下是1200,可能是因为我的PII的原因吧,希望有8088的朋友能试一下,版主,考起试来应该怎么写呀?)
3)ADD
[SI],CX ;(10050H)=7DH,9100510=B7H,ZF=0,CF=0,SF=1,OF=1
4)OR BYTE PTR [BX][SI],54 ;(12AD0H)=F7,CF=0,OF=0
5)MOV 150H[BX],CH ;[12BD0H]=31,CH=31
2.4指出下列指令的错误原因
1)MOV AX,CL 两操作数的长度不一样.
2)MOV CS,AX 不能给CS赋值
3)INC BETA[BP] 书上说:没有数据类型说明,但我认为它应该自动默认为字节操作,版主再来看看吧
4)MOV ES,1850H 立即数不能直接送段寄存器
5)ADD BX,DS 段寄存器不能做为加法操作数使用
6)AND AX,[CX] 寄存器寻址只能使用BX,SI,DI,BP
2.5说明下列指令执行的操作,说明原始数据和结果数据的存储地点[原始数据](结果数据)
1)mov [2700h],cx 这条指令在我的P4试了一下,是错误的;如果考试时出只好说是:把[CX]中的内容送到(数据段中偏移地址为2700h字单元)中;
2)MOV DH,50[SI] 将[数据段中有效地址为SI+50的字节单元]中的数据送入(DH)中;
3)LEA SI,ARRAY 将ARRAY的偏移地址送入(SI),结果数据在[代码段对相应指令字节中]
4)DAS 将AL中的压缩的十六进制数调整为十进制数,结果数据在AL 中,原始数据也在AL中
5)ADC CL,[BX] 将BX和CL的和加上CF的值后,存放在CL中,结果在CL中,原始在BX,CL,CF中
6)ROR WORD PTR ALPHA[SI],CL 将偏移地址为ALPHA+SI字单元中的数据循环移,结果和原始都在哪个字单元中.
2.6指出下列无条件转移指令的转移地址中的偏移地址是什么,存放在何处.
1)JMP BX 偏移地址是BX中的值,存放在BX中
2)JMP WORD PTR [BX] 偏移地址是以BX中的值为偏移地址的一个字单元中的数值,存放在以BX中的值为偏移地址的一个字单元中