当前位置: 首页 > news >正文

Intel汇编语言程序设计(第7版)第四章编程练习题答案

1. 大端序转成小端序

.386
.model flat, stdcall
option casemap:none include windows.inc 
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib.stack 4096.data 
bigEndian BYTE 12h, 34h, 56h, 78h
littleEndian DWORD ?Fmt BYTE "0x%08X", 0
Caption BYTE "Caption", 0
Buf BYTE 64 DUP(0)
.code start:mov eax, DWORD PTR [bigEndian]mov littleEndian, eaxinvoke wsprintf, OFFSET Buf, OFFSET Fmt, [littleEndian] invoke MessageBox, NULL, OFFSET Buf,  OFFSET Caption, MB_OKinvoke ExitProcess, 0ret
end start

2. 交换数组元素对

.386
.model flat, stdcall
option casemap:none include windows.inc 
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include msvcrt.inc
includelib msvcrt.lib.stack 4096.data 
Array 		BYTE 		11h, 22h, 33h, 44h, 55h, 66h, 77h, 88h
ArrayLen 		DWORD 		($ - Array) / SIZEOF WORD
TmpBuf		BYTE			0Pause BYTE "pause", 0
Fmt BYTE "0x%02X ", 0
Buf BYTE 64 DUP(0)
.code start:mov ecx, ArrayLenxor ebx, ebx 
Exchange:mov al, [Array + ebx]mov TmpBuf, al				; 保存第1个数inc ebx mov al, [Array + ebx]		; 保存第2个数dec ebxmov [Array + ebx], al		; 赋值第1个数inc ebx mov al, TmpBuf		mov [Array + ebx], al		; 赋值第2个数inc ebxloop Exchangexor ebx, ebx
Print:mov al, [Array + ebx]invoke crt_printf, OFFSET Fmt, al inc ebxcmp ebx, LENGTHOF Arrayjz Endingjmp PrintEnding:invoke crt_system, OFFSET Pauseinvoke ExitProcess, 0
end start

3. 数组元素间隔之和

.386
.model flat, stdcall
option casemap:none include windows.inc 
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include msvcrt.inc
includelib msvcrt.lib.stack 4096.data 
Array 		DWORD 		0, 2, 5, 9, 10
ArrayLen 		DWORD 		($ - Array) / SIZEOF DWORD
TmpBuf		DWORD			0Pause BYTE "pause", 0
Fmt BYTE "%d", 0
Buf BYTE 64 DUP(0)
.code start:mov ecx, ArrayLenxor edx, edxmov ebx, TYPE Array
SUMTWO:mov eax, [Array + ebx]mov TmpBuf, eaxsub ebx, TYPE Arraymov eax, [Array + ebx]sub TmpBuf, eaxadd edx, TmpBufadd ebx, TYPE Arrayloop SUMTWOinvoke crt_printf, OFFSET Fmt, edx
Ending:invoke crt_system, OFFSET Pauseinvoke ExitProcess, 0
end start

4. 将字数组复制到双字数组

.386
.model flat, stdcall
option casemap:none include windows.inc 
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include msvcrt.inc
includelib msvcrt.lib.stack 4096.data 
wArray 		WORD		5, 9, 12, 31, 46, 68
ArrayLen 		DWORD 		($ - wArray) / SIZEOF WORD
dwArray		DWORD		32 DUP(0)
TmpBuf		DWORD			0Pause BYTE "pause", 0
Fmt BYTE "%d ", 0
Buf BYTE 64 DUP(0)
.code start:mov ecx, ArrayLenxor eax, eaxxor esi, esi
L0:movzx eax, WORD PTR [wArray + esi * TYPE wArray]mov [dwArray + esi * TYPE dwArray], eax  inc esiloop L0xor edi, edi
L1:invoke crt_printf, OFFSET Fmt, DWORD PTR [dwArray + edi * TYPE dwArray]inc edicmp edi, ArrayLenjz Endingjmp L1Ending:invoke crt_system, OFFSET Pauseinvoke ExitProcess, 0
end start

5. 斐波那契数列

.386
.model flat, stdcall
option casemap:none include windows.inc 
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include msvcrt.inc
includelib msvcrt.libFIBNUM = 7.stack 4096.data 
Fib0		DWORD 0
Fib1		DWORD 1
dwArray	DWORD 64 DUP(0)Pause BYTE "pause", 0
Fmt BYTE "%d ", 0.code start:mov eax, Fib1mov ecx, FIBNUMxor edi, edi
L0:mov [dwArray + edi * TYPE dwArray], eaxadd eax, Fib0mov ebx, Fib1mov Fib0, ebxmov Fib1, eaxinc ediloop L0xor edi, edi
L1:invoke crt_printf, OFFSET Fmt, DWORD PTR [dwArray + edi * TYPE dwArray]inc edicmp edi, FIBNUMjz Endingjmp L1Ending:invoke crt_system, OFFSET Pauseinvoke ExitProcess, 0
end start

6. 数组反向

.386
.model flat, stdcall
option casemap:none include windows.inc 
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include msvcrt.inc
includelib msvcrt.lib.stack 4096.data 
dwArray 	DWORD 15, 21, 34, 49, 52, 98
ArrayLen  DWORD LENGTHOF dwArray - 1Pause BYTE "pause", 0
Fmt BYTE "%d ", 0.code start:mov edi, ArrayLenxor esi, esi mov ecx, 3
L0:mov eax, [dwArray + edi * SIZEOF DWORD]xchg [dwArray + esi * SIZEOF DWORD], eaxxchg [dwArray + edi * SIZEOF DWORD], eaxdec ediinc esi loop L0L3:xor edi, edi
L1:invoke crt_printf, OFFSET Fmt, DWORD PTR [dwArray + edi * TYPE dwArray]inc edicmp edi, LENGTHOF dwArrayjz Endingjmp L1Ending:invoke crt_system, OFFSET Pauseinvoke ExitProcess, 0
end start

7. 将字符串复制为反向

.386
.model flat, stdcall
option casemap:none include windows.inc 
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include msvcrt.inc
includelib msvcrt.lib.stack 4096.data 
source BYTE "This is the source string", 0
srcLen DWORD ($ - source) / TYPE source  - 2
target BYTE SIZEOF source DUP('$')Pause BYTE "pause", 0
Fmt BYTE "%c", 0.code start:mov ecx, srcLenxor edi, edi
L0:mov al, [source + ecx]mov [target + edi], alinc ediloop L0mov al, [source + ecx]mov [target + edi], alinc edimov BYTE PTR [target + edi], 0
L3:xor edi, edi
L1:invoke crt_printf, OFFSET Fmt, BYTE PTR [target + edi * TYPE target]inc edicmp edi, LENGTHOF targetjz Endingjmp L1Ending:invoke crt_system, OFFSET Pauseinvoke ExitProcess, 0
end start

8. 数组元素位移

.386
.model flat, stdcall
option casemap:none include windows.inc 
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include msvcrt.inc
includelib msvcrt.lib.stack 4096.data 
dwArray 	DWORD 10, 20, 30, 40, 50, 60
AryLen	DWORD LENGTHOF dwArray - 1TmpCh	DWORD  0Pause BYTE "pause", 0
Fmt BYTE "%d ", 0.code start:mov ecx, AryLenxor edi, edi; 保存最后一个数字mov ebx, [dwArray + TYPE dwArray * ecx]mov TmpCh, ebxdec ecx
L0:mov eax, [dwArray + TYPE dwArray * ecx]inc ecx mov [dwArray + TYPE dwArray * ecx], eaxdec ecx loop L0mov eax, [dwArray + TYPE dwArray * ecx]inc ecxmov [dwArray + TYPE dwArray * ecx], eaxdec ecxmov eax, TmpChmov [dwArray + TYPE dwArray * ecx], eaxxor edi, edi
L1:invoke crt_printf, OFFSET Fmt, BYTE PTR [dwArray + edi * TYPE dwArray]inc edicmp edi, LENGTHOF dwArrayjz Endingjmp L1Ending:invoke crt_system, OFFSET Pauseinvoke ExitProcess, 0
end start

(完)

相关文章:

Intel汇编语言程序设计(第7版)第四章编程练习题答案

1. 大端序转成小端序 .386 .model flat, stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib include user32.inc includelib user32.lib.stack 4096.data bigEndian BYTE 12h, 34h, 56h, 78h littleEndian DWORD ?Fmt BYTE &…...

EDA(Exploratory Data Analysis)探索性数据分析

EDA(Exploratory Data Analysis)中文名称为探索性数据分析,是为了在特征工程或模型开发之前对数据有个基本的了解。数据类型通常分为两类:连续类型和离散类型,特征类型不同,我们探索的内容也不同。 1. 特征类型 1.1 连续型特征 …...

Python中的多媒体处理库有哪些?

在Python中,有几个常用的多媒体处理库,包括: Pillow - 一个强大的图像处理库,可以进行图像的读取、保存、剪裁、调整大小、滤镜处理等操作。 OpenCV - 一个用于图像和视频处理的开源计算机视觉库,提供了许多图像处理和…...

LeetCode【28. 找出字符串中第一个匹配项的下标】

不要用珍宝装饰自己,而要用健康武装身体 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 …...

产业互联网开始从简单的概念,逐渐成为可以落地的存在

当流量不再是红利,几乎所有的消费互联网模式开始失效。这一现象,并不仅仅只是体现在流量获取成本的不断增加上,同样还体现在流量激活的难度不断增加上。事实证明,以产业链末端为主要驱动力的发展模式,正在走入到死胡同…...

element-ui tree组件实现在线增删改

这里要实现一个tree 增删改 <!--oracle巡检项--> <template><div class"oracle_instanceType"><el-row type"flex" align"middle" justify"space-between"><iclass"el-icon-s-fold iBox"click&q…...

华为开源自研AI框架昇思MindSpore应用案例:消噪的Diffusion扩散模型

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、案例实现构建Diffusion模型位置向量ResNet/ConvNeXT块Attention模块组归一化条件U-Net正向扩散数据准备与处理采样训练过程推理过程&#xff08;从模型中采样&#xff09; 本文基于Hugging Face&#x…...

华为CD32键盘使用教程

华为CD32键盘使用教程 用爱发电写的教程&#xff01; 最后更新时间&#xff1a;2023.9.12 型号&#xff1a;华为有线键盘CD32 基本使用 此键盘在不安装驱动的情况下可以直接使用&#xff0c;但是不安装驱动指纹识别是无法使用的&#xff01;并且NFC功能只支持华为的部分电脑…...

第三节:在WORD为应用主窗口下关闭EXCEL的操作(2)

【分享成果&#xff0c;随喜正能量】凡事好坏&#xff0c;多半自作自受&#xff0c;既不是神为我们安排&#xff0c;也不是天意偏私袒护。业力之前&#xff0c;机会均等&#xff0c;毫无特殊例外&#xff1b;好坏与否&#xff0c;端看自己是否能应机把握&#xff0c;随缘得度。…...

Layui + Flask | 弹出层(组件篇)(04)

提示:点击阅读原文体验更佳 https://layui.dev/docs/2.8/layer/ 弹出层组件 layer 是 Layui 最古老的组件,也是使用覆盖面最广泛的代表性组件。在实现网页弹出层的首选交互方案,使用的非常频繁。 打开弹层 layer.open(options); 参数 options : 基础属性配置项。打开弹层的核…...

Electron和vue3集成(推荐仅用于开发)

本篇我们仅实现Electron和vue3通过先运行起vue3项目&#xff0c;再将vue3的url地址交由Electron打开的方案&#xff0c;仅由Electron在vue3项目上套一层壳来达到脱离本机浏览器运行目的 1、参考快速上手 | Vue.js搭建起vue3初始项目 npm install -g vue npm install -g vue/c…...

Vue.js和TypeScript:如何完美结合

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

034:vue项目利用qrcodejs2生成二维码示例

第034个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…...

执行 git remote add github git@github.com:xxxx/testGit.git时,git内部做了啥?

git remote add 往 .git/config 中写入了一个叫 [remote "origin"] 配置 url → 表示该远程名称对应的远程仓库地址fetch 参数分为两部分&#xff0c;以冒号 : 进行分割冒号左边 ☞ 本地仓库文件夹冒号右边 ☞ 远程仓库在本地的副本文件夹 ☞ 往里面添加数据的意思 可…...

Makefile基础

迷途小书童 读完需要 4分钟 速读仅需 2 分钟 1 引言 下面这个 C 语言的代码非常简单 #include <stdio.h>int main() {printf("Hello World!.\n");return 0; } 在 Linux 下面&#xff0c;我们使用下面的命令编译就可以 gcc hello.c -o hello 但是随着项目的变大…...

【PickerView案例08-国旗搭建界面加载数据 Objective-C预言】

一、来看我们第三个案例 1.来看我们第三个关于PickerView的一个案例, 首先呢,我要问大家一下, 咱们这个是几组数据呢, 这是一个pickerView,只不过,它显示的是什么,一个界面, 前面两个案例,都是文字 这个案例,开始有图片了, 总结一下这三个案例: 1)第一个案例…...

2023-09-15力扣每日一题

链接&#xff1a; [LCP 50. 宝石补给](https://leetcode.cn/problems/queens-that-can-attack-the-king/) 题意 略 解&#xff1a; 简单题 模拟 实际代码&#xff1a; int giveGem(vector<int>& gem, vector<vector<int>>& operations) {for(…...

系列七、Nginx负载均衡配置

一、目标 浏览器中访问http://{IP地址}:9002/edu/index.html&#xff0c;浏览器交替打印清华大学8080、清华大学8081. 二、步骤 2.1、在tomcat8080、tomcat8081的webapps中分别创建edu文件夹 2.2、将index.html分别上传至edu文件夹 注意事项&#xff1a;tomcat8080的edu文件…...

Python爬虫(二十)_动态爬取影评信息

本案例介绍从JavaScript中采集加载的数据。更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import requests import re import time import json#数据下载器 class HtmlDownloader(object):def download(self, url, paramsNone):if url is None:return Noneuser_agent …...

基于 Flink CDC 高效构建入湖通道

本文整理自阿里云 Flink 数据通道负责人、Flink CDC 开源社区负责人&#xff0c; Apache Flink PMC Member & Committer 徐榜江&#xff08;雪尽&#xff09;&#xff0c;在 Streaming Lakehouse Meetup 的分享。内容主要分为四个部分&#xff1a; Flink CDC 核心技术解析数…...

redis的基础底层篇 zset的详解

一 zset的作用以及结构 1.1 zset作用 redis的zset是一个有序的集合&#xff0c;和普通集合set非常相似&#xff0c;是一个没有重复元素的字符串集合。常用作排行榜等功能&#xff0c;以用户 id 为 value&#xff0c;关注时间或者分数作为 score 进行排序。 1.2 zset的底层结…...

数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...

全文链接:http://tecdat.cn/?p27384 在本文中&#xff0c;数据包含有关葡萄牙“Vinho Verde”葡萄酒的信息&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 介绍 该数据集&#xff08;查看文末了解数据获取方式&#xff09;有1599个观测值和12个变量&#xf…...

Open3D(C++) 点云旋转的轴角表示法和罗德里格斯公式

目录 一、算法原理1、轴角表示法2、罗德里格斯公式二、代码实现三、结果展示四、相关链接一、算法原理 1、轴角表示法 假设刚体坐标系为B(Oxyz)绕单位向量 ω ⃗ \vec{ω}...

CPU的三级缓存

CPU缓存&#xff08;Cache Memory&#xff09;是位于CPU与内存之间的临时存储器&#xff0c;它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾&#xff0c;因为CPU运算速度要比内存读写速度快很多&#…...

pgzrun 拼图游戏制作过程详解(6,7)

6. 检查拼图完成 初始化标记成功的变量Is_Win Is_WinFalse 当鼠标点击小拼图时&#xff0c;判断所有小拼图是否都在正确的位置&#xff0c;并更新Is_Win。 def on_mouse_down(pos,button): # 当鼠标被点击时# 略is_win Truefor i in range(6):for j in range(4):Square S…...

laravel框架 - 集合篇

Laravel Eloquent 通常返回一个集合作为结果&#xff0c;集合包含很多有用的、功能强大的方法。 你可以很方便的对集合进行过滤、修改等操作。 本次教程就一起来看一看集合的常用方法及功能。 你可以使用助手函数 collect 将数组转化为集合。 $data collect([1, 2, 3]); 1…...

[npm]package.json文件

[npm]package.json文件 生成 package.jsonpackage.json 必须属性nameversion 描述信息descriptionkeywordsauthorcontributorshomepagerepositorybugs 依赖配置dependenciesdevDependenciespeerDependenciesoptionalDependenciesbundledDependenciesengines 脚本配置scriptscon…...

联表查询 索引 事务 JDBC使用 CPU工作原理 线程概念 Thread类的用法

第 1 题&#xff08;单选题&#xff09; 题目名称&#xff1a; 已知表T1中有2行数据&#xff0c;T2中有3行数据&#xff0c;执行SQL语句,“select a.* from T1 a,T2 b”后&#xff0c;返回的行数为 题目内容&#xff1a; A .2 B .3 C .5 D .6 第 2 题&#xff08;单选题…...

学习格式化dedecms模版里格式化时间标签pubdate的方法

学习格式化dedecms模版里格式化时间标签pubdate的方法 [field:pubdate function"GetDateTimeMK(me)"/][field:pubdate function"GetDateMK(me)"/][field:pubdate function"MyDate(Y-m-d H:i,me)"/]显示不同的时间样式&#xff1a; GetDateTimeMK…...

用思维导图了解《骆驼祥子》的内容

《骆驼祥子》是一部经典的中国小说&#xff0c;由著名作家老舍所创作。小说以北京城下贫苦的人们为背景&#xff0c;讲述了一个叫做祥子的年轻人&#xff0c;为了摆脱贫困和苦难&#xff0c;不断地奋斗和努力的故事。下面我们进行文字思维导图的方式来一起了解一下整个故事的内…...

推广型网站免费建设/百度推广按点击收费

在去吃午饭的路上想到的&#xff0c;总结下来&#xff1a;1 身份证随身带&#xff0c;否则寸步难行。最好办2个身份证&#xff0c;家里一个&#xff0c;随身一个&#xff0c;以防丢失。2 信用卡随身带&#xff0c;所有的消费尽可能用信用卡。最好带招行一个&#xff0c;其他行一…...

在深圳帮人做网站/百度官方网站首页

5.7 跳转语句 这些语句可以立即将控制权转移到函数中的其他位置或从函数中返回控制权。 C 跳转语句执行控制的即时本地转换。 break; continue; return [expression]; goto identifier; 5.7.1 break语句 break 语句可终止执行最近的封闭循环或其所在条件语句。 控制权将…...

高新区免费网站建设/培训机构招生方案模板

本篇文章讲解了计算机的原码、反码和补码&#xff0c;并且进行了深入探求了为何要使用反码和补码&#xff0c;以及更进一步的论证了为何可以用反码、补码的加法去计算原码的减法。论证部分如有不对的地方请各位牛人帮忙指正&#xff01;希望本文对大家学习计算机基础有所帮助&a…...

做商城网站价格/seo公司重庆

下载地址&#xff1a;网盘下载 《Excel VBA 程序开发自学宝典&#xff08;第3 版&#xff09;》是VBA 入门与提高的经典教材。全书分上下两篇&#xff0c;上篇包含入门知识&#xff0c;对VBA 的基础理论、语法规则、编写思路、代码优化思路等都提供了详尽的理论阐述和案例演示。…...

做网站首选九零后网络/市场营销专业就业方向

老许今日份知识分享来了。 处理数量较大的数据时&#xff0c;一般分为数据获取、数据筛选&#xff0c;以及结果展示几个步骤。在 Excel 中&#xff0c;我们可以利用数据透视表(Pivot Table)方便快捷的实现这些工作。 首先手把手的教你 如何在 Excel 中手动构建一个基本的数据…...

wordpress付费站内搜索/软文发稿系统

先用fdisk -l 命令查看分区1 ?! I& e8 L2 ^ 挂载ntfs分区&#xff1a;& b* a1 c/ }8 o 假设/dev/hda1是Windows分区(NTFS)的位置&#xff0c;而要挂载的目录是&#xff1a;/media/windows &#xff1a;( S" z. g4 p/ t. k2 r4 z8 k b1 }" t. k, V3 K, E sud…...