首页 > 解决方案 > 从 NASM 到 MASM

问题描述

我检查了有关 masm 的 windows 文档,还搜索了两种语法之间的一些等价关系,但没有找到任何东西。我试图将此代码从 nasm 更改为 masm:

NASM 版本:

section .data
    text1 db "What is your name?"
    text2 db "Hello, "

section .bss
    name resb 16

section .text
    global _start

_start:
    call _printText1
    call _getName
    call _printText2
    call _printName
    
    mov rax, 60
    mov rdi, 0
    syscall
    ret

_getName:
    mov rax, 0
    mov rdi, 0
    mov rsi, name
    mov rdx, 16
    syscall
    ret

_printText1:
    mov rax, 1
    mov rdi, 1
    mov rsi, text1
    mov rdx, 19
    syscall
    ret

_printText2:
    mov rax, 1
    mov rdi, 1
    mov rsi, text2
    mov rdx, 7
    syscall
    ret

_printName:
    mov rax, 1
    mov rdi, 1
    mov rsi, name
    mov rdx, 16
    syscall
    ret

MASM 版本:

.data
    text1 db "What is your name?"
    text2 db "Hello, "

.data?
    name resb 16

.code
main proc
    call _printText1
    call _getName
    call _printText2
    call _printName
    
    mov rax, 60
    mov rdi, 0
    syscall
    ret

_getName:
    mov rax, 0
    mov rdi, 0
    mov rsi, name
    mov rdx, 16
    syscall
    ret

_printText1:
    mov rax, 1
    mov rdi, 1
    mov rsi, text1
    mov rdx, 19
    syscall
    ret

_printText2:
    mov rax, 1
    mov rdi, 1
    mov rsi, text2
    mov rdx, 7
    syscall
    ret

_printName:
    mov rax, 1
    mov rdi, 1
    mov rsi, name
    mov rdx, 16
    syscall
    ret

main endp
end

我不明白的是:resb 的 MASM 版本是什么?根据我发现的 .data?与.bss 相同,因此我对其进行了更改。另外我可以使用什么来代替全局_start?是否有任何文档可以提供对这两种语法等价的理解?

标签: assemblysyntaxnasmmasm

解决方案


推荐阅读