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正向扩散数据准备与处理采样训练过程推理过程(从模型中采样) 本文基于Hugging Face&#x…...

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

第三节:在WORD为应用主窗口下关闭EXCEL的操作(2)
【分享成果,随喜正能量】凡事好坏,多半自作自受,既不是神为我们安排,也不是天意偏私袒护。业力之前,机会均等,毫无特殊例外;好坏与否,端看自己是否能应机把握,随缘得度。…...
Layui + Flask | 弹出层(组件篇)(04)
提示:点击阅读原文体验更佳 https://layui.dev/docs/2.8/layer/ 弹出层组件 layer 是 Layui 最古老的组件,也是使用覆盖面最广泛的代表性组件。在实现网页弹出层的首选交互方案,使用的非常频繁。 打开弹层 layer.open(options); 参数 options : 基础属性配置项。打开弹层的核…...

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

Vue.js和TypeScript:如何完美结合
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

034:vue项目利用qrcodejs2生成二维码示例
第034个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…...

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

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

【PickerView案例08-国旗搭建界面加载数据 Objective-C预言】
一、来看我们第三个案例 1.来看我们第三个关于PickerView的一个案例, 首先呢,我要问大家一下, 咱们这个是几组数据呢, 这是一个pickerView,只不过,它显示的是什么,一个界面, 前面两个案例,都是文字 这个案例,开始有图片了, 总结一下这三个案例: 1)第一个案例…...
2023-09-15力扣每日一题
链接: [LCP 50. 宝石补给](https://leetcode.cn/problems/queens-that-can-attack-the-king/) 题意 略 解: 简单题 模拟 实际代码: int giveGem(vector<int>& gem, vector<vector<int>>& operations) {for(…...

系列七、Nginx负载均衡配置
一、目标 浏览器中访问http://{IP地址}:9002/edu/index.html,浏览器交替打印清华大学8080、清华大学8081. 二、步骤 2.1、在tomcat8080、tomcat8081的webapps中分别创建edu文件夹 2.2、将index.html分别上传至edu文件夹 注意事项: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 开源社区负责人, Apache Flink PMC Member & Committer 徐榜江(雪尽),在 Streaming Lakehouse Meetup 的分享。内容主要分为四个部分: Flink CDC 核心技术解析数…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...

一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...