标签: fasm

Gnu汇编(GAS)优化

我实际上是在学习装配,我和Gas一起去了,但问题是:

1)我只知道英特尔语法,我在一个页面中看到,在某些情况下,具有intel语法的Gas不是很好.这是正确还是我错了?我在谈论这个网站:

http://wiki.osdev.org/FASM

2)然后我也看到(我不记得页面)事实气体可以在几个架构中组装也减慢了组装的程序.这样对吗?

3)你推荐哪种汇编程序可以产生高度优化的代码?我在其他问题中看到,在某些情况下,每个汇编程序都可以转换为不同的操作码.我在YASM,FASM,GAS和NASM之间,但其他推荐被接受.知道FASM非常快......

非常感谢!保持这个伟大的社区!

optimization assembly gnu-assembler fasm

2
推荐指数
1
解决办法
887
查看次数

FASM - 压缩"缓冲区db 0,0,0,0,0,0 ......"

我很幸运地遇到了一些在FASM中编译得很好的NASM代码只改变了一行;

buffer times 64 db 0
Run Code Online (Sandbox Code Playgroud)

这在NASM中工作正常,但在FASM中没有 - 我必须写:

buffer db 0, 0, 0, 0, 0, 0, ...
Run Code Online (Sandbox Code Playgroud)

必须有一个更紧凑的方法来做到这一点.

assembly nasm fasm

2
推荐指数
1
解决办法
973
查看次数

FASM - 如果文件存在 - 使用GetFileAttributes - INVALID_FILE_ATTRIBUTES值?

我在FASM中使用GetFileAttributesA来确定文件是否存在.我知道如果文件不存在,返回值将为INVALID_FILE_ATTRIBUTES,但我不知道如何检查此值.

我的代码:

invoke GetFileAttributes,lpFileName
cmp    eax,IDK WHAT TO CHECK FOR
je     notfound
jne    found
invoke ExitProcess,0
Run Code Online (Sandbox Code Playgroud)

看作编译器无法将INVALID_FILE_ATTRIBUTES识别为值:

cmp    eax,INVALID_FILE_ATTRIBUTES
Run Code Online (Sandbox Code Playgroud)

不管用.

有没有人知道这个常数的值,所以我可以手动输入它?

任何帮助表示赞赏.谢谢


在JensBjörnhager的回复之后,以下是其他任何感兴趣的人的工作代码:

invoke GetFileAttributes,lpFileName
cmp    eax,-1
je     notfound
jne    found
invoke ExitProcess,0 
Run Code Online (Sandbox Code Playgroud)

甚至:

invoke GetFileAttributes,lpFileName
cmp    eax,$ffffffff
je     notfound
jne    found
invoke ExitProcess,0 
Run Code Online (Sandbox Code Playgroud)

再次感谢JensBjörnhager!

assembly winapi file-exists fasm

2
推荐指数
1
解决办法
3757
查看次数

FASM - 将字符串传递给Delphi DLL

我在Delphi XE2中使用以下代码编写了一个DLL:

procedure xMain(MSG:String);export;
begin
  MessageBox(0,PWideChar(MSG),'Title',0);
end;

exports xMain;
Run Code Online (Sandbox Code Playgroud)

现在,我在FASM应用程序中导入此函数,如下所示:

library  dllfile, "testdll.dll"

import   dllfile,\
         xMain,   "xMain"
Run Code Online (Sandbox Code Playgroud)

利用就是如此:

section ".data" data readable writeable

szMSG     db "Message from FASM application!",0

section ".code" code readable executable

invoke    xMain,szMSG
Run Code Online (Sandbox Code Playgroud)

但是生成的消息框会出现扭曲的字符,如下所示:

在此输入图像描述

这是函数调用的确切结果.

我该如何解决这个问题?

delphi dll messagebox dllimport fasm

2
推荐指数
2
解决办法
2330
查看次数

ASM x86 FASM中的函数参数

如何将参数传递给Assembly中的函数?我确实推了Last Param,推动Second Param,推进First Param ..

但是我无法访问MehFunction中的参数..我正在做的事情崩溃了程序..

format PE console                                ;Format PE OUT GUI 4.0
entry main

include 'macro/import32.inc'

section '.idata' import data readable           ;Import Section.
library msvcrt,'msvcrt.dll'
import msvcrt, printf, 'printf',\
exit,'exit', getchar, 'getchar'

section '.data' data readable writeable         ;Constants/Static Section.
InitialValue dd 0

section '.code' code readable executable
main:    
   push 67
   push 66
   push 65
   call MEH

   call [getchar]
   mov eax, 0
   ret 0

MEH:
   push ebx
   mov ebp, esp
   sub esp, 0

   mov eax, [ebp + …
Run Code Online (Sandbox Code Playgroud)

parameters x86 assembly function fasm

2
推荐指数
1
解决办法
3554
查看次数

您组装或编译OS源代码的格式是什么?

在编写内核和操作系统时,无论是在汇编还是更高级别,都需要以平面二进制文件的形式汇编或编译代码,对吧?

你无法组装它或将它编译成ELF格式之类的东西,对吧?

如果这样做,处理器会将格式错误地解释为代码并开始执行意外的指令.

毕竟,您可以格式化可执行二进制文件,以便操作系统知道代码和日期段的开始和停止位置,然后将它们加载到GDT中并将它们添加到分页结构中.

但是如果您正在编写的程序实际上是一个操作系统,那么它将不会像用户应用程序那样在操作系统上运行,因为它操作系统,对吧?

也就是说,操作系统在金属上运行,而不是在任何其他软件上运行.

我在这里纠正吗?

assembly operating-system binaryfiles fasm

2
推荐指数
1
解决办法
76
查看次数

使用'ORG 0x0000'时,在8086实模式下从内存中读取

我一直在搞乱x86-16程序集并使用VirtualBox运行它.出于某种原因,当我从内存中读取并尝试将其作为角色打印时,我得到的结果与我期望的完全不同.但是,当我将字符硬编码为指令的一部分时,它工作正常.这是代码:

ORG 0
BITS 16

push word 0xB800        ; Address of text screen video memory in real mode for colored monitors
push cs
pop ds                  ; ds = cs
pop es                  ; es = 0xB800
jmp start

; input = di (position*2), ax (character and attributes)
putchar:
    stosw
    ret

; input = si (NUL-terminated string)
print:
    cli
    cld
    .nextChar:
        lodsb   ; mov al, [ds:si] ; si += 1
        test al, al
        jz .finish
        call putchar
        jmp .nextChar
    .finish:
        sti
        ret …
Run Code Online (Sandbox Code Playgroud)

assembly nasm bootloader fasm x86-16

1
推荐指数
1
解决办法
1116
查看次数

如何在部分上使用fixups属性?

将“修正程序”应用于某个部分时究竟能做什么?在一个fasm示例中,我找到了以下部分,我真的不确定fixups属性的作用,我在fasm文档中找不到有关此信息的太多信息。

section '.reloc' fixups data readable discardable
if $=$$
    dd 0,8          ; if there are no fixups, generate dummy entry
end if
Run Code Online (Sandbox Code Playgroud)

windows assembly x86-64 portable-executable fasm

1
推荐指数
1
解决办法
236
查看次数

为什么汇编程序员想要从这个位置减去ebp而不是esp?

关于在x86汇编语言中设置堆栈帧的ebp和esp的使用,我有点混淆.在以下代码中:

section '.code' code readable executable        ; define the code section of the file
main:                ;main label is where execution begins
push ebp
mov ebp,esp          ;set up the base ptr
sub ebp,4            ;subtract 4 from ebp
mov dword [esp],msg
call [printf]
mov dword [esp],p   ; pass pause>nul cmd to system to hold the box open
call [system]
mov dword [esp],0              ;pass NULL to exit
call [exit]   
Run Code Online (Sandbox Code Playgroud)

程序员从ebp中减去了4,但我不确定原因.通常,我在这里看到ESP减去而不是EBP.在这里从EBP中减去的目的是什么?

x86 assembly stack-frame fasm

1
推荐指数
1
解决办法
254
查看次数

如何从 FASM 执行 DOS 的 COMMAND.COM 命令?

是否有任何 DOS 函数来执行包含 command.com 行的字符串?我需要类似 C 的东西system(),但对于 DOS 和 FASM。

assembly dos fasm x86-16

1
推荐指数
1
解决办法
81
查看次数