标签: yasm

简单的asm程序与MacOS Mountain Lion中的yasm

我想编译并执行一个非常简单的64位程序.

section .text 
global _start 
_start: 
   mov     rdx,len 
   mov     rcx,msg 
   mov     rbx,1 
   mov     rax,4 
   int     0x80 
   mov    rbx,0 
   mov     rax,1 
   int     0x80 
section .data 
msg     db      "Hello, world!",0xa 
len     equ     $ - msg 
Run Code Online (Sandbox Code Playgroud)

编译它的行:

yasm -f elf64 -g dwarf2 example.asm

$ yasm --version
yasm 1.2.0
Run Code Online (Sandbox Code Playgroud)

也尝试了另一种格式macho[|32|64], elf[|32] bin,他们都没有成功.

链接它的行:

gcc -o example example.o

ld: warning: ignoring file example.o, file was built for unsupported file format ( 0x7f 0x45 0x4c 0x46 0x 2 0x 1 0x 1 0x 0 …
Run Code Online (Sandbox Code Playgroud)

macos assembly gcc yasm

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

在YASM或NASM程序集中执行退格

我有一个程序以原始模式读取字符。即,输入的任何字符都将立即读取而不是被缓冲。

我想知道如何执行退格键。也就是说,当我按下Backspace键时,它应该删除左侧的字符并将光标向左移动一个位置。

我试过输出一个Backspace字符,再跟一个Space字符。这会删除左侧的字符,但是由于某种原因会将光标向右移动两个空格。

我也尝试过自行输出Backspace字符。这会将光标向左移动一个空格,但不会删除该字符。

我的汇编程序是YASM,我正在使用64位Linux。以下是一些相关代码。

首先,这是我用来输出字符的函数:

printchar:                       
        mov     [buf], al      ; Backup whatever was in al.
                               ; buf is declared as resb 1 in section .bss
        mov     edx, 1
        mov     ecx, buf
        mov     ebx, 1
        mov     eax, 4
        int     0x80
        mov     al, [buf]    ; restore char that was previously in al
        ret
Run Code Online (Sandbox Code Playgroud)

以下代码显示退格键。它不会像常规的Backspace一样将光标向左移动一个位置。

    mov     al, 0x08 ; ASCII for Backspace
    call    printchar
Run Code Online (Sandbox Code Playgroud)

此代码打印一个Backspace,后面跟一个空格。它将光标向右移动两个空格,而不是一个空格。

    mov     al, 0x08 ; ASCII for Backspace
    call    printchar
    mov     al, 0x20 ; ASCII for …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 nasm yasm

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

'000000q'是什么意思?

我正在用这本教科书学习x86_64汇编语言(yasm).在那里,我遇到了以下定义文件访问标志的行:

O_RDONLY        equ    000000q
O_WRONLY        equ    000001q
O_RDWR          equ    000002q
Run Code Online (Sandbox Code Playgroud)

问题是他们的价值观是什么意思?什么q代表什么?

assembly x86-64 nasm yasm

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

x86 程序集:尝试反转打印阵列时出现分段错误(核心已转储)

在我的代码中,我试图反向打印一个数组。我的两个主要想法是使用堆栈和 LIFO 属性来完成它,或者使用循环作为从 10 到 0 零的索引来反向访问元素。由于堆栈方法的对齐问题,我选择了第二个。

我对组装很陌生,希望能得到一些帮助,以了解我的错误在哪里。提前致谢 !

DEFAULT REL
; external functions for inputs/outputs printf and scanf/printf
extern printf
extern scanf

section .data
prompt      db "Entrez un entier : ",0
longIntFormat  db "%ld",0


section .bss
entier resb 10       ; array of 10 integers


section.text
push rbp

    mov rcx, 0  
    mov rdx, 0     ; initialise counter
    lea rcx, [entier]    ; load array into register rcx

; fills the array with user input
_getLoop:
; call printf
    lea rdi,[prompt]
        mov …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 segmentation-fault yasm

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

调试使用yasm创建的汇编代码

我需要一些帮助,找到并使用一个好的调试器,用于在64位Linux上与yasm组装的asm代码.gdb调试器一直抱怨没有加载符号表.stackoverflow上有人建议使用-dstabs开关组装,但这对我来说没有任何区别.ddd也没有什么不同.

如果我能找到摆脱"无符号表加载"问题的方法,gdb就不会那么糟糕.我还需要能够查看寄存器和其他声明的内容.

我使用yasm -f elf -m amd64 file.asm和我链接来组装我的asm文件ld file.o -o file.使用-l开关使用yasm创建.lst文件似乎也不起作用.

我发现的关于这个问题的所有建议似乎与使用gcc作为链接器而不是ld有关.我需要能够与ld链接.

x86 assembly x86-64 nasm yasm

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

YASM mov 指令给出错误:操作数 1 的大小无效

我正在尝试做一些来自 TASM 的基本 YASM,这行代码会出错:

mov [var], 7
Run Code Online (Sandbox Code Playgroud)

我已经定义,像这样的变量:var db 5
即使在尝试这样做var: db 5之后仍然出错并说:

错误:操作数 1 的大小无效

assembly tasm yasm

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

汇编中的 FizzBu​​zz - 分段错误

我正在尝试在 Assembly 中编写 FizzBu​​zz,但我一直看到分段错误。到目前为止,我已经确定这不是我的打印例程(因为我已经删除了它们的内容并且问题仍然存在)并且错误隐藏在主函数中的某个位置。

当我运行程序时,我得到了这个输出:

fizzSegmentation fault
Run Code Online (Sandbox Code Playgroud)

让我相信这不是使用除法和查找余数的问题。但我可能是错的,我已经两年没有做过汇编了......

SECTION .data
global _start
    fizz: db "fizz", 4
    buzz: db "buzz", 4

SECTION .bss
    counter: resb    1

SECTION .text
_start:

    mov ax,0
    mov [counter],ax

main_loop:

    cmp ax,100          ;from 0 to 100
    je  exit            ;
    mov bl,3            ;divisor
    mov ah,0            ;here will be a remainder
    div bl              ;divide
    cmp ah,0            ;compare the remainder with 0
    je  print_fizz      ;print fizz if they equal
    mov bl,5            ;new divisor
    mov ah,0            ;do I have to do …
Run Code Online (Sandbox Code Playgroud)

assembly fizzbuzz yasm

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

标签 统计

assembly ×7

yasm ×7

x86-64 ×4

nasm ×3

fizzbuzz ×1

gcc ×1

macos ×1

segmentation-fault ×1

tasm ×1

x86 ×1