《汇编语言 基于x86处理器》- 读书笔记 - 第3章-汇编语言基础 - 3.9 复习题和练习

《汇编语言 基于x86处理器》- 读书笔记 - 第3章-汇编语言基础 - 复习题和练习

  • 3.9.1 简答题
    • 1. 举例说明三种不同的指令助记符。
    • 2. 什么是调用规范?如何在汇编语言声明中使用它?
    • 3. 如何在程序中为堆栈预留空间?
    • 4. 说明为什么术语 *汇编器语言* 不太正确。
    • 5. 说明大端序和小端序之间的区别,并在网络上查找这些术语的起源。
    • 6. 为什么在代码中使用符号常量而不是整数常量?
    • 7. 源文件与列表文件的区别是什么?
    • 8. 数据标号与代码标号的区别是什么?
    • 9. (真/假):标识符不能以数字开头。
    • 10. (真/假):十六进制常量可以写为0x3A。
    • 11. (真/假):汇编语言伪指令在运行时执行
    • 12. (真/假):汇编语言伪指令可以写为大写字母和小写字母的任意组合。
    • 13. 说出汇编语言指令的四个基本组成部分。
    • 14. (真/假):MOV是一个指令助记符。
    • 15. (真/假):代码标号后面要跟冒号(:),而数据标号则没有。
    • 16. 给出块注释的例子。
    • 17. 使用数字地址编写指令来访问变量,为什么不是一个好主意?
    • 18. 必须向 ExitProcess 过程传递什么类型的参数?
    • 19. 什么伪指令用来结束子程序?
    • 20. 32位模式下,END伪指令中的标识符有什么用?
    • 21. PROTO 伪指令的作用是什么?
    • 22. (真/假):目标文件由链接器生成。
    • 23. (真/假):列表文件由汇编器生成。
    • 24. (真/假):链接库只有在生成可执行文件之前才加到程序中。
    • 25. 哪个数据伪指令定义32位有符号整数变量?
    • 26. 哪个数据伪指令定义16位有符号整数变量?
    • 27. 哪个数据伪指令定义 64位无符号整数变量?
    • 28. 哪个数据伪指令定义8位有符号整数变量?
    • 29. 哪个数据伪指令定义10字节压缩BCD变量?
  • 3.9.2 算法基础
    • 1. 定义4个符号常量分别表示整数 25 的十进制形式、二进制形式、八进制形式和十六进制形式。
    • 2. 通过实验和错误,找出一个程序是否能有多个代码段和数据段。
    • 3. 编写数据定义,把一个双字按大端序存放在内存中。
    • 4. 试发现用 DWORD 类型定义一个变量时,是否能向其赋予负数值。这说明了汇编器类型检查的什么问题?
    • 5. 编写一个程序,包含两条指令:(1)EAX寄存器加5; (2)EDX寄存器加5。
    • 6. 假设有数值 456789ABh,按小端序列出其字节内容。
    • 7. 声明一个数组,其中包含120个未初始化无符号双字数值
    • 8. 声明一个字节数组,并将其初始化为字母表的前5个字母。
    • 9. 声明一个 32位 有符号整数变量,并初始化为尽可能小的十进制负数。(提示:参阅第1章的整数范围。)
    • 10. 声明一个 16位无符号整数变量 wArray,使其具有 3 个初始值。
    • 11. 声明一个字符串变量,包含你最喜欢颜色的名字,并将其初始化为空字节结束的字符串。
    • 12. 声明一个未初始化数组 dArray,包含 50个有符号双字。
    • 13. 声明一个字符串变量,包含单词 “TEST” 并重复500次。
    • 14. 声明一个数组 bArray,包含 20 个无符号字节,并将其所有元素都初始化为0。
    • 15. 写出下述双字变量在内存中的字节序列(从最低字节到最高字节):

3.9.1 简答题

1. 举例说明三种不同的指令助记符。

解:

mov al,10
add al,10
sub al,5

2. 什么是调用规范?如何在汇编语言声明中使用它?

解:调用规范是:关于函数调用的一系列规则和约定。包括:参数传递、堆栈使用、寄存器使用等方面。

.model flat,stdcall		; 指定存内存模式为 flat 子程序调用规范用 stdcall

stdcall(标准调用)常用于Windows API中一些由C语言编写的函数。

3. 如何在程序中为堆栈预留空间?

解:

.stack 4096							; 声明栈空间4096字节

4. 说明为什么术语 汇编器语言 不太正确。

解:汇编器是用于将汇编代码转换为机器代码的工具,而汇编语言才是指这种特定的低级编程语言。

5. 说明大端序和小端序之间的区别,并在网络上查找这些术语的起源。

解:
大端序数据高位字节存储在低地址低位字节存储在高地址
小端序数据低位字节存储在低地址高位字节存储在高地址

关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因是因为吃鸡蛋的方式不同:Lilliput的皇帝认为应该从大头吃起,而Blefuscu的皇帝则认为应该从小头吃起。这个其实讽刺当时英国和法国之间持续的冲突。Danny Cohen一位网络协议的开创者,第一次使用这两个术语指代字节顺序,后来就被大家广泛接受。

6. 为什么在代码中使用符号常量而不是整数常量?

解: 见名知意,且便于批量修改。

7. 源文件与列表文件的区别是什么?

解: 源文件 存汇编源码。
列表文件 是源代码的增强版副本,可能包含结构、联合、过程、参数及局部变量的详细信息。有助于调试和优化代码。

8. 数据标号与代码标号的区别是什么?

解: 数据标号通常用于标识数据,主要与数据的存储引用相关。
代码标号 标识代码的特定位置指令序列,用于控制程序的流程跳转分支

9. (真/假):标识符不能以数字开头。

解:
首字符必须是字母(A-Z, a-z)、下划线_、@、? 或 $,后续字符可包含数字。

10. (真/假):十六进制常量可以写为0x3A。

解: 假:会报错 error A2206: missing operator in expression

11. (真/假):汇编语言伪指令在运行时执行

解: 假:伪指令作用于汇编阶段

12. (真/假):汇编语言伪指令可以写为大写字母和小写字母的任意组合。

解:

13. 说出汇编语言指令的四个基本组成部分。

解: [标号:] 指令助记符 [操作数][;注释]

14. (真/假):MOV是一个指令助记符。

解:

15. (真/假):代码标号后面要跟冒号(😃,而数据标号则没有。

解:

16. 给出块注释的例子。

解:

COMMENT !我是一行注释。我是第二行注释。
!

17. 使用数字地址编写指令来访问变量,为什么不是一个好主意?

解: 无法见名知意,如果多处使用,后期修改也不便。

18. 必须向 ExitProcess 过程传递什么类型的参数?

解: dword 32位的无符号整数

19. 什么伪指令用来结束子程序?

解: end

20. 32位模式下,END伪指令中的标识符有什么用?

解: 定义程序入口点

21. PROTO 伪指令的作用是什么?

解: 声明函数原型

22. (真/假):目标文件由链接器生成。

解:

23. (真/假):列表文件由汇编器生成。

解:

24. (真/假):链接库只有在生成可执行文件之前才加到程序中。

解:

25. 哪个数据伪指令定义32位有符号整数变量?

解: SDWORD

26. 哪个数据伪指令定义16位有符号整数变量?

解: SWORD

27. 哪个数据伪指令定义 64位无符号整数变量?

解: QWORD

28. 哪个数据伪指令定义8位有符号整数变量?

解: SBYTE

29. 哪个数据伪指令定义10字节压缩BCD变量?

解: REAL10

3.9.2 算法基础

1. 定义4个符号常量分别表示整数 25 的十进制形式、二进制形式、八进制形式和十六进制形式。

解:

dec25 = 25
bin25 = 00011001b
oct25 = 31q
hex25 = 19h

2. 通过实验和错误,找出一个程序是否能有多个代码段和数据段。

解:
在这里插入图片描述

3. 编写数据定义,把一个双字按大端序存放在内存中。

解:

.386
.model flat,stdcall
.stack 4096ExitProcess proto,dwExitCode:dword.data
num  DWORD  12345678h
result DWORD  0.code
main PROCmov edi,0mov ecx,4
s:mov al, BYTE PTR [num + ecx - 1]mov BYTE PTR [result + edi], alinc ediloop sINVOKE ExitProcess,0
main ENDP
END main

在这里插入图片描述

4. 试发现用 DWORD 类型定义一个变量时,是否能向其赋予负数值。这说明了汇编器类型检查的什么问题?

解: 汇编器没有报错,可见是不检查符号的。正常的运算也没问题。
但如果后续我们又把它一个无符号数来使用,可能就会出现问题。比如:显示、转换(因为有符号和无符号的处理方式不同)会得到一些莫名其妙的结果。

.386
.model flat,stdcall
.stack 4096ExitProcess proto,dwExitCode:dword.data
num  DWORD -1.code
main PROCmov eax,5add eax,numadd eax,numadd eax,numadd eax,numadd eax,numINVOKE ExitProcess,0
main ENDP
END main

5. 编写一个程序,包含两条指令:(1)EAX寄存器加5; (2)EDX寄存器加5。

生成列表文件并检查由汇编器生成的机器代码。发现这两条指令的不同之处了吗?如果有,是什么?
解:机器码不同

 00000000  83 C0 05		    add eax,500000003  83 C3 05		    add ebx,500000006  83 C1 05		    add ecx,500000009  83 C2 05			add edx,5

6. 假设有数值 456789ABh,按小端序列出其字节内容。

解:AB 89 67 45

7. 声明一个数组,其中包含120个未初始化无符号双字数值

解:

.data
myArray DWORD 120 DUP (?)

在这里插入图片描述

8. 声明一个字节数组,并将其初始化为字母表的前5个字母。

解:

.data
charArray byte "abcde"

在这里插入图片描述

9. 声明一个 32位 有符号整数变量,并初始化为尽可能小的十进制负数。(提示:参阅第1章的整数范围。)

解:

nums32 sdword -2147483648	; -(2^31)

10. 声明一个 16位无符号整数变量 wArray,使其具有 3 个初始值。

解:

wArray word 1234h, 5678h, 9abch

在这里插入图片描述

11. 声明一个字符串变量,包含你最喜欢颜色的名字,并将其初始化为空字节结束的字符串。

解:

color byte 'yellow'

12. 声明一个未初始化数组 dArray,包含 50个有符号双字。

解:

dArray SDWORD 50 DUP (?)

13. 声明一个字符串变量,包含单词 “TEST” 并重复500次。

解:

mystr byte 500 DUP ('TEST')

14. 声明一个数组 bArray,包含 20 个无符号字节,并将其所有元素都初始化为0。

解:

bArray byte 20 DUP (0)

15. 写出下述双字变量在内存中的字节序列(从最低字节到最高字节):

va11 DWORD 87654321h
解: 21 43 65 87

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

汽车电控诊断DTC故障码

上回说的即使一张表了解的常用的诊断服务也有26个之多。但其实和诊断管理最密切相关的,还是车辆故障码相关的服务,也叫DTC(Diagnostic Trouble Code)。车辆发生故障时,故障会分类和编码被控制器存储下来,被…

应急靶场(11):【玄机】日志分析-apache日志分析

题目 提交当天访问次数最多的IP,即黑客IP黑客使用的浏览器指纹是什么,提交指纹的md5查看index.php页面被访问的次数,提交次数查看黑客IP访问了多少次,提交次数查看2023年8月03日8时这一个小时内有多少IP访问,提交次数 …

【区块链+绿色低碳】基于区块链的双碳能源纳管平台 | FISCO BCOS应用案例

在双碳战略的指导下,南京区块链产业应用协会牵头研发的双碳能源纳管平台,依托区块链、人工智能、云计算、 物联网、大数据、工业互联网与边缘计算等技术,对绿电追溯、需求侧响应、能源微网、源网荷储、隔墙用电、 碳排放权认证、额度计量、预…

自动化测试框架:DrissionPage

一、工具概述 DrissionPage 是一个基于 python 的网页自动化工具。它既能控制浏览器,也能收发数据包,还能把两者合而为一。可兼顾浏览器自动化的便利性和 requests 的高效率。它功能强大,内置无数人性化设计和便捷功能。它的语法简洁而优雅&a…

nginx出现Refused to apply inline style because it violates

Content Security Policy的错误。根据错误提示,nginx拒绝应用内联样式,因为它违反了内容安全策略(Content Security Policy)。内容安全策略是一种浏览器机制,用于防止潜在的安全漏洞,通过限制从外部来源加载…

资金管理平台 -SAP创建凭证测试程序及增强!

文章目录 主要程序创建程序程序 代码解析变量定义抬头和项目初始值表头赋值调用BAPI其他的子例程 增强部分LFACIF5D程序FI_DOCUMENT_CHECK完整程序 BADI增强 主要程序 创建程序 程序 &---------------------------------------------------------------------* *& Re…

【多线程】补充内容 {线程池;线程安全的单例模式;STL容器、智能指针的线程安全;其他常见的各种锁:自旋锁、读写锁}

一、线程池 1.1 概念 线程池一种线程使用模式: 线程过多会带来调度开销,进而影响缓存局部性和整体性能。 而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务:(线程池的优点) 这避免了在处…

git的配置使用

第三周 Tursday 早 git日志的安装使用 [rootweb ~]# yum -y install git.x86_64 //安装软件包 [rootweb ~]# rpm -ql git //查看git的包 ​ [rootweb ~]# mkdir /yy000 //创建新目录 [rootweb ~]# cd /yy000/ [rootweb yy000]# git init //将当前目录做为仓库…

OpenAI开放GPT-4o语音模式测试;黄仁勋与扎克伯格谈AI未来

🦉 AI新闻 🚀 OpenAI开放GPT-4o语音模式测试 摘要:7月30日,OpenAI宣布向部分ChatGPT Plus用户开放GPT-4o语音模式(Alpha版本),并计划秋季推广至所有订阅用户。GPT-4o具备快速反应、近乎无缝对…

【信创】samba的命令行使用 _ 统信 _ 麒麟 _ 中科方德

原文链接:【信创】samba的命令行使用 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇关于在信创终端操作系统上使用Samba命令操作的文章。Samba是一种用于实现文件和打印共享的免费软件,它允许不同操作系统&#xf…

基于springboot+vue+uniapp的校园快递平台小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

Android经典面试题之实战经验分享:如何简单实现App的前后台监听判断

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在Android中判断一个应用是否处于前台或后台,可以使用ActivityLifecycleCallbacks 和 ProcessLifecycleOwner。在Kotlin中&#xff…

Labtoolstcl 44-27] No hardware targets exist on the server [localhost:3121]

发现问题 换了台电脑重新装了vivado17.2版本的软件,编译好程序后准备烧程序,板子上电以及连接线都检查过了没问题,但是就是检测不到芯片; 过程 一、网上查说是驱动没装好,按照其他博主的方法运行了digilent目录下的…

【CAN通讯系列6】 CAN总线定义

在前面两篇文章: 【CAN通讯系列3】如何学习CAN通讯? 【CAN通讯系列4】CAN通讯如何传递信号? 我们已经解决了一个控制器的多个信号通过怎样的形式传递给另一个控制器,即通过CAN数据帧,包含报文ID,数据长度和…

适合新手小白入手前先看的开放式耳机选购指南

对于新手小白来说,选择一款开放式耳机其实一般都会不知道从哪个方面考虑入手。 所以我可以与你分享一些选购经验,让你更能知道需要什么样的开放式耳机。 确定需求: 明确你购买开放式耳机的主要用途,比如听音乐、看电影、游戏或…

书生大模型训练营 - 练习一

最近想了解一下大模型,查看了《2024大模型典型示范应用》文档,发现有公司使用的是书生大模型,正好发现他们有训练营,此文章记录的大模型作业。 一、各种链接 书生大模型官网:https://internlm.intern-ai.org.cn/ 进训…

实验2-5-1 求排列数

本题要求实现一个计算阶乘的简单函数&#xff0c;使得可以利用该函数&#xff0c;根据公式 算出从n个不同元素中取出m个元素&#xff08;0<m≤n&#xff09;的排列数。 函数接口定义&#xff1a; double fact( int n );其中n是用户传入的参数&#xff0c;函数返回n的阶乘。…

什么是跳板机

1、什么是跳板机 跳板机&#xff08;Jump Server&#xff09;是一种网络安全设备&#xff0c;用于在不直接连接到目标服务器的情况下&#xff0c;提供一个中间的访问点。它允许管理员或用户通过一个受控的安全通道访问内部网络中的其他服务器、设备或资源。 跳板机的主要功能…

芋道源码yudao-cloud 二开笔记(Editor富文本本地图片上传报错问题)

&#xff1a; 于是找到富文本的组件代码Editor.vue&#xff0c;检查一下上传的接口地址和token有没有传&#xff0c;如下图&#xff1a; 都没有问题&#xff0c;但还是报错&#xff0c;所以试试自定义上传的方法&#xff1a; // 导入上传文件的接口 import * as FileApi from …

一步步揭秘:浏览器输入URL后的那些事儿

Hello大家好,我是小米,一个热爱分享技术的IT达人。今天我们一起来聊聊一个大家每天都会用到但可能不太了解的过程:浏览器输入URL之后发生了什么。这是一个从用户输入到浏览器显示页面的完整过程,涉及到很多底层的网络基础知识。今天我们就一起来探究这个神秘的过程! DNS解…