assembly - 从 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?是否有任何文档可以提供对这两种语法等价的理解?
解决方案
推荐阅读
- r - 修改 base::quit 默认值
- c# - 如何在 Kentico 开发过程中暴露错误
- mongodb - 如何用父文档展平动态字段 - Spring data Mongo DB
- origen-sdk - 如何使用 2.5/2.6 等更新的 Ruby 版本运行 origen?
- navigation - 消费 OpenRouteService 方向结果
- r - 为什么'rbind.data.frame'将日期转换为数字?
- python - 分配给列表的 Pythonic 方式
- apache-flink - Flink 1.7.2 start-scala-shell.sh 找不到或无法加载主类 org.apache.flink.api.scala.FlinkShell
- mysql-5.7 - Mysql - 提供给函数 st_within 的 GIS 数据无效
- php - 在正文中查找不区分大小写的单词或句子 - PHP