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

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(使用前将#替换为@)

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

  • Linux Shellcode“你好,世界!”

    我有以下可用的 NASM 代码 global start section text start mov eax 0x4 mov ebx 0x1 mov ecx message mov edx 0xF int 0x80 mov eax 0x1
  • 气体:内存引用太多

    编译时指令如下 movl 4 ebp 8 ebp I got 内存引用过多 它出什么问题了 括号之前的数字是字节偏移量 这会导致发生内存引用 并且不能有两个movl 您需要先将值暂时移至寄存器 movl 4 ebp ecx movl ecx
  • nasm/ld“重定位被截断以适合:R_386_16”

    集会 BITS 16 global start start mov ax 0x07C0 mov ds ax mov si hw call print string jmp print string mov ah 0x0E char lods
  • x86 程序执行期间方向标志 (DF) 的默认状态

    在反汇编中 我经常看到使用字符串操作指令而不考虑方向标志 DF 的状态 如下所示 or ecx 0FFFFFFFFh xor eax eax mov edi ebp repne scasb CLD or STD自函数开始以来未找到指令 也未
  • 电路解码所需的最小输入位数

    我正在学习计算机体系结构 并且正在阅读有关编码器和解码器的内容 在 MIPS 处理器中 操作码有 6 位 我想知道构建解码器来解码操作码需要多少输入位 我知道解码器是一个组合电路 它将二进制信息从 n 个输入线转换为最多 2 n 个唯一的输
  • 编写一个新的 jit

    我有兴趣用 C 启动我自己的 JIT 项目 我对汇编或编译器设计等并不熟悉 但是 我对生成的机器代码格式非常不熟悉 比如 当一切都说了和完成后 mov 指令实际上是什么样子 是时候调用它了函数指针 那么 创建这样的东西的最佳资源是什么 编辑
  • 如何使用存储在 x64 位置的 x64 内存地址进行跳转?

    据我所知 使用 64 位地址作为操作数的 jmp 是不可能的 但我相信使用 x64 内存位置是 来自here http www tptp cc mirrors siyobik info instruction JMP htmlJMP r m
  • 16位汇编:无法取消引用某些寄存器[重复]

    这个问题在这里已经有答案了 我正在尝试以下 Intel 16 位指令 mov si word reg where reg是一些寄存器 它编译得很好 如果reg is bx 但当它是ax cx or dx 我使用 NASM 作为我的汇编器 我
  • 本机代码、机器代码和汇编代码有什么区别?

    我对 NET 语言上下文中的机器代码和本机代码感到困惑 它们之间有什么区别 它们是一样的吗 这些术语确实有点令人困惑 因为它们有时使用不一致 机器代码 这是定义最明确的一种 它是使用字节码指令的代码 您的处理器 执行实际工作的物理金属部件
  • Sum 函数问题类型错误:+ 不支持的操作数类型:“int”和“str”

    我是 python PYTHON 3 4 2 的新手 我正在尝试制作一个程序 通过加法和除法来查找用户输入的平均值或均值 但我不知道如何添加我的数字收到 当我在命令提示符下打开程序时 它接受我输入的数字 如果我使用打印功能 它也会打印它 但
  • 如果我有一个 8 位值,那么使用 8 位寄存器而不是 16、32 或 64 位寄存器有什么优势吗?

    我读到的 x86 asm 介绍性文献似乎在所有实际场景中都坚持使用 32 位寄存器 eax ebx 等 除了证明 64 位寄存器也存在之外 如果确实提到 16 位寄存器 那也是作为历史注释来解释为什么 32 位寄存器的名称前面有一个 e 编
  • 二元炸弹 - 第 6 阶段

    这是拆解phase 6 08048dbf
  • 在LPC2148 ARM处理器上创建中断向量的汇编代码

    我最近刚刚开始使用 LPC2148 ARM 处理器 我试图理解一些有关创建中断向量的汇编代码 这是代码 Runtime Interrupt Vectors Vectors b start reset start ldr pc undf un
  • 如果没有按下任何键,则检查按键而不阻塞

    我正在创建一个应用程序来查看当前时间 并创建了一个循环来每秒更新时间 循环看起来像这样 UPDATE The code to be re executed JMP UPDATE 但我无法结束它 当我使用 MOV AH 00H INT 21H
  • (nasm x86实模式)如何在引导加载的扇区中写入/读取字符串?

    我正在使用 NASM 为 x86 实模式编写一个最小操作系统 用于教育目的 我想使用 512 字节引导扇区加载包含操作系统其余部分的更大扇区 我已经成功创建了一个加载另一个扇区的引导扇区 但我似乎无法在加载的扇区中写入 读取字符串 这是我的
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 内存映射图形输出

    我正在探索使用内存映射图形绘制像素和线条 我在 Windows 的 Textpad 中使用 TASM 当我单击 运行 时 整个屏幕变成蓝色 就是这样 没有绘制像素 model small stack data saveMode db xVa
  • 如何创建可获取数字的小矮人计算机 (LMC) 代码。奇数时显示1,偶数时显示0

    我的研究需要帮助 如果数字是偶数 它可以显示 1 如果数字是奇数 它可以显示 0 例如 如果输入是 99 它将显示输出 1 这意味着奇数 如果我显示 10 它将显示输出 0 这意味着偶数 我没有任何代码 因为我不知道如何开始 请帮忙 我对这
  • 在汇编中初始化字符串数组

    我想创建一个数据数组 在初始化数据部分保存 5 个字符串 每个字符串正好有 4 个字符 每个字符串都有一些初始数据 例如第一个字符串的 abcd 第二个字符串的 efgh 等等 无效的 0任何字符串都不需要字符 如何用汇编语言初始化字符串数
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4

随机推荐

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

    我在 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