对汇编 x86 中的数组求和。关于输入的索引

2023-12-04

我在添加数组但在输入的索引上遇到一些问题。例如,用户输入 4 作为起始数组,6 作为结束数组,因此我必须循环 array[4] 到 array[6] 并将数字相加。我不确定是否可以在 ArraySum 过程中使用 .data 中的数组。我是否必须以某种方式将其推入程序?

我正在使用 Kip Irvine 的外部库来实现此目的。

我的代码在这里:

 TITLE Assignment 7

    INCLUDE Irvine32.inc


.data
str1 BYTE "The array sum is:    ",0
start BYTE "Enter the Starting Index:  ",0
endinx BYTE "Enter the Ending Index:    ",0

array DWORD 4, 6, 2, 5, 6, 7, 8, 4
sum DWORD ?
j DWORD ?
k DWORD ?

.code
main PROC
    mov esi, OFFSET array
    mov ecx, LENGTHOF array

    mov edx, OFFSET start
    call WriteString
    call ReadInt
    mov j, eax
    mov esi, j


    mov edx, OFFSET endinx
    call WriteString
    call ReadInt
    mov k, eax
    mov ecx, k

    call ArraySum
    mov sum,eax
    call WriteInt

main ENDP

;---------------------------------------------------
ArraySum PROC
;sums an array falling within j..k inclusive
;---------------------------------------------------
    push esi
    push ecx

    mov eax, 0
L1:
    add eax, array[esi]
    add esi, TYPE DWORD
    loop L1

    pop ecx
    pop esi
    ret

ArraySum ENDP

END main

您访问应该没有问题array来自ArraySum,但似乎循环的代码是错误的。这loop label指令减少了ecx注册并跳转到标签,如果ecx不为零。还array包含 DWORD,这意味着当您访问其元素时,您应该将索引乘以 4。 总的来说,循环的代码应该是这样的:

   ;; array max_index in ECX, i.e. length-1
    push ebx
    mov ebx, offset array
    xor  eax, eax                      ; sum = 0
    xor  esi, esi                      ; index = 0
L1:                                    ; do {
    add eax, dword ptr [ebx + esi * 4]  ; sum += array[idx] scaled index addressing
    inc esi
    cmp esi, ecx
    jle L1                             ; }while(i <= max_idx)

    pop ebx
   ; EAX = sum of array[0 .. ecx*4]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对汇编 x86 中的数组求和。关于输入的索引 的相关文章

  • 如何在 javascript 中实现映射或排序集

    Javascript 有使用数字索引的数组 john Bob Joe 以及可以像关联数组或 映射 一样使用的对象 允许对象值使用字符串键 john 28 bob 34 joe 4 在 PHP 中 两者都很容易A 按值排序 同时保留密钥 和B
  • 将数组的每个元素解析为整数

    我有一个字符串 需要将其拆分为一个数组 然后对数组的每个元素执行数学函数 目前我正在做这样的事情 实际上 我什么也没做 但这是一个非常简单的例子来解释我的问题 var stringBits theString split var resul
  • 将数组传递给函数 - 指针与引用(C++ 与 C)

    我有一个关于将数组传递给函数的最佳实践的广泛问题 因此 过去当我用 C 语言编程时 我想要一个函数的输入是一个数组 我会声明该函数的输入参数是一个指针 这效果相对较好 然而 我已经开始更多地使用 C 进行编程 并试图确定将数组传递到函数中的
  • 将 AT&T 语法转换为 INTEL 语法

    我发现这个 GAS 文件包含一些可以从 CD 启动的引导加载程序代码 我想研究它并尝试制作我自己的一个 但唯一的问题是它采用 AT T 语法而不是 Intel 语法 我对 AT T 语法一无所知 我尝试过使用 Intel2gas 转换器 但
  • 如何在 PHP 中比较两个数组并列出差异?

    我正在构建一个表单来执行以下操作 打印从 MySQL 获取的用户和权限表 用户拥有的每一项权限都是一个复选框 而他们缺少的每一项权限都是一个未选中的复选框 允许管理员选中和取消选中复选框以授予或删除权限 提交表单后 显示一个确认页面 其中仅
  • 函数地址不是实际代码地址

    在 Visual Studio 2008 C 中调试一些代码时 我注意到函数指针变量中的地址不是函数本身的实际地址 这是一个外部 C 函数 int main void printaddr const char print debug sho
  • 在 CodeIgniter 中将数组与 Calendar 类一起使用

    我正在尝试为我的日历应用程序创建一个相当复杂的数组 它应该包含日期 日期名称 类型 和事件 如果有 我已经创建了这个 dates 22 day gt Friday type gt weekday 23 day gt Saturday typ
  • 如何发布数组多维角度js

    我在 angularjs 中有一个数组 示例如下 scope order qty 20 scope order adress Bekasi scope order city Bekasi 这个数组可以用这个代码发布 http method
  • x86 asm 的 NASM 语法中的括号是什么意思?

    给出以下代码 L1 db word 0 mov al L1 mov eax L1 括号里是什么意思 L1 代表 这个问题专门针对 NASM Intel 语法汇编的另一个主要风格是 MASM 风格 当不涉及寄存器时 括号的工作方式有所不同 S
  • 如何打印数组中每个单词之间的空格

    我记得在 w3school 上看到过一个函数 你可以打印出数组的所有单词并在它们之间添加一个空格 但无论我如何谷歌我都找不到它 其外观示例 function printWords var array Car Bus Motorcykle p
  • QByteArray 到整数

    正如您可能从标题中看出的那样 我在转换QByteArray为一个整数 QByteArray buffer server gt read 8192 QByteArray q size buffer mid 0 2 int size q siz
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • JDBC插入实数数组

    我试图将一个真实的数组插入到 postgresql 数组中 该表的定义是 String sqlTable CREATE TABLE IF NOT EXISTS ccmBlock sampleId INTEGER block REAL 插入内
  • JavaScript:预期的赋值或函数调用,却看到了一个表达式

    我正在使用 JSHint 来确保我的 JavaScript 是 严格的 但我收到以下错误 预期是赋值或函数调用 但看到的是表达式 关于以下代码 var str A B C D var data var strArr str split fo
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • 递归获取数组的键并创建下划线分隔的字符串

    现在我得到了一个包含某种信息的数组 我需要从中创建一个表 例如 Student Address StreetAddress gt Some Street StreetName gt Some Name Marks1 gt 100 Marks
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • 如何实现 Vec 的修剪?

    Rust 提供了字符串的修剪方法 str trim http doc rust lang org stable std primitive str html method trim删除前导和尾随空格 我想要一个对字节串执行相同操作的方法 应
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14

随机推荐

  • 如何使用关键字作为属性名称?

    到目前为止 我已经非常成功地将匿名类型序列化为 json 了 dynamic jsObject jsObject new ExpandoObject jsObject dataUrl Controller Url Action loadal
  • Swift - 将字典 [String:Any] 编码和解码到 plist 中

    我试图将字典存储在我的 Marker 类中 但它抛出一个错误 指出它不可编码或可解码 我可以看到错误是由 String Any 引起的 但我该如何解决它 var buttonActions String String String Any
  • 如何在 CakePHP 中正确重写模型的构造函数

    我在 CakePHP 2 0 中测试模型时遇到了麻烦 问题似乎出在模型的构造函数上 public function construct parent construct this gt pagi cuantos 2 即使我删除了它的所有内容
  • R代码生成具有特定颜色的美国各州地图

    我正在尝试生成美国地图 其中每个州都可以具有以下颜色之一 EScolors lt c 7aad42 4a77bb f7931e d3dfbd 787878 我创建了一个数据框 states info 以将每个状态与其颜色相匹配 head s
  • 具有键“GenderID”的 ViewData 项的类型为“System.Int32”,但必须为“IEnumerable”类型

    当我尝试提交 发布数据时发生错误 有人可以帮助我尝试每一篇文章 但他们没有帮助我 我是 mvc 新手 任何帮助都会被授予 这是我的代码 public ActionResult Create UserProfileCreateViewMode
  • 将我的文本居中,但保持左对齐?

    我试图使页面上的链接左对齐但在页面上居中 我该怎么做呢 我尝试了很多方法 并在谷歌上搜索了更多我编码时间不长的方法 这正在成为一场真正的斗争 My site 这是我的 HTML 代码 img src http media moddb com
  • x86 中的原子测试和设置:内联 asm 或编译器生成的锁 bts?

    以下代码在为 xeon phi 编译时会抛出异常Error cmovc is not supported on k1om 但它确实可以为常规至强处理器正确编译 include
  • 双精度数中的小数位数[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何确定数字中的整数位数和小数点后的位数234 12413在爪哇 双精度数并不总是精确的
  • 从 NSString 解析 XML 以获取值

    这个问题是关于在 xcode 中操作 NSString 的 我有一个从网上获得的 XML 文本字符串 如下所示
  • 使用给定的时间增量对时间序列进行重采样

    我正在使用 Pandas 来构建和处理数据 这是我的数据框 我想要对时间序列数据进行重新采样 并且对于每个 ID 此处命名为 3 从开始到结束 beginning time end time 的所有比特率分数 例如 对于第一行 我希望拥有从
  • 将值减去多行

    好吧 我陷入了需要将值分配到多行的地步 由于我不知道具体的术语 我将其以下面的示例的形式以便更好地理解 假设 x 的值为 20 我需要将其按降序分配 减去到行中 TABLE ID Value1 1 6 2 5 3 4 4 3 5 9 结果应
  • 将逗号后的数字四舍五入为 2 位数字

    我不知道该怎么做 我正在添加逗号数字 结果当然总是一个逗号后数字太多的数字 任何人 EDIT 2 Use the Number对象的toFixed像这样的方法 var num Number 0 005 The Number only vis
  • ggplot 中的数据重新排序

    新的并坚持使用 ggplot 我有以下数据 tribe rho preference watermass 1 Luna2 1 000 hypolimnic 2 OP10I A1 1 000 epilimnic 3 B0 FO56C 0 98
  • 从 @selector 中关闭视图控制器而不创建单独的方法

    我试图通过直接从按钮执行它来关闭呈现的视图控制器 而不是为其创建一个单独的方法 但我不知道如何让它工作 或者是否可能 如有任何帮助 我们将不胜感激 我正在尝试的代码 dismissButton addTarget self action s
  • 从 SQL Server 触发器发送消息

    当 SQL Server 2005 中发生某些事情时 我需要向正在运行的应用程序 Windows 服务 发出信号 是否可以将消息从触发器发送到同一系统上的外部应用程序 您可以使用SQL 服务代理排队做你想做的事 触发器可以创建对话并在队列上
  • 如何使 DrawerLayout 显示在工具栏下方?

    如何使抽屉布局位于操作栏 工具栏下方 我正在使用 v7 21 应用程序兼容库和新的工具栏视图 我看到的例子看起来像
  • 在 pyinstaller 生成的可执行文件中使用 pyunpack 并结合 try except

    我对 pyunpack 有一个奇怪的行为 pyunpack 是一个在可执行文件内用于解包的包 我想做以下事情 我有一个 7z 类型的文件 其结尾不是 7z 而是 sent 首先 我尝试直接解压缩它 这会导致捕获预期的错误 在这个错误捕获中
  • 需要帮助优化 mysql 的纬度/经度地理搜索

    我有一个 mysql 5 0 22 myisam 表 其中大约有 300k 条记录 我想在 5 英里半径内进行纬度 经度距离搜索 我有一个涵盖纬度 经度字段的索引 并且当我仅选择纬度 经度时速度很快 毫秒响应 但是 当我选择表中的其他字段时
  • 使用原始类中的自定义 Android AnalogClock 设置时间

    我想使用互联网上提供的 Android 开源项目的 AnalogClock 源代码制作一个自定义 AnalogClock 类 我想让时钟设置我想要的时间 而不是当前时间 我没有找到关于如何执行此操作的明确示例 因此也许这篇文章会很有用 将源
  • 对汇编 x86 中的数组求和。关于输入的索引

    我在添加数组但在输入的索引上遇到一些问题 例如 用户输入 4 作为起始数组 6 作为结束数组 因此我必须循环 array 4 到 array 6 并将数字相加 我不确定是否可以在 ArraySum 过程中使用 data 中的数组 我是否必须