计算机系统第三章答案剖析
- 格式:doc
- 大小:176.00 KB
- 文档页数:11
习题3.参考答案:(1)后缀:w,源:基址+比例变址+偏移,目:寄存器(2)后缀:b,源:寄存器,目:基址+偏移(3)后缀:l,源:比例变址,目:寄存器(4)后缀:b,源:基址,目:寄存器(5)后缀:l,源:立即数,目:栈(6)后缀:l,源:立即数,目:寄存器(7)后缀:w,源:寄存器,目:寄存器(8)后缀:l,源:基址+变址+偏移,目:寄存器4.参考答案:(1)源操作数是立即数0xFF,需在前面加‘$’(2)源操作数是16位,而长度后缀是字节‘b’,不一致(3)目的操作数不能是立即数寻址(4)操作数位数超过16位,而长度后缀为16位的‘w’(5)不能用8位寄存器作为目的操作数地址所在寄存器(6)源操作数寄存器与目操作数寄存器长度不一致(7)不存在ESX寄存器(8)源操作数地址中缺少变址寄存器5.参考答案:表3.12 题5用表src_type dst_type 机器级表示char int movsbl %al, (%edx)int char movb %al, (%edx)int unsigned movl %eax, (%edx)short int movswl %ax, (%edx)unsigned char unsigned movzbl %al, (%edx)char unsigned movsbl %al, (%edx)int int movl %eax, (%edx)6.参考答案:(1)xptr、yptr和zptr对应实参所存放的存储单元地址分别为:R[ebp]+8、R[ebp]+12、R[ebp]+16。
(2)函数func的C语言代码如下:void func(int *xptr, int *yptr, int *zptr){int tempx=*xptr;int tempy=*yptr;int tempz=*zptr;*yptr=tempx;*zptr = tempy;*xptr = tempz;}7.参考答案:(1)R[edx]=x(2)R[edx]=x+y+4 (3)R[edx]=x+8*y (4)R[edx]=y+2*x+12 (5)R[edx]=4*y (6)R[edx]=x+y8.参考答案:(1)指令功能为:R[edx]←R[edx]+M[R[eax]]=0x 00000080+M[0x8049300],寄存器EDX 中内容改变。
第三章处理机调度与死锁1,高级调度与低级调度的主要任务是什么?为什么要引入中级调度?【解】(1)高级调度主要任务是用于决定把外存上处于后备队列中的那些作业调入内存,并为它们创建进程,分配必要的资源,然后再将新创建的进程排在就绪队列上,准备执行。
(2)低级调度主要任务是决定就绪队列中的哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作。
(3)引入中级调度的主要目的是为了提高内存的利用率和系统吞吐量。
为此,应使那些暂时不能运行的进程不再占用宝贵的内存空间,而将它们调至外存上去等待,称此时的进程状态为就绪驻外存状态或挂起状态。
当这些进程重又具备运行条件,且内存又稍有空闲时,由中级调度决定,将外存上的那些重又具备运行条件的就绪进程重新调入内存,并修改其状态为就绪状态,挂在就绪队列上,等待进程调度。
3、何谓作业、作业步和作业流?【解】作业包含通常的程序和数据,还配有作业说明书。
系统根据该说明书对程序的运行进行控制。
批处理系统中是以作业为基本单位从外存调入内存。
作业步是指每个作业运行期间都必须经过若干个相对独立相互关联的顺序加工的步骤。
作业流是指若干个作业进入系统后依次存放在外存上形成的输入作业流;在操作系统的控制下,逐个作业进程处理,于是形成了处理作业流。
4、在什么情冴下需要使用作业控制块JCB?其中包含了哪些内容?【解】每当作业进入系统时,系统便为每个作业建立一个作业控制块JCB,根据作业类型将它插入到相应的后备队列中。
JCB 包含的内容通常有:1) 作业标识2)用户名称3)用户账户4)作业类型(CPU 繁忙型、I/O芳名型、批量型、终端型)5)作业状态6)调度信息(优先级、作业已运行)7)资源要求8)进入系统时间9) 开始处理时间10) 作业完成时间11) 作业退出时间12) 资源使用情况等5.在作业调度中应如何确定接纳多少个作业和接纳哪些作业?【解】作业调度每次接纳进入内存的作业数,取决于多道程序度。
第3章 部分习题参考答案3.2 (题目略)【解】overlap o i cpu T T T T -+=/,其中T overlap 的最大值为T cup 。
由题意可得当CPU 速度提高4倍后,T =30/4+20-30/4=20(s)。
(注:T overlap 为CPU 和I/O 重叠执行的时间)3.7 (题目略)【解】(1)处理机响应各中断源的中断请求的先后次序与它们的中断优先级一样:D 1D 2D 3D 4D 5;实际的中断处理次序为:D 1D 2D 3D 4D 5。
(2)处理机响应各中断源的中断请求的先后次序与它们的中断优先级一样:D 1D 2D 3D 4D 5;实际的中断处理次序为: D 4D 5 D 3 D 2D 1。
(3)处理机响应各中断源的中断服务请求和实际运行中断服务程序过程的示意图如下:(4)处理机响应各中断源的中断服务请求和实际运行中断服务程序过程的示意图如下:3.9 (题目略)【解】字节多路通道适用于连接大量像光电机等字符类低速设备。
这些设备传送一个字中断请求D 3,D 4,D 5时间tD 1, D 2 中断请求主程序中断服务程序 D 1,D 2,D 3,D 4,D 5 时间t符(字节)的时间很短,但字符(字节)间的等待时间很长。
通道“数据宽度”为单字节,以字节交叉方式轮流为多台设备服务,使效率提高。
字节多路通道可有多个子通道,同时执行多个通道程序。
数组多路通道适合于连接多台像磁盘等高速设备。
这些设备的传送速率很高,但传送开始前的寻址辅助操作时间很长。
通道“数据宽度”为定长块,多台设备以成组交叉方式工作,以充分利用并尽量重叠各台高速设备的辅助操作时间。
传送完K个字节数据,就重新选择下个设备。
数组多路通道可有多个子通道,同时执行多个通道程序。
选择通道适合于连接像磁盘等优先级高的高速设备,让它独占通道,只能执行一道通道程序。
通道“数据宽度”为可变长块,一次将N个字节全部传送完,在数据传送期只选择一次设备。
计算机操作系统慕课版第三章课后答案
1、高级调度与低级调度的主要任务是什么?为什么引入中级调度?
(1)、高级调度的主要任务是将外存的作业调入内存,又称作业调度。
低级调度的主要任务数为内存中处于就绪态的作业分配处理机。
(2)、为了提高内存的利用率与系统吞吐量。
ps:(中级调度是将作业调出掉回,高级调度是掉入,作业一次掉入,多次掉回,所以中级调度频次更高)
2、何谓作业和JCB?
作业是一组程序与数据和作业说明书,是高级调度的基本单位。
JCB是作业控制块,是作业存在的表示,包含管理,调度所需的全部信息。
ps:(对作业的控制是JCB和作业说明书一起的)
3、在什么情况下需要使用JCB?JCB通常包含了哪些内容?(1)作业进入系统。
(2)包含系统对作业调度,管理的全部信息。
4、在作业调度中应如何确定接纳多少作业和接纳哪些作业?
取决于多道程序度和调度算法。
5、试说明低级调度的主要功能?
从就绪队列中根据调度算法选择一个进程分配处理机。
6、简述引起进程调度的原因?
时间片完了、阻塞了、运行完了、被抢占了。
7、在抢占式调度算法中,应遵循的原则?
优先级、短进程优先、时间片原则。
8、在选择调度算法时应该遵循哪些规则?
公平性、资源利用率、平衡性、强制执行
9、何谓静态优先级?何谓动态优先级?确定优先级的依据是什么?
(1)、静态优先级创建进程时就确定,动态优先级随着时间与环境变化而改变。
(2)、用户要求,进程对cpu io等资源的要求,进程类型。
第3章总线、中断与输入输出系统3.1.简要举出集中式串行,定时查询和独立请求3种总线控制方式的优缺点。
同时分析硬件产生故障时通讯的可靠性。
答:集中式串行链连接方式。
其过程为:①所有部件都经公共的“总线请求”线向总线控制器发使用总线申请。
②当“总线忙”信号未建立时,“总线请求”才被总线控制器响应,送出“总线可用”信号,它串行地通过每个部件。
③如果某部件未发过“总线请求”,则它将“总线可用”信号往下一部件转,如果某部件发过“总线请求”,则停止“总线可用”信号的传送。
④该部件建立“总线忙”,并除去“总线请求”,此时该部件获得总线使用权,准备传送数据。
⑤数据传送期间,“总线忙”维持“总线可用”的建立。
⑥传送完成后,该部件去除“总线忙”信号和“总线可用”信号。
⑦当“总线请求”再次建立时,就开始新的总线分配过程。
优点:①选择算法简单;②控制总线数少;③可扩充性好;④可靠性高。
缺点:①对“总线可用”线及其有关电路失效敏感,②不灵活;③总线号传送速度慢。
集中式定时查询方式,过程:①总线上每个部件通过“总线请求”发请求。
②若“总线忙”信号未建立,则计数器开始计数,定时查询个部件,以确定是谁发的请求。
③当查询线上的计数值与发出请求的部件号一致时,该部件建立“总线忙”,计数停止,查询也停止。
除去“总线请求”,该部件获得总线使用权。
④“总线忙”维持到数据传送完毕。
⑤数据传送完,去除“总线忙”。
⑥当“总线请求”线上有新的请求,就开始下一个总线分配过程。
优点:①优先次序灵活性强;②可靠性高。
缺点:①控制线数较多;②扩展性较差;③控制较为复杂;④总线分配受限于计数信号,不能很高。
集中式独立请求方式,过程:①每个部件有一对“总线请求”和“总线准许”线。
②每个部件使用“总线请求”发中请,当“总线已分配”无信号时,总线控制器根据某种算法对同时送来的多个请求进行仲裁,以确定哪个部件使用总线,信号从“总线准许”送回该部件,去除该部件的“总线请求”,建立总线已分配”。
第三章总线、中断与输入输出系统历年真题精选1. 通道程序执行结束后引起的中断是( B )。
A. 外中断B. I/O中断C. 程序性中断D. 机器校验中断2.磁盘外部设备适合于连接到( B )。
A. 字节多路通道B. 数组多路通道或选择通道C. 选择通道或字节多路通道D. 数组多路通道或字节多路通道3. 总线控制机构为解决N个部件使用总线时优先次序的裁决,集中式定时查询,需外加控制线线数为( D )。
N]A.3 B. N+2 C. 2N+1 D. 2+[log24. 尽管中断响应次序由硬件排队器固定好,但中断实际处理完的次序是可以通过(系统软件)修改各中断级处理程序的(中断屏蔽)位,而动态改变。
5. 在满足通道设计流量不低于设备工作时的最大流量时,为使微观上不丢失设备信息,可以加设(数据缓冲器)或动态提高响应的(优先级)来弥补。
6. 总线控制方式有哪三种?各需要增加几根用于总线控制的控制线?并说明每种方式优先级的灵活性。
(P64-65)7.((1)20,20,25,40,40,100 us (2)200 B/ms (3)5 us )8.(1)1-3-4-2同步强化练习一、填空题。
1. 中断响应就是允许其中断CPU(现行程序)运行,转去对该请求进行预处理,包括保存(断点及其现场),调出有关处理该中断服务程序,准备运行。
2. 中断系统软硬件功能分配实质是中断(响应)硬件和中断(处理平衡)软件的功能分配。
3. 数组多路通道适用于连接多台(高)速设备,其通道“数据宽度”为(定长块)。
4. 输入输出系统包括输入输出设备、(设备控制器)及输入输出操作有关的(软硬件)。
5. 总线控制机构集中在一处的称(集中)式控制,分散在各部件的称(分布)式控制。
6. 多数低性能单用户计算机的输入输出由(程序员)安排,I/O系统设计主要解决CPU、主存和I/O设备在(速度)上的巨大差异。
7. 信息在总线上的双向传输有(半)双向和(全)双向两种。
3.参考答案:4 •参考答案:(1) 源操作数是立即数 OxFF ,需在前面加’$' (2) 源操作数是16位,而长度后缀是字节’b',不一致 (3 )目的操作数不能是立即数寻址(4) 操作数位数超过 16位,而长度后缀为 16位的’w' (5) 不能用8位寄存器作为目的操作数地址所在寄存器 (6) 源操作数寄存器与目操作数寄存器长度不一致 (7) 不存在 ESX 寄存器(8) 源操作数地址中缺少变址寄存器 5 •参考答案:机器级表示 dst_type src_type movsbl %al, ( lx) int char movb %al, ( K) char int movl ( lx) int unsigned movswl %ax, ( K) short int movzbl %al, ( lx) unsigned char unsigned movsbl %al, ( lx) unsigned char movl ( lx) int int6 •参考答案:(1) xptr 、yptr 和zptr 对应实参所存放的存储单元地址分别为: R[ebp]+8、R[ebp]+12、R[ebp]+16。
(2) 函数func 的C 语言代码如下:void fun c(i nt *xptr, i nt *yptr, int *zptr){int tempx=*xptr;(1) 后缀 (2) 后缀 (3) 后缀 (4) 后缀 (5) 后缀 (6) 后缀 (7) 后缀(8) 后缀源:基址+比例变址+偏移, 目:寄存器 w , b ,源:寄存器, l ,源:比例变址, b ,源:基址, l ,源:立即数, l ,源:立即数, w ,源:寄存器,l , 目:基址+偏移 目:寄存器 目:寄存器 目栈 目:寄存器目:寄存器源:基址+变址+偏移, 目:寄存器int tempy=*yptr;int tempz=*zptr;*yptr=tempx;*zptr = tempy;*xptr = tempz;}7 •参考答案:(1)R[edx]=x(2)R[edx]=x+y+4(3)R[edx]=x+8*y(4)R[edx]=y+2*x+12(5)R[edx]=4*y(6)R[edx]=x+y8 •参考答案:(1)指令功能为:R[edx] ■R[edx]+M[R[eax]]=0x00000080+M[0x8049300] ,寄存器EDX 中内容改变。
第三章处理机调度与死锁一、单项选择题K操作系统中的作业管理是一种(A )oA.宏观的高级管理B.宏观的低级管理C.系统刚开始加电D.初始化引导完成2、作业调度又称为[1A],它决定将哪些在外存储器上的处于[2D]状态的作业调入主机内存。
系统经作业调度程序选中一个或多个作业后,就为它们分配必要的内存、设备及软资源。
然后控制权就交给了 [3B],由 [3]将它们变为一个或一组[4C],并[5A]。
供选择的答案:[11: A、高级调度B、低级调度C、中级调度D、进程调度[2]: A、就绪B、阻塞C、提交D、后备[3]: A、存储管理模块B、处理机管理模块C、文件管理模块D、设备管理模块[4]: A、指令B、子程序C、进程D、程序段⑸:A、把它们挂到就绪队列上B、为它们分配处理机C、把它们挂到后备队列上D、为它们分配设备)中。
A、处于后备状态的作业存放在(3.A•外存B.内存和B D.扩展内存4、在操作系统中,JCB是指(A )oA.作业控制块B.进程控制块C.文件控制块D.程序控制块5、作业在系统中存在与否的唯一标志是(C)。
A.源程序B.作业说明书C.作业控制块D.目的程序6、按照作业到达的先后次序调度作业,排队等待时间最长的作业被优先调度,这是指(A)调度算法。
A.先来先服务法B.短作业优先法C.时间片轮转法D.优先级法7、在批处理系统中,周转时间是(B )oA.作业运行时间B.作业等待时间和运行时间之和C.作业的相对等待时间D.作业被调度进入内存到运行完毕的时间8、为了对紧急进程或重要进程进行调度,调度算法应采用(B)oA.先来先服务法B.优先级法C.短作业优先法D.时间片轮转法9、操作系统中,(A)负责对进程进行调度。
A.处理机管理B.作业管理C.高级调度管理D.存储和设备管理.10、如果系统中所有作业是同时到达的,则使作业平均周转时间最短的作业调度算法是短作业优先调度算法。
1K系统出现死锁的原因是(C )oA.计算机系统发生了重大故障B.有多个封锁的进程同时存在C.若干进程因竞争资源而无休止地等待着,不释放已占有的资源D.资源数大大少于进程数,或进程同时申请的资源数大大超过资源总数12、设系统中有n个进程并发,共同竞争资源X,且每个进程都需要m个X资源,为使该系统不会发生死锁,资源x至少要有(C)(A) n*m+1 (B) n*m+n (C) n*m+1 -n (D)无法预计 13、选出不正确的两条叙述(BE)OA、死锁是指因相互竞争资源使得系统中有多个阻塞进程的情况;B、若系统中并发运行的进程和资源之间满足互斥条件、占有且申请、不可抢占和环路条件,则可判定系统中发生了死锁;C、在对付死锁的策略中,解除死锁通常都是和检测死锁配套使用;D、产生死锁的原因可归结为竞争资源和进程推进顺序不当;E、在死锁的解决方法中,由于避免死锁采用静态分配资源所以对资源的利用率不高14、死锁预防是保证系统不进入死锁状态的静态策略,其解决方法是破坏产生死锁的四个必要条件之一。
习题3.参考答案:(1)后缀:w,源:基址+比例变址+偏移,目:寄存器(2)后缀:b,源:寄存器,目:基址+偏移(3)后缀:l,源:比例变址,目:寄存器(4)后缀:b,源:基址,目:寄存器(5)后缀:l,源:立即数,目:栈(6)后缀:l,源:立即数,目:寄存器(7)后缀:w,源:寄存器,目:寄存器(8)后缀:l,源:基址+变址+偏移,目:寄存器4.参考答案:(1)源操作数是立即数0xFF,需在前面加‘$’(2)源操作数是16位,而长度后缀是字节‘b’,不一致(3)目的操作数不能是立即数寻址(4)操作数位数超过16位,而长度后缀为16位的‘w’(5)不能用8位寄存器作为目的操作数地址所在寄存器(6)源操作数寄存器与目操作数寄存器长度不一致(7)不存在ESX寄存器(8)源操作数地址中缺少变址寄存器5.参考答案:6.参考答案:(1)xptr、yptr和zptr对应实参所存放的存储单元地址分别为:R[ebp]+8、R[ebp]+12、R[ebp]+16。
(2)函数func的C语言代码如下:void func(int *xptr, int *yptr, int *zptr){int tempx=*xptr;int tempy=*yptr;int tempz=*zptr;*yptr=tempx;*zptr = tempy;*xptr = tempz;}7.参考答案:(1)R[edx]=x(2)R[edx]=x+y+4 (3)R[edx]=x+8*y (4)R[edx]=y+2*x+12 (5)R[edx]=4*y (6)R[edx]=x+y 8.参考答案:(1)指令功能为:R[edx]←R[edx]+M[R[eax]]=0x 00000080+M[0x8049300],寄存器EDX 中内容改变。
改变后的内容为以下运算的结果:00000080H+FFFFFFF0H因此,EDX 中的内容改变为0x00000070。
根据表3.5可知,加法指令会影响OF 、SF 、ZF 和CF 标志。
OF=0,ZF=0,SF=0,CF=1。
(2)指令功能为:R[ecx]←R[ecx]-M[R[eax]+R[ebx]]=0x00000010+M[0x8049400], 寄存器ECX 中内容改变。
改变后的内容为以下运算的结果:00000010H -80000008H因此,ECX 中的内容改为0x80000008。
根据表3.5可知,减法指令会影响OF 、SF 、ZF 和CF 标志。
OF=1,ZF=0,SF=1,CF=1 0=1。
(3)指令功能为:R[b x]←R[bx] or M[R[eax]+R[ecx]*8+4],寄存器BX 中内容改变。
改变后的内容为以下运算的结果:0x0100 or M[0x8049384]=0100H or FF00H因此,BX 中的内容改为0xFF00。
由3.3.3节可知,OR 指令执行后OF=CF=0;因为结果不为0,故ZF=0;因为最高位为1,故SF=1。
(4)test 指令不改变任何通用寄存器,但根据以下“与”操作改变标志:R[dl] and 0x80由3.3.3节可知,TEST 指令执行后OF=CF=0;因为结果不为0,故ZF=0;因为最高位为1,故SF=1。
(5)指令功能为:M[R[eax]+R[edx]]←M[R[eax]+R[edx]]*32,即存储单元0x8049380中的内容改变为以下运算的结果:M[0x8049380]*32=0x908f12a8*32,也即只要将0x908f12a8左移5位即可得到结果。
1001 0000 1000 1111 0001 0010 1010 1000<<5=0001 0001 1110 0010 0101 0101 0000 0000因此,指令执行后,单元0x8049380中的内容改变为0x11e25500。
显然,这个结果是溢出的。
但是,根据表3.5可知,乘法指令不影响标志位,也即并不会使OF=1。
1000 0000 1000 0000 1000 0000and 0000 0001 0000 0000 1111 1111 0000 0000 1111 1111 0000 0000or 0000 0000 0000 0000 0000 0000 0001 0000 0111 1111 1111 1111 1111 1111 1111 10000 1000 0000 0000 0000 0000 0000 0000 1000 + 0000 0000 0000 0000 0000 0000 1000 0000 1111 1111 1111 1111 1111 1111 1111 00001 0000 0000 0000 0000 0000 0000 0111 0000 +(6)指令功能为:R[cx] ←R[cx]-1,即CX 寄存器的内容减一。
因此,指令执行后CX 中的内容从0x0010变为0x000F 。
由表3.5可知,DEC 指令会影响OF 、ZF 、SF ,根据上述运算结果,得到OF=0,ZF=0,SF=0。
9.参考答案:movl 12(%ebp), %ecx //R[ecx ]←M[R[ebp]+12],将y 送ECX sall $8, %ecx //R[ecx ]←R[ecx]<<8,将y*256送ECX movl 8(%ebp), %eax //R[eax ]←M[R[ebp]+8],将x 送EAX movl 20(%ebp), %edx //R[edx ]←M[R[ebp]+20],将k 送EDX imull %edx, %eax //R[eax]←R[eax]*R[edx],将x*k 送EAX movl 16(%ebp), %edx //R[edx ]←M[R[ebp]+16],将z 送EDX andl $65520, %edx //R[edx ]←R[edx] and 65520,将z&0xFFF0送EDX addl %ecx, %edx //R[edx ]←R[edx] + R[ecx],将z&0xFFF0+y*256送EDX subl %edx, %eax //R[eax ]←R[eax]-R[edx],将x*k-(z&0xFFF0+y*256)送EAX 根据以上分析可知,第3行缺失部分为: 3 int v = x*k-(z&0xFFF0+y*256) ; 10.参考答案:从汇编代码的第2行和第4行看,y 应该是占8个字节,R[ebp]+20开始的4个字节为高32位字节,记为y h ;R[ebp]+16开始的4个字节为低32位字节,记为y l 。
根据第4行为无符号数乘法指令,得知y 的数据类型num_type 为unsigned long long 。
movl 12(%ebp), %eax //R[eax ]←M[R[ebp]+12],将x 送EAX movl 20(%ebp), %ecx //R[ecx ]←M[R[ebp]+20],将y h 送ECX imull %eax, %ecx //R[ecx ]←R[ecx]*R[eax],将y h *x 的低32位送ECX mull 16(%ebp) //R[edx]R[eax]←M[R[ebp]+16]*R[eax],将y l *x 送EDX-EAX leal(%ecx, %edx), %edx// R[edx ]←R[ecx]+R[edx],将y l *x 的高32位与y h *x 的低32位相加后送EDXmovl 8(%ebp), %ecx //R[ecx ]←M[R[ebp]+8],将d 送ECX movl %eax, (%ecx) //M[R[ecx]]←R[eax],将x*y 低32位送d 指向的低32位 movl %edx, 4(%ecx) //M[R[ecx]+4]←R[edx],将x*y 高32位送d 指向的高32位 11.参考答案:根据第3.3.4节得知,条件转移指令都采用相对转移方式在段内直接转移,即条件转移指令的转移目标地址为:(PC )+偏移量。
(1)因为je 指令的操作码为01110100,所以机器代码7408H 中的08H 是偏移量,故转移目标地址为:0x804838c+2+0x8=0x8048396。
call 指令中的转移目标地址0x80483b1=0x804838e+5+0x1e ,由此,可以看出,call 指令机器代码中后面的4个字节是偏移量,因IA-32采用小端方式,故偏移量为0000001EH 。
call 指令机器代码共占5个字节,因此,下条指令的地址为当前指令地址0x804838e 加5。
(2)jb 指令中F6H 是偏移量,故其转移目标地址为:0x8048390+2+0xf6=0x8048488。
movl 指令的机器代码有10个字节,前两个字节是操作码等,后面8个字节为两个立即数,因为是小端方式,所以,第一个立即数为0804A800H ,即汇编指令中的目的地址0x804a800,最后4个字节为立即数00000001H ,即汇编指令中的常数0x1。
0000 0000 0001 0000 1111 1111 1111 11111 0000 0000 0000 1111 +(3)jle指令中的7EH为操作码,16H为偏移量,其汇编形式中的0x80492e0是转移目的地址,因此,假定后面的mov指令的地址为x,则x满足以下公式:0x80492e0=x+0x16,故x=0x80492e0-0x16=0x80492ca。
(4)jmp指令中的E9H为操作码,后面4个字节为偏移量,因为是小端方式,故偏移量为FFFFFF00H,即-100H=-256。
后面的sub指令的地址为0x804829b,故jmp指令的转移目标地址为0x804829b+0xffffff00=0x804829b-0x100=0x804819b。
12.参考答案:(1)汇编指令的注解说明如下:1 movb 8(%ebp), %dl //R[dl]←M[R[ebp]+8],将x送DL2 movl 12(%ebp), %eax //R[eax]←M[R[ebp]+12],将p送EAX3 testl %eax, %eax //R[eax] and R[eax],判断p是否为04 je .L1 //若p为0,则转.L1执行5 testb $0x80, %dl //R[dl] and 80H,判断x的第一位是否为06 je .L1 //若x>=0,则转.L1执行7 addb %dl, (%eax) //M[R[eax]]←M[R[eax]]+R[dl],即*p+=x8 .L1:因为C语言if语句中的条件表达式可以对多个条件进行逻辑运算,而汇编代码中一条指令只能进行一种逻辑运算,并且在每条逻辑运算指令生成的标志都是存放在同一个EFLAGS寄存器中,所以,最好在一条逻辑指令后跟一条条件转移指令,把EFLAGS中标志用完,然后再执行另一次逻辑判断并根据条件进行转移的操作。