代码之家  ›  专栏  ›  技术社区  ›  Nikolay Atanasov

简单的hello world aseembly程序打印垃圾

  •  1
  • Nikolay Atanasov  · 技术社区  · 7 年前

    我正在使用x86程序集制作一个简单的程序,比较两个单词,如果它们相等,就打印出来(我知道它的usless,我只是在学习和测试东西),它工作正常,但在得到答案后,我立即打印出大量垃圾,我不明白是什么导致了这个错误

        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
    

    输出:

    enter image description here

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   mhawke    7 年前

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

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

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

    将其更改为:

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