数天来,我一直在努力寻找答案,最后在这里发布以寻求帮助.这项练习对我来说纯粹是学术性的,但是到了某种程度,我只需要了解为什么这行不通或我做错了什么. section .text global _start _start: pop eax pop ebx pop ecx _exit: mov eax, 1 mov ebx, 0
我正在研究一种通过将整数反复除以10并收集余数然后再打印来打印多个数字整数的方法.这是有问题的代码段: 划分: ; initial division mov ax, 111 ; number we want to print mov ch, 10 ; we divide by ten to siphon digits div ch ; divide our numb
当用户在程序中按nasm编写的特殊按键(如F1-12)时,我希望收到中断.我只需要在主要功能开始时等待功能击键.我知道使用BIOS的int 16h(返回扫描代码)是可能的.我如何在Linux下执行此操作?解决方法:所需的代码相当复杂.我最终想出了如何使用原始ioctl在C中检查F1,进行读取和写入的方法.
我在x86 asm中有一个简单的程序,它使z = x / y.关键是,除法时应正确编写代码,但不打印任何内容.没有输出.我不知道出什么问题了,因为当程序不使用eax,ebx等时,我无法调试. global main extern printf section .text main: finit fild dword[x] fild dword[y]
我有一个带有以下makefile的简单汇编程序: all : calc calc : calc.o gcc -m32 -g -o calc calc.o calc.o : calc.s nasm -f elf -g -F stabs calc.s 我尝试使用gdb对其进行调试,但始终显示: Single stepping until exit from function asc2int, which has no line num
我正在与NASM建立共享库.在该库中的某些函数中,我需要在C中称为静态变量的东西.基本上,我认为它在.data节中有一些空间: SECTION .data last_tok: dq 0 ; Define a QWORD 当我尝试在函数中访问last_tok时,就会出现问题. 我读了NASM Manual: 8.2 Writing Linux/ELF Share
您好StackOverFlowers! 我对整个linux事物非常陌生,我正在使用Cygwin尝试执行以下操作. 将测试文件通过解析器… ./parser<测试test.asm //工作并生成ASM代码 按照本教程中的描述执行此行,我不确定它到底是做什么的… nasm -f elf test.asm //工作 最后一行创建可执行文件(如果我
在DOS程序集中我们可以这样做: mov dl, 41h mov ah, 02h int 21h 但是Linux nasm x86汇编怎么样?解决方法: section .data msg db 'H' len equ $- msg section .text global _start _start: mov edx,len mov ecx,msg mov ebx,1 ;file de
我知道printf返回在EAX中打印的字符数.为什么printf将寄存器ECX更改为0?我的代码片段: push eax push intFormat call printf add esp,8 我在64位Linux发行版上运行我的代码.解决方法:如你所知,EAX将具有printf的返回值,但遵循CDECL调用约定(包括C库)的函数也可以破坏ECX和EDX
我是这个论坛的新手. 我对高级语言有一点经验(真的很少).差不多一个月前,我认为在Linux上选择nasm(IA-32)之后,看看汇编是如何工作的,这是一个好主意我开始从一个教程中学习. 现在,在结束之后,我尝试编写一个简单的程序,让计算机打印100个数字的列表(1 2 4 8 16 …),但我甚至无法做
我希望这些问题相当简单:( NASM编译器,Linux,x86英特尔语法) 第1部分: 我试图弄清楚如何使用Assembly程序的.bss部分来找到一种方法来存储值,例如操作( – * /)中的值到声明的变量.例如: section .bss variable: resb 50 ;Imaginary buffe
当我尝试研究内核的系统调用的返回值时,我找到了描述它们的表,以及我需要将它放在不同的寄存器中以使它们工作.但是,我没有找到任何文档说明我从系统调用获得的返回值是什么.我只是在不同的地方找到我收到的东西将在EAX寄存器中. TutorialsPoint: The result is usually returned
假设我在寄存器中有一个整数,我该如何打印?你能展示一个简单的示例代码吗? 我已经知道如何打印一个字符串,如“你好,世界”. 我正在Linux上开发.解决方法:如果您已经在Linux上,则无需自行进行转换.只需使用printf: ; ; assemble and link with: ; nasm -f elf printf-test.asm && gcc
1. 安装 sudo apt-get install nasm 这样nasm就安装好了,终端输入命令: nasm -version 输出版本信息就说明安装成功 2. 使用 创建"hello.asm"文件: touch hello.asm gedit hello.asm 在文件中输入下面的汇编代码 section .data hello: db 'Hello world!',10 ; 'Hello world
原文链接:https://www.cnblogs.com/san-fu-su/archive/2014/11/11/4089041.html 第一步:先判断系统是否已经安装了nasm--------------->打开终端,执行whereis nasm ;如果显示nasm: /usr/bin/nasm ,则已经安装;如果只显示nasm: ,则未安装。 第二布:去官网下载最新
我正在编写一个简单的程序来显示用户提供的名称.结果是我应该能够输入命令并获得预期的结果. 命令 ./hello John 结果 Hello, John. 然而,当程序开始显示名称时,它却没有.我认为它与计算参数的长度有关.请你们看看我的代码并告诉我你的想法? ; hello.asm ; ; Assemble: nasm -f
我这里有这个linux nasm代码,不会崩溃.使用printString结尾的ret 80指令不应该这个程序崩溃? bits 32 section .data hello: db 'Hello Linux assembly!!!!!!!!!!!!!!!!!!!',10,0 helloLen: equ $-hello anotherString db "hello im another string!!!!",
我正在尝试使用从命令行参数获取输入的NASM来创建程序.由于没有提供字符串长度,我正在尝试创建一个计算我自己的函数.这是我的尝试,它获取指向ebx寄存器中的字符串的指针,并返回ecx中字符串的长度: len: push ebx mov ecx,0 dec ebx count: inc ecx
只有两个文件,main.c和kernel.asm,我尝试使用NASM和GCC制作一个程序.内容如下: main.c中 #include <stdio.h> void Print_String() { printf("Hello World!\n"); } kernle.asm extern Print_String [section .text] global _start _start: call Print_String 编译和链
参见英文答案 > What happens if you use the 32-bit int 0x80 Linux ABI in 64-bit code? 1个 我编写了一个程序,它应该像for循环一样,打印一串文本一定次数. 这是代码: global _start section .da
试图学习NASM大会.我有一台64位机器,带有Ubuntu.最近我决定测试推送和弹出指令.我这样做: nasm -felf64 Test.asm 显然,在64位模式下不支持它们.好吧,没问题,我只需要做到32: nasm -felf Test.asm 现在,一如既往 gcc Test.o 但它现在告诉我 i386 architecture of input file '
我正试图找到一种方法让我的代码等待两秒钟才能继续.我在保护模式下使用nasm for Linux,所以我只能使用int 80h.我发现了一个名为“alarm”的系统调用(27),另一个称为“暂停”(29).但是,当我尝试使用它们时,程序会等待并完成,而不是继续执行.我还发现了另一个系统调用,sigaction,它
我有这个源代码: ; hello.asm a first program for nasm for Linux, Intel, gcc ; ; assemble: nasm -f elf -l hello.lst hello.asm ; link: gcc -o hello hello.o ; run: hello ; output is: Hello World SECTION .data ; data section msg:
嗨,我需要帮助显示寄存器的内容.我的代码在下面.我已经能够显示数据寄存器的值,但我想显示标志状态.例如1或0.如果还显示其他寄存器的内容,如esi,ebp,将会很有帮助. 我的代码不打印标志的状态..我错过了什么 section .text global _start ;must be declared for using gcc _
我正在尝试创建一个x86_64汇编程序,只要发送SIGTERM信号,就会显示“SIGTERM received”.我的应用程序直接使用Linux系统调用: %define sys_write 0x01 %define sys_rt_sigaction 0x0d %define sys_pause 0x22 %define sys_exit 0x3c %define SIGTERM 0x0f