学习汇编,代码有问题吗?

2024-01-01

    jmp start
;==============================
;  Draws a horiz and vert line
;==============================
  startaddr dw 0a000h ;start of video memory
  colour db 1
;==============================
 start:
   mov ah,00
   mov al,19
   int 10h   ;switch to 320x200 mode
 ;=============================
 horiz:
   mov es, startaddr  ;put segment address in es ; <--- Error Line 14
   mov di, 32000  ;row 101 (320 * 100)
   add di, 75   ;column 76
   mov al,colour  ;cannot do mem-mem copy so use reg
   mov cx, 160   ;loop counter
  hplot:
    mov es:[di],al  ;set pixel to colour ; <--- Error
    inc di   ;move to next pixel
  loop hplot
 vert:
   mov di, 16000  ;row 51 (320 * 50)
   add di, 160   ;column 161
   mov cx, 100   ;loop counter
  vplot:
    mov es:[di],al  ; <--- Error
    add di, 320   ;mov down a pixel
  loop vplot
 ;=============================
 keypress:
   mov ah,00
   int 16h   ;await keypress
 end:
   mov ah,00
   mov al,03
   int 10h
   mov ah,4ch
   mov al,00   ;terminate program
   int 21h

我完全复制了这段代码本教程 http://www.skynet.ie/~darkstar/assembler/tut7.html.

使用 NASM 编译时出现三个错误(不使用参数,只使用-o output.exe):

14: Error: Invalid combination of opcode and operands
20: Error: Invalid combination of opcode and operands
28: Error: Invalid combination of opcode and operands

请参阅 tanascius 对第 14 行问题的回答。您需要mov es, word [startaddr] here.

第 20 行和第 28 行有一个共同的问题。 Nasm 需要语法mov [es:di],al。不需要大小前缀——它隐含在寄存器操作数中。

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

学习汇编,代码有问题吗? 的相关文章

  • 该程序如何知道该字符串存储的确切位置?

    我用 Radare2 反汇编了一个 C 程序 在这个程序中有很多调用scanf像下面这样 0x000011fe 488d4594 lea rax var 6ch 0x00001202 4889c6 mov rsi rax 0x0000120
  • 在汇编中,指令指定数据类型吗?

    我是汇编语言编程 x86 的初学者 以下说法是否正确 在汇编中 BYTE WORD DWORD 等数据类型分别表示 8 位 16 位和 32 位模式 而不仅仅是整数 它们本身没有意义 它们只是位模式 使用它们的指令赋予了它们意义 汇编 代码
  • 汇编程序中的过程调用如何工作?

    我刚刚开始摆弄 ASM 我不确定我对过程调用的理解是否正确 假设代码中的某个时刻有一个过程调用 call dword ptr 123 该过程仅包含一个命令 ret ret 0004 该过程调用的效果是什么 返回值将存储在哪里 我在某处读到
  • 基本 NASM 引导程序

    我最近一直在研究操作系统 启动过程和 NASM 在我的旅程中 我遇到了一段有用的引导代码 我部分理解并通过虚拟软盘对其进行了测试 我的基本问题是我不明白其中一些行的作用 我已经评论了我认为这些线条的作用 任何更正或确认将不胜感激 This
  • 问题与 Assembly x86-32 RET n 指令有关

    我知道 Ret n 的含义 但我无法弄清楚它在维护程序运行时堆栈方面的作用 我在那里有点困惑 ret 和栈有关系吗 ret n就好像ret add esp n 您可以将其用于 caller pops 调用约定 Plain ret就好像pop
  • 计算PE文件中入口点的文件偏移量

    In http en redinskala com finding the ep http en redinskala com finding the ep 有关于如何查找 exe 文件中入口点的文件偏移量的信息 在这里我可以读到 EP 文
  • execve() 无法启动 C 程序

    我正在尝试使用生成一个新进程execve from unistd h在 Linux 上 我尝试向它传递以下参数execve bin ls bin ls NULL 但没有得到结果 我也没有收到错误 程序只是退出 发生这种情况有原因吗 我尝试以
  • 深入了解事物如何打印到屏幕上(cout、printf)以及我在教科书上似乎找不到的真正复杂内容的起源

    我一直想知道这个问题 但至今还没有找到答案 每当我们使用 cout 或 printf 时 它们到底是如何打印在屏幕上的 文本是如何显示出来的 这里可能是一个相当模糊的问题 无论你给我什么 我都会工作 那么基本上这些功能是如何制作的 是汇编吗
  • 汇编器堆栈对齐(或使用 PUSH 更好的未对齐示例)

    首先我了解 或者我认为我了解 堆栈未对齐的问题 但我知道 就像定义一样 将 16 位值推入 32 位宽的堆栈可能会导致堆栈未对齐 但我不明白的是 这是怎么发生的 因为PUSH and POP检查段描述符处的 D 标志 1 递增 递减 32
  • 如何在 gdb 中给定地址处的汇编指令上中断?

    0x0000000000400448
  • 如何在 Linux 64 位上用 C 编写简单的内联 asm 指令?

    我正在编写一个简单的 C 程序 我的要求是从程序的某些函数中打印 RIP 指令指针 我不想使用 ptrace 我用内联汇编尝试的一件事是 asm movl rip 0 r val 这应该将我的 rip 寄存器值复制到变量 val 但我收到编
  • 为什么这个 IA32 汇编代码有 3 个 leaal 指令?

    我编译了这个C函数 int calc int x int y int z return x 3 y 19 z 我在 calc s 中得到了这个 我正在注释正在发生的事情 file calc c text globl calc type ca
  • 使用 32 位块对 1024 位 2 的补码进行有符号乘法

    因此 我对 1024 位数字有以下结构定义 我想在此处使用 2 的补码表示 并且我使用的是 32 位系统 typedef struct int1024 int32 t num 32 should I use uint32 t int1024
  • x86指令“call dword ptr ds:[00923030h]”是什么意思? [复制]

    这个问题在这里已经有答案了 下面的 x86 汇编指令有什么作用 call dword ptr ds 00923030h 我怀疑这是一个间接调用 但它到底是如何计算调用的地址的 编辑 已更新 每当你看到一个看起来像这样的内存操作数时ds 0x
  • 从 32 位 x86 汇编代码读取,计算程序有多少字节的方法是什么

    我正在做一个简单的堆栈粉碎练习 我需要在程序集中写入特定偏移量的短跳转 我需要计算两条指令分隔的字节数的偏移量 我一直在搜索谷歌 但我似乎无法找到正确的搜索词 例如 我知道mov操作码是2个字节 但是整个指令有多少字节取决于您的src an
  • 为什么在Java中读取易失性和写入字段成员是不可扩展的?

    观察以下用 Java 编写的程序 完整的可运行版本如下 但程序的重要部分在下面的代码片段中 import java util ArrayList A not easy to explain benchmark class MultiVola
  • ARM(64 位)上的面向返回编程

    我正在 ARM 64 位 上研究 Rop 因此 我正在 ARMv8 Cortex A 72 上测试 Rop 漏洞 以了解它在 Arm64 上的工作原理 我写了一个非常简单的易受攻击的c代码 include
  • LEA 还是 ADD 指令?

    当我手写汇编时 我一般会选择表格 lea eax eax 4 过表格 add eax 4 我听说 lea 是一条 0 时钟 指令 如 NOP 而 add 则不是 然而 当我查看编译器生成的程序集时 我经常看到使用后一种形式而不是第一种形式
  • ARM反汇编一段被TBB搞糊涂了

    作为学习 Arm 汇编的介绍 我尝试用高级语言重新创建反汇编函数 然而 我对以下汇编感到困惑 0000315e 2101 movs r1 1 00003160 e8dff000 tbb pc r0 00003164 030e lsls r6
  • 从 64 位地址加载到 rax 以外的其他寄存器

    在 x64 上 可以通过以下方式从 64 位绝对地址加载 即取消引用 64 位立即数 movabs addr64 rax 但是 当目标寄存器不是rax汇编器给出一条错误消息 operand size mismatch for movabs

随机推荐

  • Firefox Webdriver 非常慢

    我们使用设置的 selenium webdriver dll 来运行我的自动化套件 我仅在 Firefox 中运行测试时遇到此问题 Firefox 中的测试运行速度非常慢 加载页面需要 3 4 分钟 但是 当我使用 Firefox 浏览器在
  • React Native fetch() 网络请求失败

    当我使用创建一个全新的项目时react native init RN 版本 0 29 1 并将 fetch 放入公共 facebook demo movie API 的 render 方法中 它会抛出Network Request Fail
  • django 中不同用户类型的单独“管理”界面

    我最近正在尝试创建一个涉及多个级别用户的项目 只是一个缩写和粗略模式的示例 ME Super User Client s Customer s Survey Collections SurveyUser s Invitee s Survey
  • 如何在纵向数据集中进行缩尾(或删除单变量异常值)

    我试图弄清楚如何对纵向数据集中按个体分组的观察结果进行缩尾处理 我从这个开始很好的答案 https stackoverflow com questions 14596373 removing univariate outliers from
  • Ionic 启动画面中的 GIF 文件

    我正在开发一个带有 ionic framework 和 Cordova 插件的混合应用程序 他们问我两个操作系统 iOS 和 Android 上的启动屏幕都有一个小动画 我想象的是 GIF 但如果您可以将 GIF 作为启动屏幕加载 则不会
  • 如何删除 Xamarin.Forms 导航栏?

    有没有办法从 Android 中的 Xamarin Forms Portable xaml 中删除导航栏 我想删除 Xamarin Forms xaml 内容页面上方显示的 小于号 您可以使用以下代码使用 Xamarin Forms 从 X
  • 尝试添加一对多关系时出现 NullReferenceException

    Item可以包含多个Sizes 当我尝试为我的商品添加新尺寸时 它会抛出NullReference错误 当我尝试将图像添加到我的项目时 也会发生同样的情况 你调用的对象是空的 Code var size new Size BasePrice
  • 在 C++ (Win32) 中解析 XML 的方法

    我正在寻找一种在 Windows 中用 C 解析 XML 的方法 我发现了一些方法 例如 MSXML Xerces TinyXml 等 但我想知道哪种方法在性能和功能方面最好 我的要求是它必须能够静态链接或将源代码包含在项目本身中 并且不能
  • Visual Studio 中的国际化

    我对 Visual Studio 相当陌生 想知道如何在我正在启动的新项目中最好地规划翻译 我需要提供英语 德语和法语 我过去经常使用 Eclipse 在那里我刚刚开发了一个新应用程序 当它完成时 我可以启动一个向导将字符串外部化到资源文件
  • Jackson 无法序列化我的领域对象

    我有一个 Route 对象 但我发现无法序列化它 所以我说我将调试并尝试单独序列化其中的对象 这是我的功能 public JSONObject getRouteJson Next Step step JSONObject route new
  • 在模板类中调用模板方法

    我试图找出为什么我无法编译的一些代码 并且我做了相当多的减少和匿名化 最终得到了这个例子 define NULL void 0 template
  • GWT UiBinder 有什么方法可以拥有动态的小部件列表吗?

    Class Foo有一个变量List
  • JavaScript 对数组进行排序

    我的数组未正确排序 有人可以让我知道我做错了什么吗 sortArray new Array hello Link to Google zFile aFile sort array if dir asc sortArray sort func
  • 找到顶点的边(多边形)的最佳算法

    我有大量的顶点 其中一些是边缘 一些是多余的 形状内部 我想删除它们 我能想到的最简单的算法是一一检查它们是否撞到了其他人形成的形状 但这应该是一个非常慢的算法 我考虑从边缘选择一个 每个示例中距原点最远的一个 并计算从这一点开始的最长路径
  • 为什么Python在for和while循环之后使用'else'?

    我理解这个结构是如何工作的 for i in range 10 print i if i 9 print Too big I m giving up break else print Completed successfully 但我不明白
  • 制作嵌套在其他显示对象中的显示对象的视觉克隆,并将克隆添加到相同位置、旋转等的舞台层中

    我希望能够获取嵌套在其他对象中的 DisplayObject 的副本转变的DisplayObjects 旋转 缩放 拉伸的对象 并能够将其标记回相同的视觉位置 但在舞台层上 本质上 能够创建嵌套 DisplayObject 的克隆 但能够将
  • Python: int(3.0) = 2

    观察下面的python程序 def goo y x y float y x float x yup y x 1 x yup str yup yup yup split decimal yup 1 decimal float decimal
  • 数据库管理系统通常绕过文件系统,这是真的吗?

    我对典型数据库管理系统绕过文件系统的一般理解是否正确 据我所知 他们管理自己的磁盘空间 并将实际数据和索引系统 如 B 树 直接写入磁盘块 绕过文件系统的任何中间帮助 这假设 root 将向数据库用户提供直接读取和写入磁盘块的权限 在 Li
  • 在 SR-IOV 虚拟功能 (VF) NIC 之间转发数据包

    我有一个支持 Intel SR IOV 的 Intel 82599ES 10G NIC 我已成功创建了 8 个虚拟功能 VF 并将其分配给 2 个 qemu kvm VM 每个 VM 2 个 VF 两台虚拟机都使用分配的 VF 运行 DPD
  • 学习汇编,代码有问题吗?

    jmp start Draws a horiz and vert line startaddr dw 0a000h start of video memory colour db 1 start mov ah 00 mov al 19 in