【问题标题】:How to print only a certain number of bytes with C-printf() with Nasm assembler?如何使用 Nasm 汇编器使用 C-printf() 仅打印一定数量的字节?
【发布时间】:2014-06-06 05:30:14
【问题描述】:

我正在尝试使用 C 的 printf 仅打印字符串的特定字节数。我正在使用 Nasm 汇编程序。问题是我不能使用例如“%.5s”,因为我需要打印的字节数发生了变化。
我有这样的事情:

extern printf

section .data     
format:   db "%s",10,0      
msg:      db    "0123456789ABCDEF"

section .text   
    global main    
    main:

push msg       
push format                 
call printf           
add esp,12      

mov eax,1           
mov ebx,0        
int 80h

【问题讨论】:

  • 为什么这是一个汇编问题?您正在使用 C 函数,因此解决方案与在 C 中的解决方案相同。使用汇编程序只是一个不重要的细节。
  • 但在 C 中我只需要写 printf("(%.*s)", n, string);其中 n 是我要打印的字节数,但在汇编程序中我不能这样做。
  • 为什么不能在汇编器中这样做?
  • 这不是汇编指令。
  • @olmanqj:它只是在调用printf 之前将另一个参数压入堆栈,就像您对msg 所做的那样。

标签: c assembly printing printf nasm


【解决方案1】:

"*printf("(%.s)", n, string);" 在汇编中:

...
format: db "%.*s",10,0
n:      dd 5
...
push msg
push dword [n]
push format
call printf
add esp,12     ; 4 * count of pushes

考虑推送的“反向”顺序。

顺便说一句:您忘记了消息中的最后一个 0。

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 2013-12-14
    • 2015-09-16
    • 2019-07-06
    • 2011-10-17
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多