《汇编语言:基于X86处理器》第12章 复习题和练习

本篇记录了《汇编语言:基于X86处理器》第12章 复习题和练习的笔记。

12.6复习题和练习

12.6.1 简答题

1.假设有二进制浮点数1101.01101,如何将其表示为十进制分数之和?

答:1101.01101=(1x2^{3})+(1x2^{2})+(0x2^{1})+(1x2^{0})+(0x2^{-1})+(1x2^{-2})+(1x2^{-3})+(1x2^{-4})+(1x2^{-5}) = 13.40625

2.为什么十进制数0.2 不能用有限位数精确表示?

答:用有限位数表示的任何浮点数格式都无法表示完整连续的实数。 原因在于二进制和十进制小数转换时的数学限制

3.假设有二进制数 11011.01011,则其规格化数值为多少?

答:11011.01011 = 1.101101011×2^{4}

4.假设有二进制数0000100111101.1则其规格化数值为多少?

答:0000100111101.1 = 1.001111011×2^{8}

5.NaN 有哪两种类型?

答:NaN的两种类型为:quiet NaN能够通过大多数算术运行来传递,而不引 起异常。signaling NaN则被用于产生一个浮点无效操作异常。

6.FLD指令允许的最大数据类型是什么,它包含了多少位?

答:FLD指令允许的最大数据类型是REAL10,它包含80位。

7.FSTP 指令与FST指令有哪些不同?

答:FSTP指令与FST指令都是将浮点操作数从FPU栈顶复制到内存。不同点是FST复制完后不弹出堆栈,而FSTP保存到内存后将ST(0)弹出堆栈。

8.哪条指令能修改浮点数的符号?

答:FCHS(修改符号)指令将ST(0)中浮点数的符号取反。

9.FADD指令允许使用哪些类型的操作数?

答:m32fp,m64fp,和浮点寄存器操作数例如ST(0),ST(i), i是寄存器编号。

10.FISUB 指令与FSUB 指令有哪些不同?

答:FISUB和FSUB指令都是从目标操作数减去源操作数,FISUB是整数减法,先把源操作数转换为双精度浮点数,再从ST(0)中减去该操作数。

11.P6系列之前的处理器中,哪条指令可以比较两个浮点数?

答:FCOM指令可以比较两个浮点数。

12.哪条指令实现将整数操作数加载到ST(0)?

答:FILD指令实现将整数操作数加载到ST(0).

13.FPU控制字中的哪个字段可以修改处理器的舍入模式?

答:FPU控制字中的RC(位10和11)字段可以修改处理器的舍入模式。

12.6.2 算法基础

1.请写出二进制数+1110.011的IEEE 单精度编码。

答:+1110.011 = 1.110011×2^{3} 符号位:0,偏移阶码:127+3 = 130 = ‭10000010‬b,小数部分23位,后面用0补齐11001100000000000000000,所以完整数的单精度编码为0 10000010 11001100000000000000000

2.将分数 5/8 转换为二进制实数。

答:5/8 = 1/2+1/8 = 1×2^{-1}+0×2^{-2}+1×2^{-3} = 0.101

3.将分数17/32 转换为二进制实数。

答:17/32 = 1/2+1/32=1×2^{-1}+0×2^{-2}+0×2^{-3}+0×2^{-4}+1×2^{-5}=0.10001

4.将十进制数+10.75 转换为IEEE 单精度实数。

答:+10.75 = 10+1/2+1/4 = 1010.11b规格化为1.01011×2^{3}=》符号位:0,偏移阶码:127+3 = 130 = ‭10000010‬b,小数部分23位,后面用0补齐01011000000000000000000,所以完整数的单精度编码为0 10000010 01011000000000000000000

5.将十进制数 -76.0625 转换为 IEEE 单精度实数。

答:-76.0625 符号位为1,整数部分76转成二进制为01001100,小数部分.0625转成二进制

0.0625 × 2 = 0.125 → 0
0.125 × 2 = 0.25 → 0
0.25 × 2 = 0.5 → 0
0.5 × 2 = 1.0 → 1

从上往下读:0001

合并为01001100.0001,规格化为1.0011000001×2^{6},偏移阶码:127+6 = 133转成二进制为10000101b,符号位为1,所以组合成单精度实数为1 10000101 00110000010000000000000

6.编写含有两条指令的序列,将 FPU 状态标志送人 EFLAGS 寄存器。

答:fstsw ax ;将 FPU 的状态字(Status Word)存储到 AX 寄存器中。

;FPU 状态字包含条件码标志(C0-C3),这些标志对应于 EFLAGS 寄存器中的某些标志位。

sahf ;指令将 AH 寄存器的内容加载到 EFLAGS 的低字节

(具体对应关系如下):

    • FPU 的 C0 对应 EFLAGS 的 CF(进位标志)
    • FPU 的 C2 对应 EFLAGS 的 PF(奇偶标志)
    • FPU 的 C3 对应 EFLAGS 的 ZF(零标志)

7.现有一个精确结果1.010101101,使用FPU默认舍入模式将该值舍人为8位有效数字。

答:FPU默认舍入模式是舍入到最接近的偶数。因此1.010101101的舍入结果为1.01010111

8.现有一个精确结果-1.010101101使用FPU默认舍入模式将该值舍人为8位有效数字。

答:FPU默认舍入模式是舍入到最接近的偶数。因此-1.010101101的舍入结果为-1.01010110

9.编写指令序列实现如下 C++代码:

double B = 7.8;
double M = 3.6;
double N = 7.1;
double P = -M * (N + B);
;12.2.9_1.asm         12.2.9 代码示例
;9.编写指令序列实现如下 C++代码:INCLUDE Irvine32.inc.data
B REAL8 7.8
M REAL8 3.6
N REAL8 7.1
P REAL8 ?.code
main PROCmov esi, OFFSET BFLD M				;ST(0) = MFLD N				;ST(0) = N, ST(1) = MFADD B				;ST(0)+B = 14.9FMUL				;ST(1)*ST(0) = 53.64 存放在ST(1),然后ST(0)出栈FCHS				;修改ST(0)的符号 -53.64FSTP P				;将 ST(0)保存到 PINVOKE ExitProcess, 0
main ENDP
END main

运行调试:

10.编写指令序列实现如下C++代码:

int B = 7;
double N = 7.1;
double P = sqrt(N) + B;
;12.6.2_10.asm         12.6.2 算法基础
;10.编写指令序列实现如下C++代码:INCLUDE Irvine32.inc.data
B DWORD 7
N REAL8 7.1
P REAL8 ?.code
main PROCmov esi, OFFSET Bfld N				;ST(0) = Nfsqrt				;ST(0) = sqrt(N)fild B				;ST(0) = B, ST(1) = sqrt(N)FADD 				;ST(0)+ST(1),结果存在ST(1),然后ST(0)弹出堆栈FSTP P				;将 ST(0)保存到 PINVOKE ExitProcess, 0
main ENDP
END main

运行调试:

11.给出如下MOV指令的操作码:

.data
myByte BYTE ?
myWord WORD ?
.code
mov ax, @data
mov ds, ax
mov es, ax				;a.8E
mov dl, bl				;b.8A
mov bl, [di]			;c.8A
mov ax, [si+2]			;d.8B
mov al, myByte			;e.A0
mov dx, myWord			;f.8B

答:a为8E, b为8A,c为8A,d为8B,e为A0,f为8B

12.给出如下 MOV 指令的 Mod R/M 字节:

.data
array WORD 5 DUP (?)
.code
mov ax, @data
mov ds, ax
mov BYTE PTR array, 5				;a. 
mov dx, [bp + 5]					;b. 
mov [di], bx						;c. 
mov [di + 2], dx					;d. 
mov array[si + 2], ax			    ;e. 
mov array[bx + di], ax				;f. 

答:

13.手动汇编如下指令,并写出每条有标记指令的十六进制机器码字节序列。假设 vall 起始地址的偏移量为 0。使用 16 位数值时,字节序列必须按小端顺序呈现:

.data
val1 BYTE 5
val2 WORD 256.code
main PROCmov ax, 3h							;@data  B8 03 00mov ds, ax							;a. 8E D8 mov al, val1						;b. B0 05									mov cx, val2						;c. B9 00 01mov dx, offset val1			        ;d. BA 00 00mov dl, 2							;e. B2 02mov bx, 1000h						;f. BB 00 10

debug验证, VS2019编译不了16位的汇编。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92687.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ApacheCon Asia 2025 中国开源年度报告:Apache Doris 国内第一

上周刚落下帷幕的 ApacheCon Asia 2025 中,一个数据让所有人都为之震撼:全球 Apache 基金会项目 OpenRank 排行榜中,Apache Doris 位居第二,在中国 Apache 项目中更是稳居第一。 这个排名意味着什么?在 Apache 基金会管…

Pytest中实现自动生成测试用例脚本代码

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快在Python的测试框架中,我们通常会针对某个系统进行测试用例的维护,在对庞大系统进行用例维护时,往往会发现很多测试用例是差不多…

一周学会Matplotlib3 Python 数据可视化-标注 (Annotations)

锋哥原创的Matplotlib3 Python数据可视化视频教程: 2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程讲解利用python进行数据可视化 科研绘图-Matplotlib,学习Matplotlib图形参数基本设置&…

安全合规1--实验:ARP欺骗、mac洪水攻击、ICMP攻击、TCP SYN Flood攻击

一、实验环境 (思科的云实验平台)攻击机:Kali Linux(IP:192.168.234.128,MAC:00:00:29:35:64:EC)目标1:网关(IP:192.168.234.2,MAC:00:50:56:ED:D…

Linux下GCC的C++实现Hive到Snowflake数据迁移

程序结构 ├── main.cpp ├── config.json ├── hive_export/ ├── parquet_data/ ├── sql_scripts/ └── logs/核心代码实现 (main.cpp) #include <iostream> #include <fstream> #include <vector> #include <thread> #include <mut…

drippingblues靶机教程

一、信息搜集首先将其在VirtualBOX中安装&#xff0c;并将kali与靶机都设置为桥接模式紧接着我们扫描IP&#xff0c;来发现靶机地址&#xff0c;经过搜集&#xff0c;发现IP是192.168.1.9&#xff0c;我们去访问一下紧接着我们扫一下开放了哪些端口。发现开放了21、22以及80端口…

39.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--调整发布脚本

这篇文章&#xff0c;我们要调整发布脚本。之所以要调整发布脚本&#xff0c;是因为现在我们的项目有三个环境&#xff1a;本地&#xff08;Local&#xff09;、开发&#xff08;Development&#xff09;、生产&#xff08;Production&#xff09;。Tip&#xff1a;我们的项目虽…

商品、股指及ETF期权五档盘口Tick级与分钟级历史行情数据多维解析

在金融数据分析领域&#xff0c;本地CSV文件是存储高频与低频数据的常用载体。本文以期权市场数据为例&#xff0c;探讨如何基于CSV格式处理分钟级行情、高频Tick数据、日频数据、逐笔委托记录、五档订单簿及历史行情数据&#xff0c;并提供专业的技术实现方案。以下将从数据预…

云端软件工程智能代理:任务委托与自动化实践全解

云端软件工程智能代理&#xff1a;任务委托与自动化实践全解 背景与未来趋势 随着软件工程复杂度不断提升&#xff0c;开发者对自动化工具的依赖也日益增强。我们正进入一个“人机协作”的新时代&#xff0c;开发者可以专注于核心创新&#xff0c;将重复性、繁琐的任务委托给智…

making stb style lib(1): do color print in console

col.h: see origin repo // origin repo: https://github.com/resyfer/libcol #ifndef _COL_HOL_H_ #define _COL_HOL_H_#include <stdlib.h> #include <stdio.h> #include <stdbool.h> #include <string.h> #include <math.h> // 新增&#xf…

llm本地部署+web访问+交互

要实现基于llm的web访问和交互&#xff0c;需支持对llm的访问和对网络搜索的调用。 这里使用ollama llm兼容openai sdk访问&#xff1b;使用proxyless-llm-websearch模拟网络搜索。 1 ollama本地部署 假设ollama已经部署&#xff0c;具体过程参考 在mac m1基于ollama运行dee…

自动驾驶数据闭环

自动驾驶的数据闭环是支撑算法持续迭代的核心机制&#xff0c;其本质是通过“数据采集-处理-训练-部署-反馈”的循环&#xff0c;不断优化模型对复杂场景的适应性。由于自动驾驶数据量极大&#xff08;单车日均TB级&#xff09;、场景多样&#xff08;从常规道路到极端边缘场景…

二十、MySQL-DQL-条件查询

DQL-条件查询代码&#xff1a; DQL-条件查询 -- 1.查询 姓名 为 杨逍 的员工 select * from tb_emp where name 杨逍; -- 2.查询 id小于等于5 的员工信息 select * from tb_emp where id < 5; -- 3.查询 没有分配职位 的员工信息 select * from tb_emp where job is null; …

Mac下安装Conda虚拟环境管理器

Conda 是一个开源的包、环境管理器&#xff0c;可以用于在同一个机器上创建不同的虚拟环境&#xff0c;安装不同Python 版本的软件包及其依赖&#xff0c;并能够在不同的虚拟环境之间切换 Conda常通过安装Anaconda/Miniconda来进行使用。一般使用Miniconda就够了。Miniconda 是…

Android 中解决 Button 按钮背景色设置无效的问题

1、问题描述 在布局文件中有两个 Button 按钮&#xff0c;为每个按钮设置不同的背景色&#xff0c;但是显示出来的效果都是紫色的&#xff0c;跟设置的颜色不同&#xff0c;布局文件如下所示&#xff1a;<Buttonandroid:id"id/button_cancel"android:layout_width…

云服务器--阿里云OSS(2)【Springboot使用阿里云OSS】

&#x1f4d2; 阿里云 OSS Spring Boot 异步任务&#xff08;直接存 OSS&#xff09; 1. 项目结构 src/main/java/com/example/demo├── controller│ └── UploadController.java // 接收上传请求├── service│ ├── AsyncUploadService.java // 异步上传…

get请求中文字符参数乱码问题

第一种方法 服务器默认的传参编码格式是ISO8859-1,所以前端直接原样字符串请求&#xff0c;到后端解析一下就得到正确字符 String fileName request.getParameter("fileName"); fileName new String(fileName.getBytes("ISO8859-1"),"UTF-8");…

C语言(10)——结构体、联合体、枚举

关于C语言零基础学习知识&#xff0c;小编有话说&#xff0c;各位看官敬请入下面的专栏世界&#xff1a;打怪升级之路——C语言之路_ankleless的博客-CSDN博客 Hi&#xff01;冒险者&#x1f60e;&#xff0c;欢迎闯入 C 语言的奇幻异世界&#x1f30c;&#xff01; 我是 Ankle…

海康威视摄像头实时推流到阿里云公网服务器(Windows + FFmpeg + nginx-rtmp)

海康威视摄像头实时推流到阿里云公网服务器&#xff08;Windows FFmpeg nginx-rtmp1. 步骤总览2. 阿里云 ECS&#xff08;Linux&#xff09;配置2.1 开放端口2.2 安装 nginx-rtmp3. Windows 电脑端配置3.1 安装 FFmpeg3.1.1 官网/镜像下载&#xff1a;3.1.2 解压后将 bin 目录…

基础网络网路层——IPV4地址

在IP网络上&#xff0c;如果用户要将一台计算机连接到Internet上&#xff0c;就需要向因特网服务提供方ISP&#xff08;Internet Service Provider&#xff09;申请一个IP地址。IP地址是在计算机网络中被用来唯一标识一台设备的一组数字。IPv4地址由32位二进制数值组成&#xf…