gpt4 book ai didi

assembly - nasm:如何填充字符串的开头,使其在对齐边界处正确结束

转载 作者:行者123 更新时间:2023-12-02 02:26:37 26 4
gpt4 key购买 nike

我不知道如何填充字符串的开头,使其在对齐边界处正确结束:

%macro string 1
_unaligned:
; some preprocesor expression comes here
db %1
_aligned:
%endmacro

经过几个小时的尝试不同的解决方案,我仍然没有任何解决方案。请问有人可以帮忙吗?

编辑:

这是它应该如何工作的真实示例(对于 32 位代码):

%define LAST 0

%macro xword 2
%strlen len %1
; pad - some preprocassor magic comes here
db %1
NAME__%2 db len
LINK__%2 dd LAST ; must be aligned !!!
CODE__%2 dd code
PAR__%2
%define LAST PAR__%2
%endmacro

用法:

xword '测试',test01

创建结构(例如 $ = 0x0001):

0x0001  
0x0002
0x0003 db 'T'
0x0004 db 'E'
0x0005 db 'S'
0x0006 db 'T'
0x0007 db 4
0x0008 dd 0 ; LAST (must be ALIGNED)
0x000C dd code

不得有过多的填充,因为有必要节省尽可能多的内存。

最佳答案

这应该可以工作,尽管它不是最佳的,因为在某些情况下它可能会添加比必要的更多的填充:

%macro string 1
%strlen numchars %1
align 4, db 0
times (4-numchars)&3 db 0
db %1
%%_aligned:
%endmacro

将 4 替换为您想要的任何对齐方式(并将 3 与您的对齐方式减 1)。


编辑:这是另一个版本,应避免添加不必要的填充:

%macro string 1
%strlen %%numchars %1
%%loc equ ($-$$)
times (4-(%%loc+%%numchars))&3 db 0
db %1
%%_aligned:
%endmacro

此版本假设您使用此宏的所有部分的开头至少与您想要对齐数据的2的幂相同。

关于assembly - nasm:如何填充字符串的开头,使其在对齐边界处正确结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65562029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com