显示寄存器内容

2024-03-19

您好,我需要帮助显示寄存器的内容。我的代码如下。我已经能够显示数据寄存器的值,但我想显示标志状态。例如 1 或 0。如果还显示其他寄存器(如 esi、ebp)的内容,将会很有帮助。

我的代码没有打印标志的状态..我缺少什么

section .text
global _start       ;must be declared for using gcc
_start :                     ;tell linker entry point

mov eax,msg         ; moves message "rubi" to eax register
mov [reg],eax       ; moves message from eax to reg variable


mov edx, 8   ;message length
mov ecx, [reg];message to write
mov ebx, 1      ;file descriptor (stdout)
mov eax, 4      ;system call number (sys_write)
int 0x80        ;call kernel

mov eax, 100
mov ebx, 100
cmp ebx,eax

pushf
pop dword eax

mov [save_flags],eax

mov edx, 8        ;message length
mov ecx,[save_flags]         ;message to write
mov ebx, 1          ;file descriptor (stdout)
mov eax, 4          ;system call number (sys_write)
int 0x80     


mov eax, 1      ;system call number (sys_exit)
int 0x80        ;call kernel

section .data

msg db "rubi",10

section .bss

reg resb 100

save_flags resw 100

我不会在这里追求任何奇特的东西,因为这似乎是一项家庭作业(今天有两个人问了同样的问题)。这段代码应该做成一个函数,这样可以增强它的性能。由于我没有获得荣誉学位或班级 A,因此提供最佳解决方案对我来说没有意义,但您可以使用以下解决方案:

    BITS_TO_DISPLAY equ 32       ; Number of least significant bits to display (1-32)

section .text
global _start                    ; must be declared for using gcc
_start :                         ;    tell linker entry point

    mov edx, msg_len             ; message length
    mov ecx, msg                 ; message to write
    mov ebx, 1                   ; file descriptor (stdout)
    mov eax, 4                   ; system call number (sys_write)
    int 0x80                     ; call kernel

    mov eax, 100
    mov ebx, 100
    cmp ebx,eax

    pushf
    pop dword eax

    ; Convert binary to string by shifting the right most bit off EAX into
    ; the carry flag (CF) and convert the bit into a '0' or '1' and place
    ; in the save_flags buffer in reverse order. Nul terminate the string
    ; in the event you ever wish to use printf to print it

    mov ecx, BITS_TO_DISPLAY     ; Number of bits of EAX register to display
    mov byte [save_flags+ecx], 0 ; Nul terminate binary string in case we use printf
bin2ascii:
    xor bl, bl                   ; BL = 0
    shr eax, 1                   ; Shift right most bit into carry flag
    adc bl, '0'                  ; bl = bl + '0' + Carry Flag
    mov [save_flags-1+ecx], bl   ; Place '0'/'1' into string buffer in reverse order
    dec ecx
    jnz bin2ascii                ; Loop until all bits processed

    mov edx, BITS_TO_DISPLAY     ; message length
    mov ecx, save_flags          ; address of binary string to write
    mov ebx, 1                   ; file descriptor (stdout)
    mov eax, 4                   ; system call number (sys_write)
    int 0x80

    mov eax, 1                   ;system call number (sys_exit)
    int 0x80                     ;call kernel

section .data
msg db "rubi",10
msg_len equ $ - msg

section .bss
save_flags resb BITS_TO_DISPLAY+1 ; Add one byte for nul terminator in case we use printf

这段代码背后的想法是我们不断地移动位(使用SHR指令 http://x86.renejeschke.de/html/file_module_x86_id_285.html) 在里面EAX每次向右注册一位。从寄存器移出的位被放置在进位标志 (CF) 中。我们可以用ADC http://x86.renejeschke.de/html/file_module_x86_id_4.html将进位标志 (0/1) 的值添加到 ASCII '0' 以获得 ASCII 值 '0` 和 '1'。我们以相反的顺序将这些字节放入目标缓冲区,因为我们是从右向左移动这些位。

BITS_TO_DISPLAY可以设置在 1 到 32 之间(因为这是 32 位代码)。如果您对寄存器的底部 8 位感兴趣,请将其设置为 8。如果要显示 32 位寄存器的所有位,请指定 32。

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

显示寄存器内容 的相关文章

随机推荐

  • DSP——获取所有频率的幅度

    这个问题与 DSP 音频处理 squart还是log来利用fft https stackoverflow com questions 20057831 dsp audio processing squart or log to levera
  • 标准程序的用途列表

    我正在搜索 SAP 表的使用 我想知道桌子在哪里S083用于 SAP 标准程序 我已经搜索过 使用地点 列表 但我只得到了自创程序 没有得到SAP标准程序 有人知道如何在 SAP 标准程序中搜索表使用吗 为了能够使用 SAP 标准编码的使用
  • 如何选择列值以特定字符串开头的行?

    如何选择列值以特定字符串开头的行 例如 我想选择 姓名 列以 先生 开头的行 你可以做 select from mytable where name like Mr See http www sqlite org lang expr htm
  • 无法在 Maven 插件上使用注释设置参数

    我正在尝试开发一个 Maven 插件 但当我使用 Parameter 注释时它不起作用 我的依赖项
  • 图像地图区域聚某些坐标 Firefox 不起作用,IE 起作用

    我遇到了图像映射 HTML 问题 没有样式和 js 的工作示例 http www download lagunawebdesign pl bug http www download lagunawebdesign pl bug img sr
  • 如何在spark中配置hbase?

    Spark连接hbase的步骤是什么 我有两者的主地址 我是否只需将 hbase 地址添加到 Spark 类路径中 这篇关于 Spark 与 HBase 连接的文章应该会有所帮助 http www vidyasource com blog
  • 没有唯一标识符的 Bootstrap 崩溃

    我正在尝试以不需要唯一标识符的方式使用引导折叠插件 通常 页面上通常有一个或几个可折叠元素 但我的元素是动态生成的 传递索引键是多余的 现在发生的情况是 如果我将折叠切换为element2 它会崩溃element1 显然是因为他们有相同的I
  • 优先连接Wifi [无互联网]?

    我有个问题 我开发了一个android应用程序 它也应该连接到无线网络 没有互联网 只是为了控制机器人 网页界面 10 10 0 1 我的问题 如果我连接到机器人 wifi Android 会阻止连接并连接到我的默认家庭 WLAN 我可以更
  • 如何在应用程序中禁用 Aero Snap?

    是否可以在 WPF 应用程序中禁用 Windows 7 的自动窗口停靠功能 我最近需要对一个自定义的 可调整大小的ResizeMode CanResizeWithGrip没有窗口装饰的 WPF 窗口 没有标题栏和按钮 我用了DragMove
  • 如何在 iOS 7 应用程序上启用后台更新

    如何让我的应用程序使用 iOS 7 后台更新功能 我注意到一些应用程序已经做到了这一点 但似乎并不是所有应用程序都是自动的 根据iOS 7 的新功能 https developer apple com library ios release
  • 是否可以在 Chrome 检查器中过滤选项请求?

    我正在构建一个使用 CORS 与其服务器进行通信的 Web 应用程序 这意味着每个请求之前都有一个带有 OPTIONS 方法的请求 是否可以在检查器中过滤掉它们 它在网络选项卡上造成了很多不必要的混乱 是的 您可以使用 method OPT
  • 属性错误:“用户”对象没有属性“is_admin”

    我通过扩展 AbstractBaseUser 自定义了用户模型 用户名仅接受电子邮件 ID 这是模型 class User AbstractBaseUser PermissionsMixin email models EmailField
  • 修改包含数据的列类型,而不删除数据

    我有一个专栏 我认为该专栏的声明是错误的 它包含数据 我不希望丢失数据 我希望将定义从 varchar max 更改为 varchar 整数 我的印象是我不能只改变列类型 最好的方法是创建临时列 column2 将数据从有问题类型的列传输到
  • Subversion 更新问题

    当我尝试更新我的存储库时 出现以下错误 有人能解释一下这是什么意思吗 命令 更新错误 网址错误 http mysvn foo 错误 现有目录错误 C SVN MyProj NinjectModules Models 不匹配错误 预期 URL
  • 保留 SQL 中的文本格式

    我有一个文本区域 可将其内容插入到 SQL 表中 有没有办法保留文本的格式 然后在 HTML 中使用它 我假设您正在谈论保留换行符 Either 输出 标签内的文本 or 在插入数据库之前将换行符转换为 标记 例如 PHP 中的 nl2br
  • R 噩梦:Yosemite、R、RStudio 和 Homebrew

    我使用配备 OS X Yosemite 10 10 2 的 MacBook Pro 13 Retina 2013 年末 我不希望我最大的敌人遇到这种情况 也许吧 噩梦按时间顺序排列 从官方网站下载 R 和 RStudio 运行这两个应用程序
  • 将数组数据分解为spark中的行[重复]

    这个问题在这里已经有答案了 我有一个数据集 如下所示 FieldA FieldB ArrayField 1 A 1 2 3 2 B 3 5 我想爆炸数据数组字段所以输出将如下所示 FieldA FieldB ExplodedField 1
  • 提高 Python Tesseract OCR 的准确性

    我在用pytesseract https pypi org project pytesseract 随着openCV https pypi org project opencv python 在 Python 中的简单 django 应用程
  • 无法使用 Apache FOP 生成 PDF

    我正在尝试使用 Apache FOP 使用 XML 数据和 XSL 样式表创建 PDF 但我不断收到以下错误 org apache fop apps FOPException org apache fop fo ValidationExce
  • 显示寄存器内容

    您好 我需要帮助显示寄存器的内容 我的代码如下 我已经能够显示数据寄存器的值 但我想显示标志状态 例如 1 或 0 如果还显示其他寄存器 如 esi ebp 的内容 将会很有帮助 我的代码没有打印标志的状态 我缺少什么 section te