以下是学习计算机系统基础课程的一些练习题记录,重在理解的过程,因为本身学习这门课程的目的就在于更好的理解“计算机组成原理”。
1. 假设 R[ax]=FFE8H,R[bx]=7FE6H,执行指令“subw %bx, %ax”后,寄存器的内容和各标志的变化为( )。
- A.R[bx]=8002H,OF=1,SF=1,CF=0,ZF=0
- B. R[ax]=8002H,OF=0,SF=1,CF=0,ZF=0
- C.R[bx]=8002H,OF=0,SF=1,CF=0,ZF=0
- D.R[ax]=8002H,OF=1,SF=1,CF=0,ZF=0
注:subw %bx, %ax 表示R[ax] - R[bx] → R[ax]
2. 假设R[eax]=0000B160H,R[ebx]=00FF0110H,执行指令“imulw %bx”后,通用寄存器的内容变化为( )。
得分/总分
-
A.R[eax]=00007600H,R[dx]=FFACH
-
B.R[eax]=00007600H,R[dx]=00BCH
-
C.R[eax]=00BC7600,其余不变
-
D.R[eax]=FFAC7600H,其余不变
注:w表示一个字,16bit,IA-32指令中,若只有一个操作数,则另一个操作数隐藏在AL/AX/EAX中,将两者相乘后(转换成加法,用ALU的加法部件),16bit时存在AX,32bit时存在DX-AX,64bit存在EDX-EAX中。这里是16bit*16bit,结果是32bit。
补充:IA-32架构是由8086的16位架构发展而来的,所以一个字的大小为16bit,双字32bit,用l表示。x86架构下一个字就是16bit,要与字长加以区分。
3. 假设short型变量x被分配在寄存器AX中,若R[ax]=FF70H,则执行指令“salw $2, %ax”后,变量x的机器数和真值分别是( )。
-
A.FFDCH,-36
-
B.3FDC,16348
-
C.FDC0H,-576
-
D.FDC3H,-573
注:salw表示按字算术左移。其他的SHL/SHR 逻辑左移/逻辑右移;ROL/ROR 循环左移/循环右移。RCL/RCR 带进位左移/带进位右移。真值对应的值,与其存储的类型相关,这里是short型,所以是16位,带符号的。按照补码对应:-(0000 0010 0100 0000B)= -(512+64)
4. 程序P中有两个变量i和j,被分别分配在寄存器EAX和EDX中,P中语句“if (i<j) { …}”对应的指令序列如下(左边为指令地址,中间为机器代码,右边为汇编指令):
804846a 39 c2 cmpl %eax, %edx
804846c 7e 0d jle xxxxxxxx
若执行到804846a处的cmpl指令时,i=105,j=100,则jle指令执行后将会转到( )处的指令执行。
-
A.8048479
-
B.804846e
-
C.8048461
-
D.804847b
注:cmpl 是做减法,后面的减去前面的(这里的所有指令顺序都和MIPS指令相反)。这里就是100-105。然后jle,l-lower,e-equal,小于等于就跳转(带符号,不带符号的是a-above和b-below),跳转的地址:理解成短转移了,暂时还不是很清楚。0x84846c+2+0d