linux asm 使用情况,x86 ASM Linux – 使用.bss部分

我希望这些问题相当简单:( NASM编译器,Linux,x86英特尔语法)

第1部分:

我试图弄清楚如何使用Assembly程序的.bss部分来找到一种方法来存储值,例如操作( – * /)中的值到声明的变量.例如:

section .bss

variable: resb 50 ;Imaginary buffer

section .text

add 10,1 ;Operation

;move the result into variable

所以,我知道有可能用内核intterupt来读取用户输入(但这涉及到字符串,但有没有办法将这个值复制到变量变量中,以便以后可以使用?这会更容易而不是必须推动和弹出两个东西上下堆栈.

第2部分:

有没有办法删除.bss部分中变量的值?换句话说,如果我想在.bss变量中存储一个新值,如果没有变量中的字符/值没有与新值复合,我怎么能这样做呢?

谢谢

解决方法:

section .bss

variable: resb 4

…符号变量现在指的是.bss部分中4字节存储的地址(即足以存储32位值).

section .text

...

mov eax, 123

mov [variable], eax

…将eax寄存器设置为123,然后将eax的值存储在符号变量寻址的位置.

mov eax, [variable]

…将当前存储在变量寻址位置的值读入eax寄存器.

mov eax, 456

mov [variable], eax

…存储一个新值,覆盖前一个值.

标签:x86,linux,assembly,nasm

来源: https://codeday.me/bug/20191001/1837860.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 x86 汇编语言实现从大到小排序的示例代码。该代码使用冒泡排序算法,可以输入最多 10 个数据,且每个数据必须是 32 位有符号整数。 ``` section .data prompt db "Please enter up to 10 integers: ", 0 sort_prompt db "Enter 1 to sort in descending order, or 2 to sort in ascending order: ", 0 sorted_data db "Sorted data: ", 0 space db " ", 0 newline db 0Ah section .bss data resd 10 sorted resd 10 section .text global _start _start: ; Prompt for input mov eax, 4 mov ebx, 1 mov ecx, prompt mov edx, len(prompt) int 0x80 ; Read up to 10 integers mov eax, 3 mov ebx, 0 mov ecx, data mov edx, 40 int 0x80 ; Prompt for sorting order mov eax, 4 mov ebx, 1 mov ecx, sort_prompt mov edx, len(sort_prompt) int 0x80 ; Read sorting order mov eax, 3 mov ebx, 0 mov ecx, esp ; Use stack to store sorting order mov edx, 1 int 0x80 ; Convert sorting order to integer sub byte [esp], '0' ; Sort data mov esi, data mov edi, sorted mov ecx, 10 outer_loop: mov ebx, esi mov edx, esi mov eax, dword [esi] inner_loop: add edx, 4 cmp edx, data + ecx * 4 jge next_iteration mov ebx, edx mov eax, dword [edx] cmp eax, dword [esi] jle inner_loop mov dword [esi], eax mov eax, dword [edx] mov dword [edx], dword [esi] mov dword [esi], eax jmp inner_loop next_iteration: mov dword [edi], eax add edi, 4 add esi, 4 loop outer_loop ; Output sorted data mov eax, 4 mov ebx, 1 mov ecx, sorted_data mov edx, len(sorted_data) int 0x80 mov esi, sorted mov ecx, 10 output_loop: mov eax, dword [esi] push eax ; Save data for later use push dword space mov eax, 4 mov ebx, 1 mov ecx, esp mov edx, 1 int 0x80 add esp, 4 ; Pop space add esi, 4 loop output_loop ; Output sorted data on separate lines mov eax, 4 mov ebx, 1 mov ecx, newline mov edx, 1 int 0x80 mov esi, sorted mov ecx, 10 output_loop2: pop eax ; Restore saved data push dword eax push dword newline mov eax, 4 mov ebx, 1 mov ecx, esp mov edx, 1 int 0x80 add esp, 4 ; Pop newline add esp, 4 ; Pop data add esi, 4 loop output_loop2 ; Exit program mov eax, 1 xor ebx, ebx int 0x80 len equ $ - prompt ``` 您可以使用 `nasm` 编译器将代码编译为可执行文件,例如: ``` nasm -f elf32 sort.asm ld -m elf_i386 -s -o sort sort.o ``` 然后运行可执行文件: ``` ./sort ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值