我有以下代码可以打印传递给的参数数量./main
。请注意fmt
该rodata
部分中的。我已经包括了新行\n
,就像 C中一样
,但是它不是打印新行而是打印:
参数数量:1 \ n
我的代码是:
;main.asm
GLOBAL main
EXTERN printf
section .rodata:
fmt db "Number of parameters: %d \n", 0
section .text:
main:
push ebp
mov ebp, esp ;stackframe
push dword[ebp+8] ;prepara los parametros para printf
push fmt
call printf
add esp, 2*4
mov eax, 0 ;return value
leave ;desarmado del stack frame
ret
我知道在0和“ Number …”之后包含10 fmt
将打印它,但我想printf
这样做。我用 NASM 汇编代码,然后通过 GCC
将其链接以创建我的可执行文件。
当您在 NASM中 对字符串使用双引号或双引号时,它不接受 C 样式转义序列。在Linux上,您可以这样编码\n
为ASCII 10:
fmt db "Number of parameters: %d", 10, 0
还有一种选择。 NASM 支持反引号(反引号),这允许 NASM 将它们之间的字符作为 C 样式转义序列进行处理。这也应该工作:
fmt db `Number of parameters: %d \n`, 0
请注意:这些不是单引号,而是 反引号
。NASM文档中对此进行了描述:
3.4.2字符串
字符串最多由八个字符组成,这些字符包含在单引号(’…’),双引号(“
…”)或反引号(...
)中。单引号或双引号等效于NASM(当然,用单引号引起来的常量可以使双引号出现在反引号中,反之亦然);这些内容按原样表示。
用反引号引起来的字符串支持C样式的特殊字符转义 。
本文向大家介绍汇编语言实现打印杨辉三角,包括了汇编语言实现打印杨辉三角的使用技巧和注意事项,需要的朋友参考一下 计算杨辉三角形的前n(n<=10)行,并显示在屏幕上。要求计算及显示 用子程序形式实现。其显示格式为: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
在这个链接中,rustyx提到他使用了一个调试虚拟机和以下标志来获取java字节码的汇编指令 我用sudo apt get install openjdk-17-dbg安装了调试虚拟机 我使用命令java-XX:UnlockDiagnosticVMOptions-XX:PrintAssembly Main 我习惯用C和gdb来完成这项工作,但无法用java来完成。printAssembly只打印指
我正在尝试在macOS上的汇编x86_64中打印整数。我已经知道大约有3/4的答案,但我无法解决我的问题。 现在,我会满意地把它倒着印出来。这是代码: mov rax,123;将数字移动到rax寄存器中 调用get_backwards过程 除法和mult需要两个寄存器,一个用于商,一个为余数。对剩余部分进行异或运算,以便清除所有垃圾。 mov转换为rcx,10,这样我就可以得到与数字的最后一位相对
问题内容: 在Python 2中,我使用了: 我试过了: 问题答案: 在Python2中,是一个引入了以下语句的关键字: 在Python3中,是可以调用的函数: 在这两个版本中,都是一个运算符,它在左侧需要一个字符串,在右侧需要一个值或一个值的元组或一个映射对象(如)。 因此,您的行应如下所示: 另外,对于Python3和更高版本,建议使用-style格式而不是-style格式: Python 3
我试图在x86_64汇编中打印一个浮点数,但它只是将值打印为零。 关于这一点已经有几个问题了。一个问题似乎通过确保您设置在%al中使用的向量寄存器的数量得到了解决。另一个表明您需要16个字节的堆栈对齐。但是,我正在做这两件事,但仍然没有得到正确的输出。 这是我的程序:
问题内容: 我尝试从我的汇编代码中使用,这是一个最小示例,应仅打印到stdout: 我用 当我运行它时,它似乎可以正常工作:该字符串已打印出来,退出状态为: 但是当我尝试捕获文本时,很明显,某些功能无法正常工作: 该变量应具有值,但为空。 我的用法有什么问题? 问题答案: 使用 诸如printf之类的stdio函数后,请使用而不是原始syscall。 正如Michael解释的那样,可以动态链接C库