操作码和操作数的组合无效[重复]

2023-12-04

SEGMENT .data
    print       db      "%d %d %d %d This is a test of printf", 10, 0
    rowm        dw      160     ;row multiplier
    iterations  db      80      ;number of columns to set

SEGMENT .bss
    offs        resd    1       ;offset 

SEGMENT .text
    attribute   equ     47h ;color attribute

    global _VText
    global _VPage
    extern _vm_buffer
    extern _printf


_VText:

    push ebp
    mov ebp, esp
    push edi
    push esi
    push eax
    push es
    push ecx
    push edx

    mov esi, [ebp+8]        ;message 
    mov es, [_vm_buffer]
    mov dword [offs], 0

    mov ax, [ebp+12]            ;row
    mul dword[rowm]         ;multiply row by 160, result stored in dx:ax
    add [offs], dx          ;add dx:ax to offset
    shl dword [offs], 16
    add [offs], ax

    mov ax, [ebp+16]            ;column
    shl ax, 1               ;multiply column by 2
    add [offs], ax          ;add ax to offset

    mov ax, [ebp+24]            ;page
    shl ax, 12              ;multiply page by 2^12 (4096)
    add [offs], ax          ;add ax to offset   

    mov edi, offs           ;set offset
    mov ah, [ebp+20]        ;attribute

    sub byte[iterations], [ebp+16]   ;so that we don't write too many columns
    mov ecx, iterations

next_char:
    lodsb                   ;get the input string type
    cmp al, 00h             ;check for null character
    je null_ch              ;if null, then quit (null character indicates end of the string)
    stosw                   ;store ax to video memory
    loop next_char          ;will loop 80 times

null_ch:
    pop edx
    pop ecx
    pop es
    pop eax
    pop esi
    pop edi
    pop ebp
    ret


_VPage:



    ret

我之前研究过这个错误,它说添加括号,我这样做了,但它没有修复。

请帮助。


这是哪种架构,哪种汇编器?对我来说,看起来像 Intel/NASM-ish 语法中的 i386(但这只是一个小片段)。错误出现在哪一行代码上?无论如何你都不能这样做:

sub byte[iterations], [ebp+16]

你不能直接从内存到内存进行减法。您必须通过中间寄存器,例如:

mov eax, [ebp+16]
sub byte[iterations], al

但您的错误也可能指的是另一行。

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

操作码和操作数的组合无效[重复] 的相关文章

  • 为什么在强度降低乘法和循环进位加法之后,这段代码的执行速度会变慢?

    我正在读书阿格纳 雾 https en wikipedia org wiki Agner Fog s 优化手册 https en wikipedia org wiki Agner Fog Optimization 我遇到了这个例子 doub
  • 寄存器寻址模式与直接寻址模式

    我在试卷中遇到过这个问题 它指出 哪种给定的寻址模式更快 为什么 寄存器寻址方式 直接寻址方式 现在根据我的说法 寄存器寻址模式应该更快 因为寄存器是计算机中最快的存储位置 这是正确答案吗 请帮忙 谢谢 两种寻址模式之间的区别是 地址的来源
  • “rep stos”x86 汇编指令序列有什么作用?

    我最近偶然发现了以下汇编指令序列 rep stos dword ptr edi For ecx重复 存储内容eax到哪里edi指向 递增或递减edi 取决于方向标志 每次 4 个字节 通常 这用于memset型操作 通常 该指令简单地写成r
  • 如何知道寄存器是否是“通用寄存器”?

    我试图了解寄存器必须具备什么标准才能被称为 通用寄存器 我相信通用寄存器是一个可以用于任何用途的寄存器 用于计算 将数据移入 移出等 并且是一个没有特殊用途的寄存器 现在我读到了ESP寄存器是通用寄存器 我猜是ESP寄存器可以用于任何事情
  • 弹出 x86 堆栈以访问函数 arg 时出现分段错误

    我正在尝试链接 x86 程序集和 C 我的C程序 extern int plus 10 int include
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • 程序集比较标志理解

    我正在努力理解汇编程序中的以下代码片段 if EAX gt 5 EBX 1 else EBX 2 在汇编程序中 可以写如下 根据我的书 模拟jge操作说明 https www felixcloutier com x86 jcc您通常会使用
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • 为什么 clang 使用 -O0 生成低效的 asm(对于这个简单的浮点和)?

    我正在 llvm clang Apple LLVM 版本 8 0 0 clang 800 0 42 1 上反汇编此代码 int main float a 0 151234 float b 0 2 float c a b printf f c
  • 这种没有推送寄存器的交换有多安全?

    我对汇编非常陌生 下面的代码应该通过两个不同的函数交换两个整数 首先使用swap c然后使用swap asm 但我怀疑 我是否需要push 我的意思是保存 汇编代码之前寄存器的每个值和pop稍后 就在返回之前 main 换句话说 如果我返回
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 将字段中的位扩展到掩码中所有(重叠+相邻)集位的最快方法?

    假设我有 2 个名为 IN 和 MASK 的二进制输入 实际字段大小可能是 32 到 256 位 具体取决于用于完成任务的指令集 每次调用时两个输入都会改变 Inputs IN 1100010010010100 MASK 000111101
  • IDA pro asm 指令更改

    我只是想知道我怎样才能 更改IDA视图A中的asm指令 如何编辑指令 对于 实例 jnz 到 jmp 如何插入新指令 call func1 调用 func2 插入到现有的 代码 我知道如何制作 diff 文件 我知道如何在我的 DLL 上应
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • Polygot 包含 nasm/yasm 和 C 的文件

    我有一堆幻数 我想将它们包含在由 nasm 或 yasm 编译的 C 程序和汇编文件中 在纯 C 语言中 该文件看起来像是一系列定义 例如 define BLESS 55378008 define ANSWER 42 在 nasm 或 ya
  • 从 DX:AX 寄存器转移到单个 32 位寄存器

    我在添加 16 位乘法的乘积时遇到问题 我想将一年 例如 2015 年 乘以 365 为此 我 mov dx 0 to clear the register mov ax cx cx holds the year such as 2015
  • 比“add esp, 4”更小的指令

    又是我 我的程序中有很多 add esp 4 我正在尝试减小它的大小 是否有任何更小的指令可以替代 add esp 4 pop edx 或者您不介意破坏的任何其他整数寄存器 这就是现代编译器实际上所做的 https stackoverflo
  • 使用 ACPI 在 MS-DOS 中关闭计算机

    我在基于 Pentium 的计算机上运行 MS DOS 6 22 主板支持 ACPI 并且想知道是否有一个可以用来关闭计算机的汇编语言例程 或者它是否比那个更难 即主板 具体的 基本上 我想创建一个小程序来从命令行关闭计算机 这是专门为此编
  • 将 XMM 寄存器压入堆栈

    有没有办法将打包双字整数从 XMM 寄存器推送到堆栈 然后在需要时将其弹出 理想情况下 我正在寻找通用寄存器的 PUSH 或 POP 之类的东西 我已经检查了英特尔手册 但我要么错过了命令 要么没有 或者我是否必须将值解压到通用寄存器然后推
  • 为什么 mov %ax, %ds 汇编+反汇编为 mov %eax,%ds,与原来不一致?

    test S text global start start xor ax ax mov ax ds mov ax ss mov ax es mov ax fs mov ax gs 我通过这样做得到了反汇编代码文件 x86 64 elf g

随机推荐

  • 从没有列名的查询中选择数据

    我在 VBA 中使用 SQL 来填充电子表格 但当我这样做时 我会获取包括列标题的数据 我试图找到只提取信息而不提取列名称的方法 例如 id name job 0 Tom Repair 1 Bob Tech 相反我想要 0 Tom Repa
  • pip install pygame - 找不到 SDL.h 文件

    macOS 塞拉利昂 fun python pip version pip 9 0 1 from Library Frameworks Python framework Versions 3 5 lib python3 5 site pac
  • 正则表达式中对 \K 的支持

    The K转义序列将匹配的开头重置为当前位置 令牌列表 这只影响报告为完全匹配的内容 支持哪些环境 语言 版本 K 保留 在其正则表达式引擎中 以及需要哪些库 如果有 才能在模式中使用此功能 The K多种引擎 语言或工具支持转义序列 例如
  • XSL:`xsl:template` 的 `match="/"` 的含义

    我刚刚学习 XML 以及如何使用 XSL 文件 在 XSL 文件中我发现了以下术语 xsl template match 这代表什么 我可以用什么来代替 我可以写吗table或任何其他 HTML 标签来代替 的价值match的属性
  • 什么情况下HTTP_REFERER会为空

    我知道有可能得到一个空的 HTTP REFERER 什么情况下会出现这种情况 如果我得到一个空的 是否总是意味着用户更改了它 获取空值与获取空值相同吗 在什么情况下我也会得到这个 当最终用户 在浏览器地址栏中输入站点 URL 通过浏览器维护
  • 在 C# 中序列化数组列表

    我有一个包含许多标准字段和一个数组列表的类 有没有办法使用 XmlSerializer 序列化该类 到目前为止的尝试会导致一条错误消息 Unhandled Exception System InvalidOperationException
  • 使用 .NET 反应式扩展定期调度 IEnumerable

    比如说我有一个可枚举的 dim e Enumerable Range 0 1024 我希望能够做到 dim o e ToObservable Timespan FromSeconds 1 这样可观察对象每秒都会生成值 直到枚举完毕 我想不出
  • PostgreSQL 中使用“类似”的查询性能

    我需要根据特定列中的某些值从表中检索某些行 名为columnX在示例中 select from tableName where columnX similar to A B C 1 2 3 So if columnX至少包含指定值之一 A
  • 可执行路径指向错误的位置,如何更新

    我最近使用 npm 更新了一个 nodejs 可执行文件 现在该可执行文件指向错误的位置 当我在终端中运行which命令时 它指向旧的不存在的位置 如何更新可执行路径或快捷方式 我不是一个 Unix 人 所以不确定它在哪里设置 我不一定需要
  • 在管理员接受其域的应用程序市场范围后,我们是否需要等待以避免同意屏幕?

    我们正在将我们的应用程序集成到新的 Google Marketplace 中 我们在开发者控制台中的市场配置没问题 我们的 oauth2 sso 流程正常 范围与控制台中的设置匹配 身份验证参数正常 所有用户在通过导航栏访问我们的应用程序时
  • 泛型方法中的原始类型转换,无需装箱

    在对我们的一个应用程序进行一些分析时 我发现了以下代码 public TOut GetValue
  • Kotlin readLine() 函数无法正常工作

    我最近在kotlin中做了一个简单的用户输入代码 我尝试在intellij Idea上运行它 但是它不能正常工作 当我运行代码时 出现 输入文本 部分 我可以输入一些单词 但是readLine 似乎不起作用 因为它没有继续到最后一个 pri
  • 为什么数据库查询在应用程序中只会变慢?

    我有一个网页 需要 10 分钟才能对数据库运行一个查询 但从 SQL Server Management Studio 运行时 相同的查询会在不到一秒的时间内返回 该网页只是向正在执行存储过程的数据库触发 SQL 而数据库又对四个表执行非常
  • 在 C++ 中创建数组而不提前知道长度

    我正在开发一个小程序 以帮助加快我的实验室工作的一些数据分析速度 它应该从文本文件中读取数据 创建一堆包含这些数据的数组 然后进行一些数学运算 我一直遇到的问题是我不知道原始文本文件有多少行 所以我不知道要制作多大的数组 我对 C 很陌生
  • 如何调整背景图像大小以适应Android中的应用程序屏幕尺寸

    我使用的是 s4 Galaxy 我下载了以下壁纸壁纸 http www sswallpaper com get samsung galaxy s4 wallpapers Keep Running 1080x1920 595 2 jpg我尝试
  • 矢量迭代器擦除给我一个运行时错误?

    所以我在我的类中有一个方法 这个类应该做的是 检查 h 文件中的向量是否具有介于double low double high然后删除它们 最后返回删除了多少 空格 所以我尝试了一些方法 但总是遇到运行时错误 它似乎在 for 循环中 但我不
  • 刷新 Excel VBA 函数结果

    如何让用户定义的函数根据电子表格中更改的数据重新评估自身 I tried F9 and Shift F9 似乎唯一有效的方法是使用函数调用编辑单元格 然后按 Enter 键 你应该使用Application Volatile在你的函数的顶部
  • Android 个性化锁屏

    您好 我正在寻找适用于 Android 手机的个性化屏幕储物柜 用户可以以特定模式弯曲手指并解锁屏幕 而不是输入数字 任何指示 想法表示赞赏 您可能想查看 Android 源代码 LockPatternUtils java and 锁屏 j
  • 如何从存储在sd卡上的图像获取图像路径

    是否可以获取 Android 手机 SD 卡上存储的所有图像的路径 还可以检查 SD 卡或内存中存储的其他图像吗 我目前正在这样做 Cursor cur this getContentResolver query MediaStore Im
  • 操作码和操作数的组合无效[重复]

    这个问题在这里已经有答案了 SEGMENT data print db d d d d This is a test of printf 10 0 rowm dw 160 row multiplier iterations db 80 nu