【问题标题】:Simple hello world aseembly program prints out trash简单的 hello world 汇编程序打印出垃圾
【发布时间】:2018-04-08 21:42:13
【问题描述】:

我正在使用 x86 程序集制作一个简单的程序,该程序比较两个单词并打印出它们是否相等(我知道它没用,我只是在学习和测试东西)它工作正常,但在答案之后我被打印出来有很多垃圾,我不明白是什么导致了这个错误

    SECTION .bss
    SECTION .text
    SECTION .data
    HelloMsg: db "Helllo",10
    HelloLength: equ $-HelloMsg

    HellloMsg: db "Helllo",10
    HellloLength: equ $-HellloMsg

    One: db "First",10
    OneLen: equ $-One

    Two: db "Second",10
    TwoLen: equ $-Two

    global _start

    _start:
    nop
    mov eax,4
    mov ebx,1
    mov ecx,HellloLength
    mov edx,HelloLength

    cmp ecx,edx
    je true
    mov ecx,One
    mov edx,OneLen
    int 80H

    true:
    mov ecx,Two 
    mov edx,One
    int 80H

    MOV eax,1
    mov ebx,0
    int 80H

输出:

对不起,如果我问了一个愚蠢的问题或者我的程序很难阅读

【问题讨论】:

    标签: linux assembly


    【解决方案1】:

    代码中有一个小错误。当调用write系统调用edx时必须包含要写入的字符串的长度。但是,如果比较字符串的长度相同(true: 情况),您的代码是:

    true:
    mov ecx,Two
    mov edx,One
    int 80H
    

    One 指的是字符串“First”,而不是字符串Two 的长度。

    通过将其更改为来修复它:

    true:
    mov ecx,Two
    mov edx,TwoLen
    int 80H
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2015-05-04
      • 1970-01-01
      • 2022-07-13
      • 2011-02-03
      相关资源
      最近更新 更多