我正在努力寻找一种方法来检索GAS中第一个命令行参数的第一个字符。为了澄清我这里的意思,我是如何在NASM中做到这一点的:
main:
pop ebx
pop ebx
pop ebx ; get first argument string address into EBX register
cmp byte [ebx], 45 ; compare the first char of the argument string to ASCII dash ('-', dec value 45)
...
编辑:将文字转
我正在学习程序集以及如何从C调用nasm函数,所以我编写了一个简单的代码来尝试它:
这是我的test.c文件:
#include <stdio.h>
extern int test(int c);
int main(int argc, char ** argv){
int x = 10;
printf("Original value: %d\nUpdated value: %d\n",x,test(x));
return 0;
}
这是我的test.nasm文件:
; 32 bit
SECTION .text
global test
我正在阅读CS:APP第三版(Ch3 )。PIC3.7气体装配代码)
long exchange(long* xp, long y)
{
long x = *xp;
*xp = y;
return x;
}
exchange:
movq (%rdi), %rax
movq %rsi, (%rdi)
ret
我想知道为什么下面的汇编代码(1.ASM:转换为nasm)不能工作?
我已经使用c2nasm将工作c函数分解成nasm汇编源代码。它与原来的装配完全不同。
main.cpp:
int main()
{
long a = 4;
// long
我有这个: $ make build
read.o: In function `_start':
read.asm:(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): first defined here
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
我有由NASM创建的简单汇编文件。我想把他们和tcc联系起来。为了进行调试,我希望在程序集代码中使用printf()。但是当我这样做的时候,tcc在tcc: undefined symbol 'printf'上失败了。
下面是再现错误的最小示例代码:
extern printf
hello: db "Hello world!",0
global main
main:
push hello
call printf
pop eax
ret
控制台:
nasm -felf hello.asm
tcc hello.o
tcc:未定义符号“pr
我在NASM中编写了一个引导加载程序,它将一个64 in的程序数据从磁盘加载到内存中,由地址0060:0000、SEG:OFF启动。我通过编写一些代码组装(NASM)并将其放入磁盘来测试我的项目的这一部分。工作得很好!
整个项目,它有点复杂,完全写在程序集中。因此,我决定,我将使用C与内嵌程序集的进一步。为此,我下载了一个名为open-watcom-c-win32-1.9.的环境,我有一个简单的C代码,用于测试一些WatCom编译器和链接器指令,以生成原始BIN文件。bin文件是生成的,但不会在引导加载程序将其加载到内存后运行。我尝试了很多wlink指令来设置段和偏移值,但是没有工作。
voi
我在linux上用nasm编写汇编语言程序。问题是在使用gdb进行调试时,它不会在_start函数中执行步骤,并给出“单步执行直到退出函数_start”的消息。
此外,当我在第1行之后设置断点时,它说:
(gdb) break 2
Note: breakpoints 1 and 2 also set at pc 0x4000b0.
Breakpoint 3 at 0x4000b0: file new3.asm, line 2.
(gdb) break 3
Note: breakpoints 1, 2 and 3 also set at pc 0x4000b0.
Break
我试图编写一个引导加载程序,以便在dos-box中使用,我编写了以下代码
[BITS 16] ;tell the assembler that its a 16 bit code
[ORG 0x7C00] ;Origin, tell the assembler that where the code will
;be in memory after it is been loaded
JMP $ ;infinite loop
TIMES 510 - ($ - $$) db 0 ;fill the rest of sector with 0
DW 0xAA55